Files
ai-contract-platform/project-docs/V2-deploy-runbook-2026-06-26.md
T
yuqei a3bb78e06b
Security Quality Gate / npm audit, Bandit, pip-audit, detect-secrets (pull_request) Failing after 16m35s
release: freeze V2 release candidate
2026-07-12 15:32:24 +08:00

4.4 KiB
Raw Blame History

AI 合同平台 V2 部署 Runbook

日期:2026-06-26

目标

把当前 V2 的本地启动、性能基线、安全收口、烟雾部署和生产变量收成一条可执行路径。

启动顺序

  1. PostgreSQL 启动。
  2. postgres-init-databases 创建 yuqei_contract、yuqei_ai、yuqei_ops。
  3. ai-platform-api-migrate 执行 AI 库迁移。
  4. contract-api-migrate 执行合同库迁移。
  5. 启动 ai-platform-api、contract-api、worker、contract-web。

本地开发

根目录:

Copy-Item yuqei-infra\compose\.env.example yuqei-infra\compose\.env
docker compose --env-file yuqei-infra\compose\.env -f yuqei-infra\compose\docker-compose.yml up --build

如果不走 Docker,服务单独启动命令已经在各自 README.md 中说明:

  • yuqei-contract-platform/services/contract-api/README.md
  • yuqei-ai-platform/services/ai-platform-api/README.md
  • yuqei-ai-platform/services/worker/README.md

收口顺序

  1. 先保留并复跑性能基线,确认高频路径仍在可交付区间。
  2. 再跑安全扫描,把 bandit、npm audit、项目级 pip-audit 一起收口。
  3. 最后整理部署文档和 smoke 命令,形成交付版本。

验证命令

powershell.exe -NoProfile -ExecutionPolicy Bypass -File yuqei-infra\scripts\verify-v2-runtime.ps1
powershell.exe -NoProfile -ExecutionPolicy Bypass -File yuqei-infra\scripts\verify-contract-review-worker-flow.ps1 `
  -ContractApiBaseUrl http://localhost:8100 `
  -WorkerExecutionMode docker-compose `
  -RequireConfidence

烟雾部署

现有烟雾部署脚本:

powershell.exe -NoProfile -ExecutionPolicy Bypass -File yuqei-infra\scripts\deploy-v2-smoke-docker.ps1 `
  -UseSshpass `
  -AllowDirtyWorktree

最新一次已通过的 smoke 产物:

  • project-docs/qa-artifacts/v2-smoke-docker-deploy/2026-07-12T13-21-24
  • Web: http://192.168.3.90:13000
  • Contract API: http://192.168.3.90:18100
  • AI Platform API: http://192.168.3.90:18101
  • MinIO Console: http://192.168.3.90:19001
  • AI golden sample asset gate:通过,90 samples、6/6 suites、16/16 checks。
  • Contract review worker smoke:通过。
  • 远端数据库基线:yuqei_contract、yuqei_ai、yuqei_ops 均存在。
  • 发布质量门:project-docs/qa-artifacts/v2-release-quality-gate/2026-07-12T13-28-00,带 --run-benchmark 复跑通过。
  • 安全扫描:project-docs/qa-artifacts/v2-security-scan/2026-07-12T13-08-00,npm、Bandit、pip-audit 均为 0。
  • 源码 secret 扫描:project-docs/qa-artifacts/v2-source-secret-scan/2026-07-12T15-24-56,覆盖冻结索引的 821 个文件;16 个候选均为已审计样例,新增未审计命中和陈旧基线均为 0。
  • 接口压测:project-docs/qa-artifacts/v2-interface-benchmark/2026-07-12T13-24-00,7 个场景全部通过,错误率均为 0。
  • Contract API:单 Uvicorn worker + 2 秒短读缓存;所有写请求前后清缓存。

生产基线

生产必须显式覆盖这些变量:

CONTRACT_API_ENVIRONMENT=production
CONTRACT_API_DATABASE_AUTO_CREATE=false
CONTRACT_API_SEED_DEMO_DATA=false
CONTRACT_API_UVICORN_WORKERS=1
CONTRACT_API_READ_CACHE_TTL_SECONDS=2
AI_PLATFORM_ENVIRONMENT=production
AI_PLATFORM_DATABASE_AUTO_CREATE=false
AI_PLATFORM_UVICORN_WORKERS=1
YUQEI_WORKER_DATABASE_AUTO_CREATE=false

配套说明:

  • 连接串从 yuqei-infra/compose/.env.production.example 开始替换。
  • 生产不允许依赖自动建表。
  • 发布前先迁移,再替换容器。
  • 当前短读缓存是进程内缓存;当 CONTRACT_API_UVICORN_WORKERS>1 时会自动禁用。生产扩容到多 worker 前,应先接入支持跨进程失效的共享缓存。

回滚策略

  • 保留上一次 smoke 成功的归档和镜像信息。
  • 如果健康检查、数据库基线或 worker smoke 失败,停止继续推进生产替换。
  • 先修复迁移/配置,再重新跑 smoke。

已知限制

  • 本机是否具备 Docker 不再作为发布前置;权威 smoke 以 192.168.3.90 远端 Docker 环境为准。
  • Trace governance 的 24 小时 smoke 观察窗口列为上线前检查项,production 暂不开启,不阻塞当前交付收口。
  • 代码与依赖审计已经可以在本机或 CI 独立完成,不依赖 Docker。
  • 源码 secret 门禁使用 detect-secrets==1.5.0 和已审计基线;新增未审计命中会阻断 CI,扫描 artifact 写入 project-docs/qa-artifacts/v2-source-secret-scan。