文件
hyb-oa/.trellis/tasks/07-27-automatic-offhost-backup/implement.md
T
wangsli 9875bc37a4
ci-e2e / e2e (push) Waiting to run
ci-minimal / check-minimal (push) Waiting to run
修复自动备份真实挂载解析(07-27-automatic-offhost-backup)
2026-07-27 11:19:13 +08:00

5.7 KiB
原始文件 Blame 文件历史

每日自动异机备份实施计划

实施步骤

  • 实现宿主自动备份 wrapper:安全绝对路径、唯一 Compose 来源、活动 mount/build 校验、flock、成对备份、ARM 推送/finalize、成功状态和源端 7 日保留。
  • 实现 ARM 受限 receiver:只允许 rrsync 写 inbox 和 finalize,严格校验三文件 manifest/大小/哈希、原子归档、7 日 + 4 周保留和最后成功保护。
  • 实现生产与 ARM 安装器:专用账号/密钥/known_hosts 边界、systemd daily/watchdog/quarterly units、安装/卸载幂等和默认不触发真实任务。
  • 泛化现有企微运维告警的 stdin summary、issueId 和备份建议,使用独立状态文件并补单元测试。
  • 增加合成契约测试:来源漂移、锁冲突、不完整/损坏/重复批次、续传 partial、拒绝普通 shell、保留轮转、stale 和季度降噪。
  • 更新部署环境契约、runbook、checklist、管理员手册的最小操作入口和 .trellis/spec/hyb-oa/deployment-trialrun.md;不新增平行长文档。
  • 生成一页脱敏恢复卡内容,优先放在现有 runbook 的首部紧急段;由用户复制到公司知识库并安排第二人走查。
  • 完成本地全量门禁并提交;生产、ARM 安装另行请求批准。
  • 获批后先安装 ARM 接收端并用合成批次验证,再安装生产 units,手工运行首次真实自动批次,最后 enable timers。
  • 获批执行一次可控传输失败告警并恢复正常链路;不读取附件正文、不执行业务或企微其他写入。

预计文件边界

  • 新增 scripts/run-automatic-backup.sh:生产 host 编排与 safe summary。
  • 新增 scripts/receive-offhost-backup.sh:ARM forced-command receiver、finalize 和 retention。
  • 新增 deploy/trialrun/install-automatic-backup-timer.sh:生产 units 安装/卸载。
  • 新增 deploy/trialrun/install-offhost-backup-receiver.sh:ARM rsync/账号/目录/公钥安装检查;软件安装和账号创建只在获批远端阶段执行。
  • 新增 scripts/qa/run-automatic-backup-contract.sh:纯合成正负向测试。
  • 修改 server/src/scripts/send-wecom-ops-alert.js 及其单测,仅做通用脱敏 summary 兼容。
  • 修改 deploy/trialrun/validate-env-contract.js、现有 runbook/checklist/管理员手册和部署规约。

验证命令

  • bash -n scripts/run-automatic-backup.sh scripts/receive-offhost-backup.sh deploy/trialrun/install-automatic-backup-timer.sh deploy/trialrun/install-offhost-backup-receiver.sh scripts/qa/run-automatic-backup-contract.sh
  • bash scripts/qa/run-automatic-backup-contract.sh
  • bash scripts/qa/run-backup-restore-drill.sh
  • cd server && node --check src/scripts/send-wecom-ops-alert.js
  • cd server && npm test -- --run tests/unit/scripts/send-wecom-ops-alert.test.js
  • node deploy/trialrun/validate-env-contract.js
  • python3 ./.trellis/scripts/task.py validate .trellis/tasks/07-27-automatic-offhost-backup
  • node scripts/qa/check-trellis-governance.mjs
  • node scripts/qa/check-sensitive-content.mjs
  • node scripts/qa/audit-docs.mjs --check-registry
  • node scripts/qa/check-process-contract.mjs --baseline --json
  • git diff --check

外部门禁与回滚点

  • 安装 ARM rsync/账号/authorized_keys/目录属于远端配置写入,须单独批准;不得复用普通登录账号或本地工作站私钥。
  • 安装生产 SSH key/config/systemd units、首次真实备份、真实异机传输和企微失败告警均须单独批准。
  • 首次真实执行前记录现有手工批次数量、磁盘余量、活动容器/mount/build 和现有 timer;只输出脱敏计数/布尔值。
  • 任何目标身份、主机指纹、活动 mount、manifest 或哈希不匹配立即停止,不猜路径、不接受新指纹、不清理源端批次。
  • 回滚新 timer/receiver 时只撤销调度和专用授权;ARM archive、源端完整批次和原 WARCH3 timer 保留。

本地实施与验证证据

  • 已实现生产 wrapper、ARM forced receiver、两端安装器和 3 组 systemd timer;安装器默认只安装 disabled units。
  • run-automatic-backup-contract.sh 使用临时目录与 mock Docker/SSH/rsync 完成 28 项正负向合同,不连接真实主机。
  • 企微告警聚焦单测 15 项通过;stdin 路径被替换为安全类别,AUTO_BACKUP 首次失败/季度提醒发送且相同重复状态降噪。
  • run-backup-restore-drill.sh 本地合成 DB/附件往返通过,本次合成 RTO 为 8 秒;该结果不是生产 RTO 或 ARM 恢复证据。
  • scripts/check-minimal.sh 通过:server 162 个测试文件、1004 项测试全部通过,client typecheck/build 通过。
  • 环境合同、Trellis task/governance、敏感扫描、文档注册、流程合同和 git diff --check 均通过;文档注册保留既有 22 个未注册文件 warning,无本任务新增文档。
  • ARM 安装、生产 units、真实首批、timer enable、真实企微失败告警和第二人季度走查仍为外部门禁,未执行、不得写成已完成。

首次远端执行增量

  • ARM 已安装 rsync、密码锁定专用账号和 forced-command receiver;从生产验证普通 shell、sender/read、delete 均拒绝,写通道 dry-run 通过且未生成归档。
  • 生产三组 units 已安装为 disabled/inactive,并绑定活动 Compose project、PGDATA、附件挂载、构建标识和固定 SSH 身份。
  • 首次真实备份在 runtime_identity 阶段 fail-closed,未生成源端或 ARM 批次;真实 Docker println 输出的参数间空格导致制表符拆分后路径不精确相等。
  • runner 已改为解析 docker inspect mount JSON 并要求唯一匹配;合成 mock 同步改为真实 JSON 形状。重新执行真实首批和 timer enable 尚待验证。