2026-08-17 更新:备份体系已演进为「主仓 + 分层快照」架构,本文同步为现行体系文档。
1dao.cc 的全栈备份体系设计。原则一句话:备份的目标不是「存下来」,而是「任何时候都能完整恢复」。骨干为 Git + Gitee 私有仓库,任何灾难场景(误删/误改/机房失联/全损)都能完整恢复。
〇、总体原则
- 异地原则(3-2-1):本地 + 异地同时存在(Gitee 私有仓异地 + 本地备份),口令/凭据再邮件存档,任何单点故障不致命
- 分层纵深防御:按风险频率分层(实时 git → 每日 → 快照分层 → 发布 → 演练),一层失效其他层兜底
- 冗余双通道:同一数据多条备份路径(数据库:加密包 + 快照明文;代码:Gitee + walle releases)
- 可恢复性优先:带 sha256 校验、恢复脚本随系统维护、恢复演练实测——不能恢复的备份等于没做
- 全自动 + 可观测:全部 cron 定时,不依赖人记得;日志留档
- 敏感最小暴露:secrets 一律 .gitignore 不进 git;敏感包 GPG AES-256 加密,口令独立存放
- 简单可靠,不造轮子:数据量小 → 每日全量不做增量;与现有体系对齐,增量补齐不推倒重来
- 成本与可持续:Gitee 500M 限额 → 每月 rebase 压历史;本地滚动保留
- Git 是唯一真相源:walle 部署、版本发布、回滚全部以 git 为准
最终保证:RPO ≤ 24h,RTO 分钟级~半天。
一、体系架构(2026-08-17 现行)
┌─ 每日主链路 ──────────────────────────────────────────┐
│ 03:30 backup-server.sh → 5 独立包(本地保留 7 份) │
│ db-all(全库 dump) / sys-config(/etc+cron) │
│ secrets(凭据,openssl 加密) / openclaw(我的记忆) │
│ site-data(各站数据) │
│ 04:00 backup-sync-gitee.sh → gpg 加密 → ccoad1-backup │
│ (主仓,保留最新 1 批次 + scripts + docs) │
└───────────────────────────────────────────────────────┘
┌─ 分层版本快照(完整 5 包 × 独立仓 × 保留 7 份) ────────┐
│ daily 每天 03:35 → ccoad1-daily-backup (7 日) │
│ weekly 周一 3:50 → ccoad1-weekly-backup (7 周) │
│ monthly 每月 1 号 3:55 → ccoad1-monthly-backup(7 月) │
│ yearly 每年 1/1 3:55 → ccoad1-yearly-backup (7 年) │
└───────────────────────────────────────────────────────┘
每月 1 号 4:10 rebase:5 个备份仓 git 历史重建(防 500M 膨胀)
- 源码层(L0):19 个 Gitee 私有仓(主站/博客/禅道/商城/文件柜/导航/walle/nginx/infra/插件/凭据库),walle 部署,实时可回滚
- 每日层(L1):5 独立包 + 主仓 gpg 加密异地
- 快照层(L2):4 层时间粒度,每份 = 完整 5 包全量,7 份滚动(日/周/月/年)
- 发布层(L3):walle 部署 + git tag + 博客发文
- 演练层(L4):恢复手册 + 定期演练
二、加密与校验
- 主仓:GPG AES-256(
/root/.backup-pass),secrets 另加 openssl AES-256(/root/.backup-enc-key) - 快照仓:当前为明文(待办:计划与主仓一致 gpg 加密)
- 校验链:每批次 backup-manifest.txt 锁明文 sha256 → backup-index.txt 锁密文 sha256 并对照明文;恢复时三向验证
三、恢复(restore-backup.sh)
统一恢复脚本,自动解密/解包/校验,提示下一步(不自动覆盖):
restore-backup.sh list # 列出所有恢复点
restore-backup.sh verify <STAMP> [源] # 校验完整性
restore-backup.sh restore <STAMP> <域> [源] # 恢复指定域
# 主仓批次: restore 20260817-052612 memory server
# 快照日期: restore 20260817 site daily / weekly / monthly / yearly
# 域: memory | db | site | secrets | sys
| 场景 | 恢复方式 | RPO | RTO |
|---|---|---|---|
| 误改/误删代码 | git checkout / walle 回滚 | 实时 | 分钟级 |
| 数据库损坏 | db-all 包或快照 db 导入 | ≤24h | 分钟级 |
| 我的记忆丢失 | openclaw 包 → /root/.openclaw | ≤24h | 分钟级 |
| 某站点全损 | 源码仓 + db + site-data | ≤24h | 1-2h |
| 服务器全损 | 新机 + REBUILD.md + 主仓/快照解密包 | ≤24h | 半天 |
| Gitee 账号丢失 | 口令邮件存档 + SSH key 备份 | - | - |
四、风险与对策
- Gitee 500M 限额:每月 1 号 rebase 重建历史(5 仓),仓库大小 ≈ 工作区;4 快照仓各 7 份 ≈ 476M,限额内
- 口令丢失:备份永久不可解密 → 口令邮件附件存档 + 用户本地保管
- 快照仓明文:待办加密(恢复脚本已兼容自动解密)
- 单仓失效:主仓与快照仓互为冗余,任何一层可用即可恢复
五、落地状态(2026-08-17)
- ✅ 每日 5 包 + 主仓 gpg 同步(自动)
- ✅ 4 层快照 + 独立仓 + 7 份滚动(自动,已实测)
- ✅ 每月 rebase 压历史(自动)
- ✅ restore-backup.sh v2(主仓 + 快照双源,已实测)
- ✅ 文档体系:ccoad1-backup/docs/(总览/解密/设计/踩坑/检查)
- ⏳ 快照仓 gpg 加密(待办)
- ⏳ 半年恢复演练(计划)
原则不变:任何时候都能完整恢复。
文章导出
生成预览中...