149 行
5.6 KiB
Markdown
149 行
5.6 KiB
Markdown
# 配置说明
|
||
|
||
## `.env`
|
||
|
||
主配置文件,由 `install.sh` 自动生成,控制镜像版本、启用的服务和中间件连接信息。
|
||
|
||
关键字段:
|
||
|
||
| 字段 | 说明 |
|
||
|------|------|
|
||
| `REGISTRY` | Docker 镜像仓库地址 |
|
||
| `IMAGE_TAG` | 镜像版本,默认 `latest` |
|
||
| `COMPOSE_PROFILES` | 启用的服务集合,默认 `base,infra-mysql,infra-redis,im,push,update` |
|
||
| `MYSQL_MODE` | `managed`(容器托管)或 `external`(客户自备) |
|
||
| `REDIS_MODE` | `managed` 或 `external` |
|
||
| `CONSOLE_DOMAIN` | 对外访问地址,用于服务间跳转和 SDK 配置 |
|
||
| `NGINX_BIND` | 内置 nginx 绑定端口。`80` = 直接监听宿主机 80;`127.0.0.1:11223` = 有宿主机 nginx 场景 |
|
||
|
||
---
|
||
|
||
## `config/secrets.env`
|
||
|
||
敏感配置,权限 600,不提交 Git。由 `install.sh` 自动生成。
|
||
|
||
| 字段 | 说明 |
|
||
|------|------|
|
||
| `MYSQL_ROOT_PASSWORD` | MySQL root 密码 |
|
||
| `MYSQL_PASSWORD` | 业务账号密码 |
|
||
| `REDIS_PASSWORD` | Redis 密码 |
|
||
| `SPRING_DATASOURCE_PASSWORD` | Spring 读取的数据库密码(与 `MYSQL_PASSWORD` 值相同) |
|
||
| `SPRING_DATA_REDIS_PASSWORD` | Spring 读取的 Redis 密码(与 `REDIS_PASSWORD` 值相同) |
|
||
| `XUQM_STORE_SECRET_MASTER_KEY` | 商店监测凭据 AES-256-GCM 主密钥(32 字节 Base64) |
|
||
| `XUQM_STORE_SECRET_KEY_VERSION` | 主密钥版本标识,默认 `v1` |
|
||
|
||
> **设计说明**:Spring 通过 `env_file` 直接读取 `SPRING_DATASOURCE_PASSWORD`,而非通过 `docker-compose.yml` 的 `environment:` 节替换 `${MYSQL_PASSWORD}`。这是因为 compose 变量替换在 shell 中找不到该变量时会替换为空字符串,导致"Access denied (using password: NO)"。旧版部署如缺少这两个字段,`reset.sh` 和 `update.sh` 会自动补齐。
|
||
|
||
---
|
||
|
||
## `config/xuqm.env`
|
||
|
||
业务服务容器内配置,所有服务共享。私有化部署必须保持:
|
||
|
||
```env
|
||
DEPLOYMENT_MODE=PRIVATE
|
||
TENANT_REGISTER_ENABLED=false
|
||
TENANT_BOOTSTRAP_ENABLED=true
|
||
```
|
||
|
||
SDK 对外地址也在此文件配置:
|
||
|
||
```env
|
||
CONSOLE_DOMAIN=https://your-domain
|
||
SDK_FILE_SERVICE_URL=https://your-domain
|
||
SDK_IM_API_URL=https://your-domain
|
||
SDK_IM_WS_URL=wss://your-domain/ws/im
|
||
```
|
||
|
||
---
|
||
|
||
## `config/tenant/bootstrap.env`
|
||
|
||
初始租户配置,权限 600。迁移模式下由迁移流程自动覆盖。
|
||
|
||
---
|
||
|
||
## 服务端口
|
||
|
||
各服务容器内端口固定,宿主机端口从 11224 顺序分配:
|
||
|
||
| 宿主机端口 | 服务 | 容器内端口 | nginx 路由 |
|
||
|-----------|------|-----------|-----------|
|
||
| 11224 | tenant-service | 9001 | `/api/` `/actuator/` |
|
||
| 11225 | file-service | 8086 | `/file/` |
|
||
| 11226 | tenant-web | 80 | `/`(兜底路由) |
|
||
| 11228 | im-service | 8082 | `/api/im/` `/ws/im` |
|
||
| 11229 | push-service | 8083 | 厂商回调(按需) |
|
||
| 11230 | update-service | 8084 | `/api/v1/updates/` `/api/v1/rn/` |
|
||
|
||
业务容器端口全部绑定 `127.0.0.1`,仅用于直接调试。正常流量走内置 nginx(80 / 11223)。
|
||
|
||
---
|
||
|
||
## Spring Boot 数据库 URL 覆盖
|
||
|
||
`application.yml` 中数据库 URL 硬编码了生产地址。私有化部署通过 `docker-compose.yml` 的 `environment:` 节覆盖连接信息(URL、用户名、Host、端口),密码通过 `config/secrets.env` 的 `env_file` 直接注入,两者不重叠:
|
||
|
||
```yaml
|
||
environment:
|
||
SPRING_DATASOURCE_URL: "jdbc:mysql://${MYSQL_HOST}:${MYSQL_PORT:-3306}/..."
|
||
SPRING_DATASOURCE_USERNAME: "${MYSQL_USERNAME:-xuqm}"
|
||
SPRING_DATA_REDIS_HOST: "${REDIS_HOST}"
|
||
SPRING_DATA_REDIS_PORT: "${REDIS_PORT:-6379}"
|
||
SPRING_DATA_REDIS_DATABASE: "${REDIS_DATABASE:-0}"
|
||
# 密码不在此处设置,由 secrets.env env_file 注入,见上方说明
|
||
```
|
||
|
||
---
|
||
|
||
## 容器内部通信
|
||
|
||
容器间通过 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"
|
||
```
|
||
|
||
---
|
||
|
||
## 内置 nginx
|
||
|
||
nginx 容器属于 `base` 必启服务,直接绑定宿主机 `0.0.0.0:80`,统一处理所有内部路由。配置文件为 `config/nginx/conf.d/xuqm.conf`,使用 `resolver 127.0.0.11 valid=10s` + 变量化 `proxy_pass`,**容器重建后 nginx 无需 reload**,自动通过 Docker DNS 获取新 IP。
|
||
|
||
Web 代理会覆盖上游缓存头:入口 HTML、manifest 和普通路由使用
|
||
`no-cache, no-store, must-revalidate`;`releases/<版本>/assets/` 及迁移期旧
|
||
`assets/` 使用一年 `immutable`。tenant-web 镜像保留当前与上一版本资源,因此发布后
|
||
旧页面仍可完成 lazy chunk 加载,不会回退到 SPA HTML 或返回 404。
|
||
|
||
详见 [runbook.md](runbook.md#nginx-配置)。
|
||
|
||
---
|
||
|
||
## `config/vendors/`
|
||
|
||
| 文件 | 说明 |
|
||
|------|------|
|
||
| `push.env` | 华为/小米/OPPO/vivo/荣耀/APNs/FCM 推送凭据,默认全部 `false` |
|
||
| `store-submit.env` | 应用市场自动发布凭据,默认全部 `false` |
|
||
|
||
---
|
||
|
||
## `config/mail/smtp.env`
|
||
|
||
邮件服务配置,不填则邮件功能不可用,不影响其他服务启动。`tenant-service`
|
||
用于账号邮件,`update-service` 用于租户显式启用的商店状态邮件通知;通知默认关闭,
|
||
未配置 SMTP 时 `MANAGEMENT_HEALTH_MAIL_ENABLED=false`,不会使更新服务整体健康状态
|
||
变为 DOWN。启用邮件通知并完成 SMTP 配置后,可设为 `true` 将邮件连接纳入健康检查。
|
||
邮件发送失败不得影响商店状态同步和平台主流程。
|
||
|
||
---
|
||
|
||
## `config/sdk/xuqm-private-sdk.json`
|
||
|
||
SDK 初始化配置,由 `deploy.sh` 自动生成,客户端应用使用此文件初始化 SDK,不再指向公有化地址。如地址错误可执行 `bash scripts/update.sh` 自动修正。
|