主题模式
Are you an LLM? You can read better optimized documentation at /notes/github-actions-backup.md for this page in Markdown format
使用 GitHub Actions 自动备份 VPS 数据
对于个人开发者来说,VPS 里往往存放着博客数据库、配置文件甚至是一些珍贵的私人笔记。如果因为误操作或服务商故障导致数据丢失,后果不堪设想。
利用 GitHub Actions,我们可以实现“零成本”的自动化异地备份。
1. 核心思路
- 打包数据:在 VPS 上将需要备份的文件压缩成
.tar.gz。 - 安全传输:通过
scp或rclone将压缩包发送到 GitHub Runner(或利用 Action 触发 VPS 拉取)。 - 版本管理:利用 Git 记录每次备份的历史,或者上传到对象存储(如 S3)。
注:为了安全起见,我们通常采用“VPS 主动推送”或“Action 远程拉取”的方式。本文介绍一种基于 SSH 的远程拉取方案。
2. 配置 SSH 密钥
为了让 GitHub Actions 能登录你的 VPS,你需要配置免密登录:
- 在本地生成一对密钥(不要覆盖你现有的):bash
ssh-keygen -t ed25519 -f github_actions_key - 将公钥 (
github_actions_key.pub) 添加到 VPS 的~/.ssh/authorized_keys中。 - 将私钥内容作为 Secret 存入 GitHub 仓库:
Settings -> Secrets and variables -> Actions -> New repository secret,命名为SSH_PRIVATE_KEY。
3. 编写 Workflow 脚本
在你的仓库中创建 .github/workflows/backup.yml:
yaml
name: VPS Data Backup
on:
schedule:
- cron: '0 2 * * *' # 每天凌晨 2 点执行
workflow_dispatch: # 允许手动触发
jobs:
backup:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup SSH
run: |
mkdir -p ~/.ssh
echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_ed25519
chmod 600 ~/.ssh/id_ed25519
ssh-keyscan -H ${{ secrets.VPS_HOST }} >> ~/.ssh/known_hosts
- name: Pull Backup from VPS
run: |
scp -r user@${{ secrets.VPS_HOST }}:/path/to/your/data ./backups/
- name: Upload to Release (Optional)
uses: softprops/action-gh-release@v1
with:
files: ./backups/*.tar.gz
tag_name: backup-${{ github.run_number }}4. 进阶建议
- 加密备份:在 VPS 上使用
gpg对压缩包进行加密后再传输,确保即使仓库泄露,数据依然安全。 - 清理旧备份:定期删除 GitHub Release 中的旧文件,避免占用过多空间。
- 多端同步:除了 GitHub,还可以结合 Rclone 将数据同步到 OneDrive 或 Google Drive。
结语
自动化备份是运维的“后悔药”。花半小时配置好 GitHub Actions,换来的是一份长久的安心。
下一步探索:
- 想要更强大的路由器备份?看看 OpenWrt 配置导出。
- 想要监控 VPS 状态?试试 Uptime Kuma。