# 宝塔 + 宿主机 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 ```