fix(cma): DDL 与启动剥离 —— 关闭启动 create_all + 部署链特权迁移步 (cma-create-all-minpriv-rootfix-20260916)
ci/woodpecker/push/main Pipeline failed
ci/woodpecker/push/main Pipeline failed
根治 2026-09-16 发布中断(新增模型触发启动 create_all,cma_api 无 CREATE → 崩溃循环): - backend/app/database.py: 新增 CMA_AUTO_CREATE 开关(**默认关**),生产启动不再执行 DDL; 运行库账号因此无需 CREATE(最小权限可保持) - backend/scripts/db_migrate.py: 特权迁移步(--check/--apply/--rollback/--status); 幂等(checkfirst)+ journal 留痕 + 可回滚(dump 失败/表有数据即拒绝,fail-closed); 显式拒绝用应用运行账号 cma_api 执行 - deploy.sh: 新增 [4b] 结构迁移(**重启前**执行;失败即中止部署,后端旧码继续服务) - backend/scripts/tests/db-migrate-sim-e2e.sh: 17 项 scratch 复现/验收(负控制复现 CREATE command denied) - docs/db-migration-runbook.md: 运行手册(含 cma_api CREATE 回收步骤) 验收:scratch E2E 17/17;pytest 1113 passed/1 xfailed;生产 --check 缺失表 0 / 列级差异 0; --apply 幂等空跑 created_new=0(journal 留痕)
This commit is contained in:
@@ -60,6 +60,21 @@ else
|
||||
fi
|
||||
echo " ✓ 依赖检查完成"
|
||||
|
||||
# 4b. 数据库结构迁移(特权,重启前执行;幂等;可回滚)
|
||||
# cma-create-all-minpriv-rootfix-20260916:DDL 已从应用启动剥离(CMA_AUTO_CREATE 默认关),
|
||||
# 新模型必须由**有 DDL 权限的账号**在重启前建表;此处失败即中止部署(后端保持旧码运行),
|
||||
# 避免 2026-09-16 那种「启动 create_all 被 cma_api 拒 → 崩溃循环」。
|
||||
echo "[4b/5] 数据库结构迁移(特权账号,重启前)..."
|
||||
cd "$SCRIPT_DIR/backend"
|
||||
if ! ./venv/bin/python3 scripts/db_migrate.py --apply; then
|
||||
echo "❌ 数据库结构迁移失败 → 中止部署(后端未重启,旧码继续服务)"
|
||||
echo " 排查: cd $SCRIPT_DIR/backend && ./venv/bin/python3 scripts/db_migrate.py --check"
|
||||
echo " 回滚: cd $SCRIPT_DIR/backend && ./venv/bin/python3 scripts/db_migrate.py --rollback latest"
|
||||
exit 1
|
||||
fi
|
||||
cd "$SCRIPT_DIR"
|
||||
echo " ✓ 结构迁移完成(幂等;journal: backend/scripts/backups/db-migrate-journal/)"
|
||||
|
||||
# 5. 重启后端服务
|
||||
echo "[5/5] 重启后端服务..."
|
||||
systemctl daemon-reload
|
||||
|
||||
Reference in New Issue
Block a user