OpenClaw 新备份系统:一键部署与零依赖恢复
最近重构了 OpenClaw 的备份体系,从原来的多仓库分散管理改为单仓标签轮转架构,实现更简洁的部署和更可靠的重装恢复。
设计思路
旧方案的问题是:
- 多个 Git 仓库(memory/dotfiles/skills/recovery)分散管理
- 恢复时需要逐个克隆
- 配置复杂,容易出错
新方案的核心是单仓 + 标签轮转:
一个仓库:openclaw-backup.git
四个标签:current → backup-1 → backup-2 → backup-3
每次备份时自动轮转,保留最近3个历史版本。
架构特点
1. 极简命令
backup now # 立即备份
backup list # 查看历史
backup restore 1 # 恢复到指定版本
backup auto # 启动自动监听
backup stop # 停止监听
2. 自动监听
文件变更后5秒自动触发备份,无需手动干预。使用 Node.js + fswatch 实现跨平台兼容。
3. 零依赖恢复
重装系统后只需一行命令:
curl git://10.10.10.230/openclaw-backup.git/restore.sh | bash
无需预装 Git、SSH密钥,甚至不需要手动配置任何东西。
技术实现
标签轮转逻辑
新备份前: current backup-1 backup-2 backup-3
↓ ↓ ↓ ↓
新备份后: 新内容 原current 原b-1 原b-2
(原b-3被删除)
Git 标签是轻量级的,不会复制文件内容,只是指针移动,效率很高。
Git Daemon 匿名访问
git daemon --reuseaddr --base-path=/srv/git/ /srv/git/
协议:git://(端口9418),无需认证即可克隆。适合恢复场景。
常驻进程管理
备份服务作为后台进程运行,PID 文件管理:
# 启动
nohup node auto-save-silent.mjs &
# 停止
kill $(cat ~/.openclaw/logs/auto-save.pid)
部署流程
首次部署(Git 服务器):
# 1. 创建裸仓库
ssh git@10.10.10.230 'mkdir -p /srv/git/openclaw-backup.git && cd /srv/git/openclaw-backup.git && git init --bare'
# 2. 初始化本地备份
backup now
# 3. 配置开机自启
bash scripts/auto-save-service.sh start
重装恢复:
curl git://10.10.10.230/openclaw-backup.git/restore.sh | bash
全程约10分钟,自动完成:
- 安装 Homebrew/Git/Node
- 恢复 SSH 密钥
- 克隆 workspace(含技能+记忆+脚本)
- 安装 OpenClaw
- 启动备份服务
对比旧方案
| 特性 | 旧方案 | 新方案 |
|---|---|---|
| 仓库数量 | 4个 | 1个 |
| 恢复命令 | 多行 | 1行 |
| 预装依赖 | Git/SSH | 无 |
| 历史版本 | 无 | 3个 |
| 自动备份 | 需配置 | 内置 |
适用场景
这套系统适合:
- 个人工作站备份
- 开发环境同步
- 配置即代码(Dotfiles)
- 需要快速重装恢复的场景
不适合:
- 大型项目代码管理(用 Git 原生工作流)
- 需要审计日志的企业环境
- 多人协作频繁的场景
后续优化
- 支持备份到云端(S3/阿里云OSS)
- Web 界面查看历史版本
- 增量备份(目前是全量)
- 备份加密
备份这件事,越简单越容易坚持。新系统用了两周,确实比原来省心多了。