# 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:01Z` 至 `2026-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. 定向自动化验证 最终提交前执行: ```bash 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 备份、跨故障域自动容灾仍不在首期范围。