WP13_DEPLOYMENT_BACKUP_RECOVERY_EVIDENCE.md 4.7 KB

WP13 部署、备份与恢复定向验证证据

1. 验证结论

WP13 已达到本地工程完成:发布副本统一、Compose 离线打包、升级前检查、一致性 备份、受保护恢复和候选项目回滚链均已实现;本地独立项目恢复演练成功。该结论不等于 企业生产验收,真实断网主机、企业密钥与备份介质、RPO/RTO 和生产变更审批仍是外部 门禁。

2. 实现范围

  • app/database/migrations/ 为唯一源码,deployment/ 由同步脚本生成, 合同测试按相对路径和 SHA-256 检查字节一致性。
  • backend、runner、frontend 使用稳定离线镜像标签;12 个默认发布端口和网络名称 支持环境覆盖,恢复演练无需修改 Compose 主文件。
  • 离线包按“文件验签 → 镜像载入 → Compose 解析 → 镜像检查 → --no-build 启动 → 健康检查 → Alembic current/head”执行。
  • 备份先生成 PostgreSQL 逻辑导出,再在明确维护窗口内停止项目,按 Compose 标签 冷快照全部已创建卷,退出保护负责重启源项目。
  • 恢复必须精确确认新项目名;校验失败、目标已存在或与源项目同名时在写入前拒绝。
  • 回滚使用明确的上一版离线包和升级前备份恢复候选项目,不调用数据库 downgrade。

3. 离线包证据

最终提交基线包:

项目 结果
文件 dist/dataops-platform-offline-3f49a51.tar.gz(Git 忽略,本地证据)
压缩后体积 4.2G
默认 profile 镜像 11 个
压缩包 SHA-256 7677072cc57f221501046fdbb843b37f9186533c0b58014511f37657b5e8cc76
解压后全文件校验 通过
source commit 3f49a517a6bcb5982b993ea970a184818dd9277a
source worktree clean

升级前检查结果:

  • Compose 配置可解析;
  • 11 个默认镜像均存在;
  • 源项目数据库 current=head=20260730_360
  • 源项目检查通过。

4. 备份证据

项目 结果
本地临时目录 /tmp/dataops-wp13-backup-20260730(不进入 Git)
体积 41M
卷归档 10 个;未启用的 LightRAG shadow 卷未创建,因此不产生空归档
PostgreSQL postgres-all.sql 逻辑导出 + PostgreSQL 数据卷冷快照
迁移版本 20260730_360
manifest SHA-256 13f43fb993959d7a8c450df85d4bf3547c5d1431d25c4b007e96d72f814eec41
全部 payload 校验 通过
源项目重启 10 个默认运行/一次性服务均满足健康或成功退出条件

备份起止时间为 UTC 2026-07-29T18:27:01Z2026-07-29T18:27:55Z,本地维护窗口约 54 秒。该数值只代表当前样本规模,不能 作为企业 RTO 承诺。

5. 隔离恢复演练

恢复目标为 dataops-wp13-restore,使用 deployment/compose/.env.rehearsal.example 的独立端口和 dataops-wp13-restore-net 网络。源项目和目标项目卷名交集为 0。

校验项 源项目 恢复项目 结果
PostgreSQL public 表 116 116 一致
governance_audit_seals 2 2 一致
device_assets 4 4 一致
Neo4j 节点 3 3 一致
MinIO bucket 存在 存在 一致
MinIO 对象 1 1 一致
Alembic current/head 20260730_360 20260730_360 一致
backend 200 200 通过
frontend 200 200 通过
n8n health 200 200 通过

演练后仅删除带 dataops-wp13-restore 项目标签的 12 个临时容器、10 个临时卷和 独立网络;复核目标容器/卷均为 0,原 dataops-test 再次通过 Compose、镜像和 Alembic 升级前检查。

6. 定向自动化验证

最终提交前执行:

PYTHONPATH=. .venv/bin/pytest -q \
  tests/test_wp13_delivery_contract.py \
  tests/runner/test_compose_contract.py \
  tests/mcp/test_deployment_contract.py \
  tests/test_database_migrations.py
bash -n deployment/compose/*.sh
docker compose -f deploy/docker/docker-compose.yml config --quiet

本工作包不执行全量回归;验证范围仅覆盖发布副本、Compose 合同、数据库迁移合同和 WP13 新增脚本。

7. 企业验收门禁

  • 在与生产相同 CPU 架构的真实断网干净主机安装最终签名包;
  • 建立镜像签名、SBOM、漏洞扫描和补丁基线;
  • 使用企业密钥系统提供配置,另行加密备份配置及密钥,不写入普通备份或日志;
  • 把备份复制到独立故障域,确认保留、加密、访问审计和销毁策略;
  • 以企业数据规模确认维护窗口、RPO、RTO、磁盘预算和定期演练频率;
  • 完成生产变更审批、切流、失败回退和旧环境下线授权;
  • Kubernetes/HA、在线 Neo4j 备份、跨故障域自动容灾仍不在首期范围。