Administrator
发布于 2026-02-15 / 4 阅读
0
0

自建Git服务器实现一键重装恢复

自建Git服务器实现一键重装恢复

最近花了点时间把Mac上的工作环境整理了一下,核心是搭建了一套Git服务器方案,目标是:系统重装后10分钟内完全恢复所有工作配置

背景

平时在Mac mini上跑OpenClaw和一些技能脚本,配置文件、记忆文件、技能代码散落在各处。之前用本地备份脚本,但不够优雅。现在改用Git集中管理,配合Git服务器的匿名访问功能,实现真正的一键恢复。

架构

服务器: Debian虚拟机 (10.10.10.230) 客户端: Mac mini (SSH密钥认证) 备份策略: Git + Git Daemon匿名只读

仓库设计

设计了4个仓库,各司其职:

仓库 用途 访问方式
openclaw-memory 记忆文件、AGENTS.md、MEMORY.md SSH读写
openclaw-skills 技能代码(不含node_modules) SSH读写
openclaw-dotfiles .zshrc、Brewfile、SSH公钥 SSH读写
openclaw-recovery 恢复脚本、私钥、文档 Git匿名只读

关键点在于recovery仓库:它包含SSH私钥和恢复脚本,通过Git Daemon提供匿名只读访问。这意味着重装系统后,无需任何认证就能获取私钥,然后自动配置SSH,再拉取其他仓库。

服务器配置

1. 创建Git用户和仓库

useradd -m -d /home/git -s /bin/bash git
mkdir -p /srv/git
cd /srv/git

git init --bare openclaw-memory.git
git init --bare openclaw-skills.git
git init --bare openclaw-dotfiles.git
git init --bare openclaw-recovery.git

chown -R git:git /srv/git

2. 配置SSH密钥认证

# Mac上生成密钥
ssh-keygen -t rsa -b 4096 -C "openclaw@macmini"

# 公钥添加到服务器
cat ~/.ssh/id_rsa.pub >> /home/git/.ssh/authorized_keys

3. 启用Git Daemon匿名访问

apt install -y git-daemon-run

cat > /etc/systemd/system/git-daemon.service << 'EOF'
[Unit]
Description=Git Daemon
After=network.target

[Service]
Type=simple
ExecStart=/usr/lib/git-core/git-daemon --reuseaddr --base-path=/srv/git --export-all --verbose
Restart=always
User=git

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable git-daemon
systemctl start git-daemon

Git Daemon在9418端口提供匿名只读访问,地址格式:git://10.10.10.230/仓库名

一键恢复脚本

恢复脚本的核心逻辑:

#!/bin/bash
# 1. 匿名获取恢复文件和私钥
git clone git://10.10.10.230/openclaw-recovery.git /tmp/recovery
cd /tmp/recovery

# 2. 部署私钥
mkdir -p ~/.ssh
chmod 700 ~/.ssh
cp id_rsa ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa

# 3. 配置SSH跳过host key检查(内网安全)
cat > ~/.ssh/config << 'EOF'
Host 10.10.10.230
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null
    User git
    Port 22
    IdentityFile ~/.ssh/id_rsa
EOF

# 4. 安装Homebrew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# 5. 安装Git、Node
brew install git node

# 6. 克隆所有仓库
git clone git@10.10.10.230:/srv/git/openclaw-dotfiles.git /tmp/dotfiles
git clone git@10.10.10.230:/srv/git/openclaw-memory.git ~/.openclaw/workspace
git clone git@10.10.10.230:/srv/git/openclaw-skills.git ~/.openclaw/workspace/skills

# 7. 恢复配置
cp /tmp/dotfiles/.zshrc ~/
cp /tmp/dotfiles/*.pub ~/.ssh/
cd /tmp/dotfiles && brew bundle install

# 8. 安装OpenClaw
npm install -g openclaw

echo "恢复完成!"

实际使用时只需两行命令:

git clone git://10.10.10.230/openclaw-recovery.git /tmp/recovery
bash /tmp/recovery/restore.sh

全程无需手动输入,约10分钟完成。

日常备份

日常开发中,变更立即推送:

# 一键备份所有
git clone git://10.10.10.230/openclaw-recovery.git /tmp/r 2>/dev/null
cd /tmp/r && ./backup-all.sh

# 或手动分别备份
cd ~/.openclaw/workspace && git add -A && git commit -m "backup" && git push
cd ~/.openclaw/workspace/skills && git add -A && git commit -m "backup" && git push

安全考量

这套方案基于内网环境,做了以下权衡:

  1. SSH私钥存储在Git仓库中:通过Git Daemon只读暴露,重装时能自动获取
  2. 跳过SSH host key检查:内网环境,简化配置
  3. node_modules不备份:体积大,恢复后重新安装

如果是公网环境,建议:

  • 私钥改用密码管理器(如1Password)保管
  • 使用HTTPS + Token方式认证
  • 启用Git的签名验证

总结

这套方案实现了真正的"一键重装恢复":

  • 10分钟:从裸机到完全可用
  • 0干预:全自动执行,无需手动输入
  • 版本化:所有配置都有Git历史记录

对于经常折腾系统的开发者来说,这是一套实用的备份策略。

仓库地址

# 匿名只读(恢复用)
git://10.10.10.230/openclaw-recovery.git

# SSH读写(日常使用)
git@10.10.10.230:/srv/git/openclaw-memory.git
git@10.10.10.230:/srv/git/openclaw-skills.git
git@10.10.10.230:/srv/git/openclaw-dotfiles.git
git@10.10.10.230:/srv/git/openclaw-recovery.git

评论