XuqmGroup私有化部署仓库
转到文件
徐勤民 60aeb61433 fix(deploy): 迁移/新建租户后同步写入 app_licenses,修复 license 404
importData API 只写 t_tenant/t_app/t_feature_service,不写 license-service
的 app_licenses 表,导致前端 /api/license/admin/apps/:appKey 返回 404。

在 deploy.sh 的迁移和新建两个分支中,import 成功后直接对同一 MySQL 执行
INSERT ... ON DUPLICATE KEY UPDATE,为所有非系统应用补写 app_licenses 记录。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 12:11:19 +08:00
.deploy-state feat(deploy): 完成私有化部署全流程验收 2026-05-19 19:23:28 +08:00
config feat(deploy): 完成私有化部署全流程验收 2026-05-19 19:23:28 +08:00
data chore: scaffold private deployment repository 2026-05-18 19:49:31 +08:00
docs feat(deploy): 完成私有化部署全流程验收 2026-05-19 19:23:28 +08:00
logs chore: scaffold private deployment repository 2026-05-18 19:49:31 +08:00
scripts fix(deploy): 迁移/新建租户后同步写入 app_licenses,修复 license 404 2026-05-20 12:11:19 +08:00
templates chore: scaffold private deployment repository 2026-05-18 19:49:31 +08:00
.env.example feat(deploy): 完成私有化部署全流程验收 2026-05-19 19:23:28 +08:00
.gitignore chore: scaffold private deployment repository 2026-05-18 19:49:31 +08:00
docker-compose.infra.yml feat: 一键安装向导 + 交互式租户初始化 2026-05-19 14:29:57 +08:00
docker-compose.yml fix(docker-compose): add SPRING_DATASOURCE/REDIS overrides to all services 2026-05-19 18:23:27 +08:00
image-manifest.json chore: scaffold private deployment repository 2026-05-18 19:49:31 +08:00
install.sh fix(install): exclude data/ from tar extraction on reinstall 2026-05-19 15:59:57 +08:00
README.md feat: 数字医信一键部署脚本 + 文档整理 2026-05-19 08:01:19 +08:00
VERSION chore: scaffold private deployment repository 2026-05-18 19:49:31 +08:00

XuqmGroup Private Deploy

私有化部署仓库只负责客户环境交付,不包含业务源码和 demo 前后端。

快速开始

./scripts/configure.sh
vim .env
vim config/secrets.env
./scripts/install.sh --profile base
./scripts/healthcheck.sh

生产部署前必须完成:

  • 配置镜像仓库 REGISTRY 和版本 IMAGE_TAG
  • 选择 MySQL/Redis 模式:external 使用客户自备服务,managed 由脚本创建容器服务。
  • 配置控制台、文档站、文件、IM、Push、Update、License 域名。
  • 配置 SMTP、Push 厂商、应用市场发布凭据。
  • 确认证书和反向代理策略,默认 Nginx 配置只作为模板入口。

部署模式

MySQL、Redis 支持两种模式:

  • external:客户自备连接,脚本只校验连通性和权限。
  • managed:脚本新建服务,自动创建数据库、账号、密码和数据目录。

生产环境默认推荐 external/external

托管模式示例:

./scripts/install.sh --profile base --mysql-mode managed --redis-mode managed

外部模式示例:

./scripts/install.sh --profile base --mysql-mode external --redis-mode external

可选服务

  • base:基础控制台、运营平台、文档站、文件服务。
  • imIM HTTP / WebSocket。
  • push:厂商推送。
  • update版本管理、RN 热更新、应用市场自动发布。
  • licenseLicense 校验。

后期启用:

./scripts/enable-service.sh im
./scripts/enable-service.sh push
./scripts/enable-service.sh update
./scripts/enable-service.sh license

禁用服务只修改部署配置并停止对应容器,不删除数据:

./scripts/disable-service.sh im

租户迁移

将公有化平台的存量租户迁移到私有化部署(需源 MySQL 网络可达):

./scripts/migrate-tenant.sh \
  --src-host <生产MySQL地址> \
  --src-user <用户名> \
  --src-password '<密码>' \
  --tenant <租户邮箱或用户名>

--dry-run 只打印 SQL 不执行。详见 docs/runbook.md

注意事项

  • tenant-service 运行在容器内 9001 端口,nginx 代理必须指向该端口,不是 8080。
  • application.yml 中数据库 URL 硬编码了生产地址,私有化部署依赖 docker-compose.yml 中的 SPRING_DATASOURCE_* 覆盖,不能删除 environment: 节。
  • docs-site 镜像可选,不存在时 nginx 和 healthcheck 可正常工作warn 级别)。

接手入口

  • 实时部署进度:.deploy-state/progress.md
  • 最近运行状态:.deploy-state/current.json
  • 最近健康检查:.deploy-state/last-healthcheck.json
  • 脚本审计日志:logs/audit.log
  • 交付说明:docs/runbook.md
  • 配置说明:docs/configuration.md
  • 验收清单:docs/acceptance-checklist.md