sections.operations
备份与恢复
每夜执行的保留期清理任务、`scripts/backup/` 下的备份脚本,以及针对 Mongo、Postgres 和 MinIO 的完整恢复流程。
备份与恢复
Skrum 是一体化的 AI 项目控制平台——团队聊天、任务与冲刺、原生视频会议、以及入站代码活动,全部集中在一个工作空间中,每一项 AI 操作都会等待人工确认后才会执行。
备份由运营方负责。Skrum 提供脚本和保留期任务;你需要提供计划、异地目标、监控和恢复演练。
恢复目标与计划
- **建议频率:**每晚一个完整备份集,并每季度进行一次恢复演练。若不能接受一天的数据损失,应每六小时或更频繁地执行。
- **RPO:**不超过两个成功备份集之间的间隔加上中断任务的持续时间。只有每次任务都被监控且成功时,每夜备份才可实现 24 小时目标。
- **RTO:**使用接近生产规模的数据进行计时恢复。四小时可作为初始运营目标,但实测结果才是依据。
- **保留:**初始策略可保留 7 个每日、4 个每周和 12 个每月完整集,并至少保存一份在应用主机和主对象存储之外。
对漏跑、非零退出或缺少 MANIFEST.txt 发出告警。在新备份及其校验文件完整之前,不要删除最后一个已知可用集。
创建备份
./scripts/backup/backup-all.sh
脚本仅在进程中缺少变量时,从仓库根目录 .env 读取备份相关值。显式变量(包括空值)优先;文件不会通过 source 或 eval 执行,任何密钥都不会输出。
必须提供 MONGODB_URI、DATABASE_URL、S3_ENDPOINT、S3_ACCESS_KEY、S3_SECRET_KEY 和 S3_BUCKET。BACKUP_TARGET=local 写入 BACKUP_DIR;BACKUP_TARGET=s3 上传到 BACKUP_S3_PREFIX。Mongo、Postgres 与对象存储按顺序采集;如需安静且一致的恢复点,请暂时停止入站写入和 worker。
保留期清理
每天运行的 retention-sweep BullMQ 任务,会在删除之前,将符合清理条件的消息、任务评论和工作图谱事件无损归档到冷存储的 archive/{accountId}/{kind}/{sha256}.ndjson.gz 路径下。各档位的保留天数遵循 historyDays(30 / 90 / 365 / 无限)。无限档位不会执行任何清理操作。
恢复预期
恢复具有破坏性:Mongo 使用 --drop,Postgres 使用 --clean --if-exists,对象镜像会删除多余对象。请安排维护窗口、停止 API/worker 写入并确认目标。
./scripts/backup/restore-all.sh <BACKUP_SET_DIR_OR_S3_URI>
命令会在修改数据前验证完整清单和所有归档哈希,然后恢复 Mongo、Postgres 和 MinIO。重新开放写入前:
- 启动 API 与 worker,并等待所有健康检查通过。
- 验证登录、工作空间/项目/任务/消息读取以及一个已知文件的下载。
- 检查队列深度、迁移状态和近期审计事件。
- 记录开始/结束时间、恢复集和冒烟测试结果,用于更新实测 RTO。
常见问题
- 托管版呢? 在托管版方案中,备份由我们负责。
- 可以自行调整保留期窗口吗? 可以——每个账户的
retention_policies只能向下收紧。 - 应用保留策略能替代灾难恢复备份吗? 不能,完整备份集的生命周期是独立的运营策略。
另请参阅: Skrum 文档