docs: record first-deployment model and manual schema initialization
This commit is contained in:
@@ -15,20 +15,21 @@ kubectl -n zhinian create secret generic zhinian-rds-ca \
|
||||
--from-file=ca.pem=./path/to/downloaded-rds-ca.pem
|
||||
kubectl apply -f deploy/ack/configmap.yaml
|
||||
kubectl apply -f deploy/ack/secrets.example.yaml # 仅作模板;先替换全部占位值
|
||||
kubectl apply -f deploy/ack/migration-job.yaml
|
||||
kubectl -n zhinian wait --for=condition=complete job/zhinian-db-migrate --timeout=5m
|
||||
kubectl apply -f deploy/ack/web.yaml -f deploy/ack/worker.yaml \
|
||||
-f deploy/ack/service.yaml -f deploy/ack/ingress.yaml
|
||||
```
|
||||
|
||||
迁移 Job 运行 `node scripts/migrate-postgres.mjs`,读取镜像内
|
||||
`database/migrations/*.sql`。迁移使用独立的 `zhinian-migration-db` Secret,以便
|
||||
授予建表/变更权限;Web 的 `zhinian-web-db` 应只具有应用运行权限。每次发布先运行
|
||||
迁移并确认成功,再滚动 Web。
|
||||
数据库 schema 由部署负责人在发布前手工执行,**不部署迁移 Job Pod**(清单
|
||||
`deploy/ack/migration-job.yaml` 已弃用保留):使用迁移角色账号依次执行
|
||||
`database/migrations/0001_initial_schema.sql`、`0002_generation_lifecycle_fencing.sql`,
|
||||
再执行应用角色授权语句(表权限 + 两个并发函数 `claim_generation_jobs` 与
|
||||
`billing_post_wallet_entry` 的 EXECUTE 权限,参见
|
||||
`scripts/migrate-postgres.mjs` 中的 `provisionApplicationRole`)。Web/Go 的数据库
|
||||
账号应只具有应用运行权限。以后每次 schema 变更同样按版本化 SQL 文件手工执行,并在
|
||||
变更后再滚动工作负载。
|
||||
|
||||
首次把已有数据库纳入版本化迁移前必须先做 RDS 快照/逻辑备份,并在维护窗口执行。迁移器
|
||||
遇到重复的历史 `usage_events.job_id` 会安全失败并要求人工审计,不会自动删除计费/用量
|
||||
记录;清理后重新运行同一 Job。
|
||||
迁移 SQL 包含重复数据保护:遇到重复的历史 `usage_events.job_id` 会失败并要求人工
|
||||
审计,不会自动删除计费/用量记录;清理后重新执行对应文件。
|
||||
|
||||
替换模板占位符后,可先运行 `npm run deploy:check` 做仓库内静态契约检查;真正发布前仍需
|
||||
使用目标 ACK 集群的 `kubectl apply --dry-run=server` 验证 CRD/准入策略和 Ingress 行为。
|
||||
@@ -64,7 +65,7 @@ Secret/ConfigMap 后触发 Deployment 滚动更新。
|
||||
| --- | --- |
|
||||
| `ZHINIAN_DATA_BACKEND` | 生产固定为 `postgres`;配置错误不会降级到本地 JSON |
|
||||
| `DATABASE_URL` | PostgreSQL URI,仅存 Secret;不要写入镜像、ConfigMap 或日志 |
|
||||
| `DATABASE_APP_ROLE` | 迁移 Job 使用;与 Web 的 RDS 用户名一致,用于授予最小应用权限 |
|
||||
| `DATABASE_APP_ROLE` | 应用角色名;手工执行授权语句时使用,与 Web/Go 的 RDS 用户名一致 |
|
||||
| `DATABASE_SSL_MODE` | `disable` 或 `verify-full`;RDS SSL 生产建议 `verify-full` |
|
||||
| `DATABASE_CA_CERT_PATH` | 已挂载 CA 文件路径 |
|
||||
| `DATABASE_POOL_MAX` | 单个 Web Pod 最大连接数 |
|
||||
@@ -159,12 +160,15 @@ ALI_OSS_PUBLIC_BASE_URL=
|
||||
npm run bootstrap:admin -- --phone 13800138000 --password '请替换为强密码' --name '平台超级管理员'
|
||||
```
|
||||
|
||||
生产部署前设置 `DATABASE_APP_ROLE` 并执行 `npm run db:migrate`,然后运行一次超级管理员
|
||||
初始化命令。迁移器只向该应用角色显式授予当前业务表 DML 和两个数据库函数 EXECUTE;
|
||||
不会授予未来对象的默认权限、`schema_migrations` 或 DDL 权限。新增表/函数时必须随对应
|
||||
版本迁移显式更新授权。旧账号使用
|
||||
`npm run migrate:accounts -- path/to/legacy-accounts.json` 导入;迁移会保留用量并把历史
|
||||
素材、任务、项目和模板映射到平台账号。
|
||||
生产部署前先手工执行版本化 SQL 完成建库建表与授权(见上文"手工建库建表"步骤),然后
|
||||
通过环境变量初始化超级管理员:Go 后端首次启动时读取
|
||||
`ZHINIAN_BOOTSTRAP_ADMIN_PHONE` / `ZHINIAN_BOOTSTRAP_ADMIN_PASSWORD` /
|
||||
`ZHINIAN_BOOTSTRAP_ADMIN_NAME`(密码至少 8 位,名称缺省为"平台超级管理员"),仅在
|
||||
不存在任何超级管理员时创建一次,无需单独脚本。旧的 `npm run bootstrap:admin` 脚本
|
||||
仅为本地/Next 开发保留。授权只向应用角色显式授予当前业务表 DML 和两个数据库函数
|
||||
EXECUTE;不会授予未来对象的默认权限、`schema_migrations` 或 DDL 权限。新增表/函数时
|
||||
必须随对应版本 SQL 显式更新授权。旧账号导入脚本 `npm run migrate:accounts` 仅为历史
|
||||
遗留工具保留,新部署无需使用。
|
||||
|
||||
## 旧版组织账号接口(已停用)
|
||||
|
||||
@@ -234,7 +238,7 @@ Docker Compose 会挂载:
|
||||
本地 JSON 数据层、上传文件和生成结果都会放在 `.runtime/` 下。`local` 仅适合单实例开发;如临时使用,必须备份该目录。
|
||||
服务端日志也会放在 `.runtime/logs/` 下,建议和运行时数据一起备份或接入服务器日志采集。
|
||||
|
||||
生产 PostgreSQL 发布前必须执行 `npm run db:migrate`,或先完成 ACK 的 `zhinian-db-migrate` Job。迁移器使用版本记录、校验和、事务和 advisory lock;迁移成功后再滚动 Web。首次打开 `/billing` 或提交真实任务时,系统会自动导入内置标准成本目录;平台参数档案会同步,已有倍率会保留,超级管理员只维护上浮倍率。
|
||||
生产 PostgreSQL 发布前必须按顺序手工执行版本化 SQL 文件(0001 再 0002)与角色授权;不部署 `zhinian-db-migrate` Job。执行完成后再滚动工作负载。首次打开 `/billing` 或提交真实任务时,系统会自动导入内置标准成本目录;平台参数档案会同步,已有倍率会保留,超级管理员只维护上浮倍率。
|
||||
|
||||
建议备份:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user