a3bb78e06b
Security Quality Gate / npm audit, Bandit, pip-audit, detect-secrets (pull_request) Failing after 16m35s
4.4 KiB
4.4 KiB
AI 合同平台 V2 部署 Runbook
日期:2026-06-26
目标
把当前 V2 的本地启动、性能基线、安全收口、烟雾部署和生产变量收成一条可执行路径。
启动顺序
- PostgreSQL 启动。
postgres-init-databases创建yuqei_contract、yuqei_ai、yuqei_ops。ai-platform-api-migrate执行 AI 库迁移。contract-api-migrate执行合同库迁移。- 启动
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.mdyuqei-ai-platform/services/ai-platform-api/README.mdyuqei-ai-platform/services/worker/README.md
收口顺序
- 先保留并复跑性能基线,确认高频路径仍在可交付区间。
- 再跑安全扫描,把 bandit、npm audit、项目级 pip-audit 一起收口。
- 最后整理部署文档和 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:通过,
90samples、6/6suites、16/16checks。 - 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。