|
|
# 宝塔 + 宿主机 MySQL + Docker 应用(内网 30325)
|
|
|
|
|
|
适用于:
|
|
|
|
|
|
- MySQL:**宝塔面板**,已导入 `chajia.sql`
|
|
|
- Redis:**本项目 Docker Compose 内的 redis 容器**
|
|
|
- 应用:**Docker 容器**(next-app + rpa-worker + scheduler)
|
|
|
- 访问:内网 `http://服务器IP:30325`
|
|
|
|
|
|
---
|
|
|
|
|
|
## 一、宝塔 MySQL 准备
|
|
|
|
|
|
1. 已创建数据库 `chajia`,字符集 **utf8mb4**
|
|
|
2. 已导入 `数据库/chajia.sql`
|
|
|
3. 已创建数据库用户(如 `chajia_user`),并赋予 **chajia 库全部权限**
|
|
|
|
|
|
### 允许 Docker 容器连接宿主机 MySQL
|
|
|
|
|
|
容器通过 `host.docker.internal` 访问宿主机。宝塔 MySQL 默认可能只监听 `127.0.0.1`,需确认:
|
|
|
|
|
|
1. 宝塔 → **数据库** → **root 密码** 旁 **权限** / 或 MySQL 设置
|
|
|
2. 确保 MySQL 对 Docker 网段可连(常见做法二选一):
|
|
|
|
|
|
**做法 A(推荐)**:在宝塔为该用户授权远程主机 `172.%` 或 `172.17.%`
|
|
|
|
|
|
```sql
|
|
|
-- 在宝塔 phpMyAdmin 或终端执行(按实际用户名改)
|
|
|
CREATE USER 'chajia_user'@'172.%' IDENTIFIED BY '你的密码';
|
|
|
GRANT ALL PRIVILEGES ON chajia.* TO 'chajia_user'@'172.%';
|
|
|
FLUSH PRIVILEGES;
|
|
|
```
|
|
|
|
|
|
**做法 B**:MySQL 配置 `bind-address = 0.0.0.0`(需评估安全,仅内网服务器可考虑)
|
|
|
|
|
|
### 测试(在服务器上)
|
|
|
|
|
|
```bash
|
|
|
# 查看 Docker 网桥网关(多为 172.17.0.1)
|
|
|
ip addr show docker0
|
|
|
|
|
|
# 从宿主机测试宝塔用户能否登录
|
|
|
mysql -h 127.0.0.1 -u chajia_user -p chajia
|
|
|
```
|
|
|
|
|
|
---
|
|
|
|
|
|
## 二、配置 .env
|
|
|
|
|
|
```bash
|
|
|
cd /opt/chajia # 你的代码目录
|
|
|
|
|
|
cp deploy/.env.bt-host-mysql.example .env
|
|
|
nano .env
|
|
|
```
|
|
|
|
|
|
必改项:
|
|
|
|
|
|
| 变量 | 示例 |
|
|
|
|------|------|
|
|
|
| `APP_PORT` | `30325` |
|
|
|
| `PUBLIC_HOST` | 服务器内网 IP,如 `192.168.1.100` |
|
|
|
| `DATABASE_URL` | `mysql://chajia_user:密码@host.docker.internal:3306/chajia` |
|
|
|
| `JWT_SECRET` | 随机长串 |
|
|
|
| `HOST_SERVICE_TOKENS` | 给内网其它系统的 API Token |
|
|
|
|
|
|
密码含 `@`、`#` 等需 [URL 编码](https://www.urlencoder.org/)。
|
|
|
|
|
|
---
|
|
|
|
|
|
## 三、启动
|
|
|
|
|
|
```bash
|
|
|
chmod +x deploy/install-bt-host-mysql.sh
|
|
|
bash deploy/install-bt-host-mysql.sh
|
|
|
```
|
|
|
|
|
|
**不要**再执行 `install.sh`(那个会再起一个容器 MySQL)。
|
|
|
|
|
|
---
|
|
|
|
|
|
## 四、内网访问
|
|
|
|
|
|
| 用途 | 地址 |
|
|
|
|------|------|
|
|
|
| 管理端 | `http://192.168.x.x:30325/admin/alerts` |
|
|
|
| API | `http://192.168.x.x:30325/api/...` |
|
|
|
| 默认账号 | `admin_demo` / `Demo@123` |
|
|
|
|
|
|
内网其它系统 Base URL:`http://<服务器IP>:30325`
|
|
|
详见 `deploy/API.md`。
|
|
|
|
|
|
---
|
|
|
|
|
|
## 五、宝塔防火墙 / 安全组
|
|
|
|
|
|
- 放行 **30325**(内网互通即可,不必对公网开放)
|
|
|
- **不要**对公网开放 3306(MySQL)、6379(Redis)
|
|
|
|
|
|
若用宝塔 **Docker 管理器** 发布,端口映射填:`30325 → 3000`。
|
|
|
|
|
|
---
|
|
|
|
|
|
## 六、故障排查
|
|
|
|
|
|
| 现象 | 处理 |
|
|
|
|------|------|
|
|
|
| `Can't connect to MySQL` | 检查用户是否授权 `172.%`;`DATABASE_URL` 主机是否为 `host.docker.internal` |
|
|
|
| 一直 `processing` | `docker compose -f deploy/docker-compose.bt-host-mysql.yml logs -f rpa-worker` |
|
|
|
| 端口不通 | 宝塔防火墙、iptables、云安全组是否放行 30325 |
|
|
|
| 连不上 Redis | 确认 redis 容器 Up;应用应使用 `redis://redis:6379`(compose 已注入) |
|
|
|
|
|
|
---
|
|
|
|
|
|
## 七、架构示意
|
|
|
|
|
|
```
|
|
|
内网其它系统 ──HTTP:30325──► [Docker] next-app
|
|
|
│
|
|
|
├──► [Docker] redis
|
|
|
│
|
|
|
└──► host.docker.internal:3306
|
|
|
│
|
|
|
[宝塔] MySQL chajia
|
|
|
```
|