XuqmGroup-PrivateDeploy/docs/runbook.md
徐勤民 f0649e9305 feat: 数字医信一键部署脚本 + 文档整理
scripts/deploy-szyx.sh (新增):
  七步幂等脚本,覆盖从预检到验收全流程:
  1. Docker / Compose / 磁盘 / 端口预检
  2. 写入数字医信专属配置(.env / secrets.env / xuqm.env /
     nginx / sdk-json),所有值固化为默认值,支持环境变量覆盖
  3. 登录 ACR (crpi-n44qjpuucgjt8e8c.cn-beijing.personal.cr.aliyuncs.com)
  4. 启动 MySQL + Redis 并轮询就绪
  5. 启动 base profile 业务容器并等待 actuator/health
  6. 迁移数字医信生产租户(szyx@bjca.org.cn),已迁移时自动跳过
  7. 验收:health / PRIVATE 模式 / 两个 appKey SDK config / 注册阻断 / 前端

docs/configuration.md:
  补充 Spring Boot SPRING_DATASOURCE_* 覆盖说明(application.yml
  硬编码生产 DB URL 的关键陷阱),nginx 服务端口对照表,
  docs-site 镜像可选说明。

docs/runbook.md:
  新增租户迁移章节,含前提、命令、自动步骤、验证示例。

README.md:
  快速参考:migrate-tenant.sh 用法、三条部署注意事项。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-19 08:01:19 +08:00

3.1 KiB

私有化部署运行手册

目标

本仓库用于客户私有环境交付,只编排已有 Docker 镜像,不包含业务源码、不构建 demo 服务。

标准流程

  1. 执行 ./scripts/configure.sh 生成 .envconfig/secrets.env
  2. 修改 .env镜像仓库、镜像版本、域名、可选服务、MySQL/Redis 模式。
  3. 修改 config/secrets.env数据库密码、Redis 密码、SMTP 密码等敏感配置。
  4. 修改 config/mail/smtp.envconfig/vendors/*.env
  5. 执行 ./scripts/install.sh --profile base 部署基础服务。
  6. 按需执行 ./scripts/enable-service.sh im|push|update|license 启用可选服务。
  7. 执行 ./scripts/healthcheck.sh 并检查 .deploy-state/last-healthcheck.json

MySQL/Redis 模式

external 模式:

  • 客户提供连接地址、账号、密码、数据库名。
  • 部署脚本只使用连接配置,不启动新服务。
  • 生产默认使用该模式。

managed 模式:

  • 部署脚本通过 Docker Compose 启动 MySQL/Redis。
  • 密码为空或为 change-me 时自动生成并写入 config/secrets.env
  • 数据目录写入 data/mysqldata/redis

可选服务

impushupdatelicense 均可不部署,后期独立启用。

启用命令:

./scripts/enable-service.sh im
./scripts/install.sh --profile base,im

禁用命令:

./scripts/disable-service.sh im

禁用服务不会删除数据,重新启用后继续使用原配置和数据目录。

租户迁移(公有化 → 私有化)

将公有化平台的存量租户迁移到私有化部署。

前提条件

  • 私有化基础服务已通过 healthcheck.sh
  • 源 MySQL 可从部署机器网络连通(mysql -h SRC_HOST ... 成功)。
  • 私有化部署为单租户模式:迁移会清空当前 bootstrap 租户后写入迁移租户。

执行迁移

# Dry-run 确认要迁移的数据
./scripts/migrate-tenant.sh \
  --src-host <生产MySQL> \
  --src-user <用户名> \
  --src-password '<密码>' \
  --src-db xuqm_tenant \
  --tenant <租户邮箱或用户名> \
  --dry-run

# 确认无误后正式执行
./scripts/migrate-tenant.sh \
  --src-host <生产MySQL> \
  --src-user <用户名> \
  --src-password '<密码>' \
  --src-db xuqm_tenant \
  --tenant <租户邮箱或用户名>

迁移脚本会自动:

  1. 从源库导出 t_tenantt_appt_feature_service(含厂商配置)。
  2. 用显式列名 INSERT 规避生产与私有化 MySQL 的列序差异。
  3. 清空私有化部署的 bootstrap 租户后写入迁移数据。
  4. 重启 tenant-service 清空内存缓存。
  5. 通过 /api/sdk/config/api/private/deployment/status 验证结果。

验证

# SDK config 应返回 200
curl "http://DEPLOY_HOST/api/sdk/config?appKey=<app_key>&platform=ANDROID"

# 部署状态应为 PRIVATE,注册应为 false
curl "http://DEPLOY_HOST/api/private/deployment/status"

接手规则

任何 agent 开始执行前必须先查看:

  • .deploy-state/progress.md
  • .deploy-state/current.json
  • logs/audit.log

执行关键步骤后必须追加进度,确保中断后可继续。