feat(deploy): 财务上线数据阶段编排与运维加固

- 新增 deploy/post-deploy.sh:回填 → 业务配置 → 同步 → 验收四阶段编排,支持 --only/--dry-run/窗口参数
- 新增 tools 镜像与 scripts/verify-finance-launch.sql(15 项上线验收)
- 验收口径:成本闸门二选一、要求已过账凭证、备用金支出关联、成本覆盖 WARN
- 加固:参数校验、工具镜像每次刷新、docker run 兜底超时、迁移前缀探测、验收失败退出码 2
- 工具镜像预建 /app/data,消除日志 EACCES
- 回填后与 restore-db 恢复后自动 VACUUM (ANALYZE),修复订单列表分页 COUNT 全表扫描(41 万单实测 27s → 0.17s)
- 文档:41 万单同步用 7 天窗 + 180s 超时;回填/恢复后刷新统计
This commit is contained in:
yml2213
2026-10-28 11:52:42 +08:00
parent 2ddc26091c
commit 08318ef8d9
8 changed files with 977 additions and 8 deletions
+34
View File
@@ -141,6 +141,40 @@ services:
volumes:
- ./apps/backend/data:/app/data
# 财务运维工具容器:跑 scripts/ 下的回填/同步脚本。
#
# 生产 backend 镜像 `npm prune --omit=dev` 且只 COPY dist,没有 tsx 与 scripts/,
# 所以回填脚本必须用这个镜像执行。默认不随 `up` 启动(profiles: tools)。
#
# 用法:
# docker compose --profile tools run --rm --no-deps tools npm run revenue:backfill -- --dryRun
# 或者直接用编排脚本:
# bash deploy/post-deploy.sh --dry-run
tools:
profiles: ["tools"]
image: ${TOOLS_IMAGE:-order-site/tools:latest}
build:
context: .
dockerfile: deploy/docker/tools.Dockerfile
args:
BASE_REGISTRY: ${BASE_REGISTRY:-docker.m.daocloud.io}
DEBIAN_MIRROR: ${DEBIAN_MIRROR:-mirrors.aliyun.com}
NPM_REGISTRY: ${NPM_REGISTRY:-https://registry.npmmirror.com}
restart: "no"
env_file:
- .env
depends_on:
postgres:
condition: service_healthy
environment:
TZ: ${TZ:-Asia/Shanghai}
DATABASE_URL: ${DATABASE_URL:-postgres://postgres:postgres@postgres:5432/order_site}
DATABASE_SSL: ${DATABASE_SSL:-false}
# 回填按批提交,单条语句可能比 Web 请求慢;这里比后端默认值放宽。
DATABASE_STATEMENT_TIMEOUT_MS: ${DATABASE_STATEMENT_TIMEOUT_MS:-60000}
DATA_ROOT: /app/data
logging: *json-log-rotation
web:
build:
context: .