XuqmGroup-PrivateDeploy/docs/configuration.md
徐勤民 a327a262dd feat(deploy): 移除 ops-web、修复 SDK URL 注入、新增一键升级
核心变更:
- 完全移除 ops-web 容器(私有化部署无需运营后台)
- nginx sub_filter 替换前端 JS bundle 中的公网 SDK URL
- deploy.sh 写入正确的 SDK_IM_WS_URL / SDK_IM_API_URL / SDK_FILE_SERVICE_URL
- 新增 scripts/update.sh:热更新脚本,修复配置 + 可选拉镜像 + 重启 + 验证
- 新增 upgrade.sh:一键升级入口,curl 下载后直接执行,流程同 install.sh
- install.sh 检测已有部署(.env 存在),自动路由到 update.sh 而非重跑向导
- 关键配置文件(.env / secrets.env / xuqm.env)在 tarball 解压前备份后恢复

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 18:25:12 +08:00

117 行
3.9 KiB
Markdown

# 配置说明
## `.env`
主配置文件,由 `install.sh` 自动生成,控制镜像版本、启用的服务和中间件连接信息。
关键字段:
| 字段 | 说明 |
|------|------|
| `REGISTRY` | Docker 镜像仓库地址 |
| `IMAGE_TAG` | 镜像版本,默认 `latest` |
| `COMPOSE_PROFILES` | 启用的服务集合,默认 `base,infra-mysql,infra-redis,im,push,update,license` |
| `MYSQL_MODE` | `managed`(容器托管)或 `external`(客户自备) |
| `REDIS_MODE` | `managed``external` |
| `CONSOLE_DOMAIN` | 对外访问地址,用于服务间跳转和 SDK 配置 |
## `config/secrets.env`
敏感配置,权限 600,不提交 Git。
| 字段 | 说明 |
|------|------|
| `MYSQL_ROOT_PASSWORD` | MySQL root 密码 |
| `MYSQL_PASSWORD` | 业务账号密码 |
| `REDIS_PASSWORD` | Redis 密码 |
## `config/xuqm.env`
业务服务容器内配置,所有服务共享。私有化部署必须保持:
```env
DEPLOYMENT_MODE=PRIVATE
TENANT_REGISTER_ENABLED=false
TENANT_BOOTSTRAP_ENABLED=true
```
SDK 对外地址也在此文件配置:
```env
CONSOLE_DOMAIN=http://your-domain-or-ip
SDK_FILE_SERVICE_URL=http://your-domain-or-ip
SDK_IM_API_URL=http://your-domain-or-ip
SDK_IM_WS_URL=ws://your-domain-or-ip/ws/im
```
## `config/tenant/bootstrap.env`
初始租户配置,权限 600。迁移模式下由迁移流程自动覆盖。
## Spring Boot 数据库 URL 覆盖
`application.yml` 中数据库 URL 硬编码了生产地址。私有化部署**必须**通过 `docker-compose.yml``environment:` 节覆盖:
```yaml
environment:
SPRING_DATASOURCE_URL: "jdbc:mysql://${MYSQL_HOST}:${MYSQL_PORT:-3306}/${MYSQL_DATABASE:-xuqm_private}?..."
SPRING_DATASOURCE_USERNAME: "${MYSQL_USERNAME:-xuqm}"
SPRING_DATASOURCE_PASSWORD: "${MYSQL_PASSWORD}"
SPRING_DATA_REDIS_HOST: "${REDIS_HOST}"
SPRING_DATA_REDIS_PORT: "${REDIS_PORT:-6379}"
SPRING_DATA_REDIS_PASSWORD: "${REDIS_PASSWORD}"
SPRING_DATA_REDIS_DATABASE: "${REDIS_DATABASE:-0}"
```
`docker-compose.yml` 已包含此配置,不需要手动修改。
## 服务端口
各服务容器内端口固定,宿主机端口从 11224 顺序分配:
| 宿主机端口 | 服务 | 容器内端口 | nginx 路由 |
|-----------|------|-----------|-----------|
| 11224 | tenant-service | 9001 | `/api/` `/actuator/` |
| 11225 | file-service | 8086 | `/file/` |
| 11226 | tenant-web | 80 | `/`(兜底路由) |
| 11227 | im-service | 8082 | `/api/im/` `/ws/im` |
| 11229 | update-service | 8084 | `/api/v1/updates/` `/api/v1/rn/` |
| 11230 | license-service | 8085 | `/api/license/` |
| 11231 | push-service | 8083 | 厂商回调(按需) |
内置 nginx 绑定宿主机 `0.0.0.0:80`,上层直接 proxy_pass 到本机 IP 即可。11224–11231 绑定 `127.0.0.1`,仅用于直接调试。
## 容器内部通信
容器间通过 Docker 网络直接使用服务名,不经过宿主机端口:
```yaml
# im-service
TENANT_SERVICE_URL: "http://tenant-service:9001"
PUSH_SERVICE_URL: "http://push-service:8083"
# update-service
SDK_TENANT_SERVICE_URL: "http://tenant-service:9001"
```
`docker-compose.yml` 已包含上述配置,不需要手动修改。
## 内置 nginx
nginx 容器属于 `base` 必启服务,直接绑定宿主机 `0.0.0.0:80`,统一处理所有内部路由(按 Docker 服务名转发,无需关心各服务端口)。**宿主机无需额外 nginx 配置**,上层 nginx 直接 proxy_pass 指向本机 IP:80 即可,详见 [runbook.md](runbook.md#nginx-配置)。
## `config/vendors/`
| 文件 | 说明 |
|------|------|
| `push.env` | 华为/小米/OPPO/vivo/荣耀/APNs/FCM 推送凭据,默认全部 `false` |
| `store-submit.env` | 应用市场自动发布凭据,默认全部 `false` |
## `config/mail/smtp.env`
邮件服务配置,不填则邮件功能不可用,不影响其他服务启动。
## `config/sdk/xuqm-private-sdk.json`
SDK 初始化配置,由 `deploy.sh` 自动生成,客户端应用使用此文件初始化 SDK,不再指向公有化地址。