文件
hyb-oa/docs/trialrun/deployment-preflight-2026-05-10.md
T

8.8 KiB
原始文件 Blame 文件历史

R4 部署预检记录(2026-05-10)

文档状态:R4 预检、D3 同步与 D4 只读复检证据。 执行范围:issues/2026-05-10_12-39-37-release-readiness-live-smoke.csv 的 R4,以及 issues/2026-05-10_13-20-38-deployment-version-sync-governance.csv 的 D1-D5。 当前结论:DONE。D3 已用既有部署脚本同步 release candidate,D4 只读复检通过;R5 因缺真实公网账号和 OCR 样票仍保持 TODO/SKIP。

1. 初始 R4 边界

  • 初始 R4 只读预检未部署。
  • 初始 R4 未修改远端 .env。
  • 初始 R4 未执行 migration、seed、备份创建、服务重启或生产数据写入。
  • 本轮未读取、打印、提交真实密码、JWT secret、企业微信 secret、腾讯 OCR secret 或数据库连接串明文。
  • 企业微信真机、公网真实账号登录和真实 OCR 样票验证仍属于 R5;本轮只停留在 readiness 检查。

2. 版本口径

项目 结果
部署准备最新提交 2bab4e5 R3 完成权限直连审计
业务运行时代码基线 537e608 A8 完成首轮主线总回归门禁
537e608..2bab4e5 差异 仅包含测试、文档和 Issue CSV;不包含业务运行时代码变更
远端目录 /opt/hyb-oa-trialrun 存在
远端版本来源 远端不是 git 工作树,无法用 git rev-parse 直接确认版本

初始关键运行时文件哈希抽查结果:

文件 结论
server/src/services/workspaceSettings.js BLOCKED:远端与 537e608/2bab4e5 不一致
client/src/components/navigation/NavLinks.tsx BLOCKED:远端与 537e608/2bab4e5 不一致
server/src/routes/workflow.js BLOCKED:远端与 537e608/2bab4e5 不一致
server/src/routes/reimbursements.js 一致
server/src/routes/invoicePool.js 一致
server/src/routes/wecomAuth.js 一致
server/src/routes/leave.js 一致
server/src/routes/purchaseRequests.js 一致
server/src/routes/contractsRegistry.js 一致
server/src/routes/projects.js 一致

初始判定:远端当时可运行,但不能宣称已经是本轮 release candidate。由于不一致文件覆盖审批中心和权限导航护栏,按 R4 规则停止在预检阶段,并拆分部署版本同步治理 Issue。

3. 本地只读检查

检查项 结果
git status --short R4 开始前干净
git log --oneline -5 最新提交为 2bab4e5,其后为 60adbcf、537e608、a18d477、d6ee25f
node deploy/trialrun/validate-env-contract.js PASS;检查服务 server/worker/init,config.js env 键数 121,.env.example env 键数 135
node scripts/qa/check-live-smoke-env.mjs public /ready 为 200;企业微信 config 为 ready;liveSmokeReady=false;liveOcrReady=false
live smoke 缺项 缺 LIVE_SMOKE_ADMIN_IDENTIFIER/PASSWORD、LIVE_SMOKE_EMPLOYEE_IDENTIFIER/PASSWORD、OCR live 登录或样票环境变量
node scripts/qa/check-public-bundle-copy.mjs https://oa.hyinda.com scanned=54,focused=4,findings=0
Issue CSV 校验 通过
公网 /ready 200,data.ok=true
公网企业微信 config 200;响应字段不包含 secret;enabled/entryEnabled/oauthEnabled=true

4. 远端只读检查

检查项 结果
SSH 用户 [email protected] 可连接
服务器 VM-0-13-debian
部署目录 /opt/hyb-oa-trialrun 存在
git 工作树 no;当前部署方式仍按 rsync 文件树判断
compose 文件 deploy/trialrun/docker-compose.yml 存在
env 文件 deploy/trialrun/.env 存在
compose 工具 docker-compose 1.29.2
容器状态 hyb-oa-trialrun-server Up;hyb-oa-trialrun-db Up 且 healthy
远端本机 /ready http://127.0.0.1:3000/ready 返回 200
Prisma migrate status 46 migrations found;Database schema is up to date!
备份目录 deploy/trialrun/backups 存在
最近备份 2026-05-06 有 DB dump 和 storage tar;2026-05-05 有 DB dump、storage tar 和 feature flags CSV
文件存储目录 deploy/trialrun/data/storage 存在
最近 server 日志摘要 抽样只看到 /ready 和企业微信 config 探活请求;未见迁移 drift 或服务启动失败摘要

远端环境变量只做存在性、布尔值和非空长度检查,未打印 secret 明文:

范围 结果
基础域名与安全 APP_ORIGIN=https://oa.hyinda.com,COOKIE_SECURE=true,PUBLIC_SECURITY_HARDENING_ENABLED=true
运行与存储 OCR_PROVIDER=tencent,STORAGE_DRIVER=local,JOB_DRIVER=pgboss,SERVE_CLIENT_DIST=true
企业微信 WECOM_ENABLED/WECOM_ENTRY_ENABLED/WECOM_OAUTH_ENABLED=true;WECOM_CORP_ID/WECOM_AGENT_ID/WECOM_AGENT_SECRET 非空
OCR TENCENT_SECRET_ID/TENCENT_SECRET_KEY/TENCENT_OCR_REGION 非空
核心 secret JWT_SECRET/POSTGRES_PASSWORD/DATABASE_URL/FIELD_ENCRYPTION_KEY 非空

5. Caddy 只读检查

检查项 结果
SSH 用户 [email protected] 可连接
Caddy systemd active 且 enabled
Caddy 配置校验 Valid configuration
OA 站点块 /etc/caddy/Caddyfile 包含 oa.hyinda.com
反代目标 /etc/caddy/Caddyfile 包含 reverse_proxy 127.0.0.1:3000
443 监听 caddy 正在监听 *:443

6. 初始 R4 判定

初始 R4 未通过,保持 DOING/TODO/TODO,原因是远端运行时代码与本轮 release candidate 不一致,且远端不是 git 工作树,无法用提交号直接证明当前运行版本。

不一致不应在 R4 内通过远端手工修补解决。建议下一步先审批并执行部署版本同步治理:

  • 确认同步目标仍为 2bab4e5,运行时代码基线仍为 537e608。
  • 部署前复核备份和回滚路径。
  • 使用既有 deploy/trialrun/deploy.sh 或批准后的等效流程同步远端文件树、构建并执行部署脚本内置 smoke。
  • 部署后重新执行 R4 只读预检;通过后才进入 R5 live smoke。

7. 初始 SKIP 与禁止项

  • SKIP:真实公网账号登录,原因是缺 LIVE_SMOKE_*。
  • SKIP:真实 OCR 样票,原因是缺 OCR live 文件或目录环境变量。
  • SKIP:企业微信手机真机,原因是 R5 才执行。
  • 初始 R4 内禁止继续部署、重启、迁移、修改 .env 或写生产数据。

8. D1-D2 后续复核(2026-05-10)

执行合同:issues/2026-05-10_13-20-38-deployment-version-sync-governance.csv。

项目 结果
D1 版本差异复核 DONE:537e608..2bab4e5 仍仅包含测试、文档和 Issue CSV,不包含业务运行时代码变更
D1 远端哈希复核 与 R4 一致:workspaceSettings.js、NavLinks.tsx、workflow.js 未对齐,其余抽查运行时文件一致
D1 结论 同步目标仍固定为 2bab4e5;业务运行时代码基线仍为 537e608;不采用远端手工补丁
D2 备份目录 远端 deploy/trialrun/backups 存在
D2 最近备份 2026-05-10 13:43 已创建 hyb-oa-db-20260510_134340.dump(2691566 bytes)和 hyb-oa-storage-20260510_134341.tar.gz(2610057 bytes)
D2 回滚路径 runbook 已包含 DB/storage 备份、恢复、仅代码回滚和 DB 回滚步骤
D2 结论 DONE:部署前新近备份已创建;当时 D3 仍需用户单独批准,后续执行结果见第 9 节

D3 受控同步 release candidate 后续已执行,结果见第 9 节。R5 live smoke 仍保持 TODO/SKIP。

9. D3-D5 发布同步与复检(2026-05-10)

执行合同:issues/2026-05-10_13-20-38-deployment-version-sync-governance.csv。

项目 结果
D3 部署同步 DONE:执行 bash deploy/trialrun/deploy.sh 成功
环境同步 SYNC_ENV=0,未覆盖远端 .env
部署脚本门禁 env contract、rsync、容器重建、init、Prisma migrate status、/ready、external deps smoke、runtime smoke、公网 bundle 文案扫描均完成
远端关键文件哈希 workspaceSettings.js、NavLinks.tsx、workflow.js 及其他抽查运行时文件已与本地一致
远端服务 hyb-oa-trialrun-server 与 hyb-oa-trialrun-db 运行中,DB healthy,本机 /ready 返回 200
Prisma migration 46 migrations found;Database schema is up to date!
Caddy active/enabled,配置有效,oa.hyinda.com 反代到 127.0.0.1:3000,443 监听正常
企业微信 config 公网接口 200,enabled/entryEnabled/oauthEnabled=true,响应不包含 secret
公网资源扫描 node scripts/qa/check-public-bundle-copy.mjs https://oa.hyinda.com:scanned=54,focused=4,findings=0
R5 readiness liveSmokeReady=false、liveOcrReady=false;缺 LIVE_SMOKE_* 与 OCR live 文件或目录

R4 已可回填 DONE/DONE/DONE。R5 真实公网账号、企业微信真机和真实 OCR 样票验证仍未执行,不能宣称通过。