XuqmGroup-PrivateDeploy/docs/configuration.md
2026-07-27 12:21:09 +08:00

5.0 KiB

配置说明

.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 managedexternal
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 值相同)

设计说明Spring 通过 env_file 直接读取 SPRING_DATASOURCE_PASSWORD,而非通过 docker-compose.ymlenvironment: 节替换 ${MYSQL_PASSWORD}。这是因为 compose 变量替换在 shell 中找不到该变量时会替换为空字符串,导致"Access denied (using password: NO)"。旧版部署如缺少这两个字段,reset.shupdate.sh 会自动补齐。


config/xuqm.env

业务服务容器内配置,所有服务共享。私有化部署必须保持:

DEPLOYMENT_MODE=PRIVATE
TENANT_REGISTER_ENABLED=false
TENANT_BOOTSTRAP_ENABLED=true

SDK 对外地址也在此文件配置:

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/
11231 license-service 8085 /api/license/

11224–11231 全部绑定 127.0.0.1,仅用于直接调试。正常流量走内置 nginx80 / 11223


Spring Boot 数据库 URL 覆盖

application.yml 中数据库 URL 硬编码了生产地址。私有化部署通过 docker-compose.ymlenvironment: 节覆盖连接信息URL、用户名、Host、端口,密码通过 config/secrets.envenv_file 直接注入,两者不重叠:

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 网络直接使用服务名,不经过宿主机端口:

# 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-revalidatereleases/<版本>/assets/ 及迁移期旧 assets/ 使用一年 immutable。tenant-web 镜像保留当前与上一版本资源,因此发布后 旧页面仍可完成 lazy chunk 加载,不会回退到 SPA HTML 或返回 404。

详见 runbook.md


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,不再指向公有化地址。如地址错误可执行 bash scripts/update.sh 自动修正。