背景痛点
在虚拟化运维中,我们经常遇到这样的场景:反复修改 PVE(Proxmox Virtual Environment)虚拟机配置后,最终发现原始版本才是最优解。这种版本回滚需求在 IT 运维领域尤为常见,而 Git 的版本控制能力正是解决此类问题的利器。
恰好,我本地就自建有一套 Gitea
系统。而 Gitea
的 actions
工作流也支持自动化操作。于是就有了这个实现:
实施步骤
1. 新建一个私有仓库
2. 添加密钥
2.1. 生成密钥
ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
Enter file in which to save the key (/root/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_ed25519
Your public key has been saved in /root/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:m81g2xpf471OwNbgCk3zR3Nj+nt5tMyJbXO32QGgJlM root@7530b3501b86
The key's randomart image is:
+--[ED25519 256]--+
| |
| |
| Eo.. oo.|
| .o.=.+oo.|
| oSo. *oo |
| .+X o oo .|
| = = o *++|
| + o = XX|
| . . ..==O|
+----[SHA256]-----+
将 /root/.ssh/id_ed25519.pub
文件内容复制到 PVE 服务器 /root/.ssh/authorized_keys
文件的后面
2.2. 在仓库 -> 设置 -> Actions -> 密钥 页面,添加密钥。
RSYNC_HOST
: pve 主机的IP地址RSYNC_SSH_KEY
: 上面生成的 /root/.ssh/id_ed25519
文件的内容
3. 在仓库中新增工作流文件
文件名:.gitea/workflows/rsync.yaml
文件内容:
name: PVE VM Config Backup
on:
schedule:
- cron: 30 20 * * * # 每日 UTC 20:30 自动执行
push:
branches:
- main
workflow_dispatch: # 支持手动触发
jobs:
Rsync:
runs-on: ubuntu-latest
steps:
- name: Check out repository code
uses: actions/checkout@v4
- name: 从远程同步文件
uses: up9cloud/action-rsync@master
env:
MODE: pull
HOST: ${{secrets.RSYNC_HOST}}
KEY: ${{secrets.RSYNC_SSH_KEY}}
SOURCE: /etc/pve/*
TARGET: ./
VERBOSE: true
POST_SCRIPT: |
rm ./nodes/QVM/lrm_status ./authkey.* ./*/authkey.*
- name: 自动提交
uses: stefanzweifel/git-auto-commit-action@v5
with:
commit_user_name: actions[bot]
commit_user_email: backup-bot@yourdomain.com
commit_author: bot <backup-bot@yourdomain.com>
方案优势
- 版本追溯:精确到秒的修改记录
- 双重保险:每日自动备份 + 即时手动触发
- 安全过滤:自动排除认证密钥等敏感临时文件
- 审计追踪:完整的 Git 提交记录满足合规要求
评论0
暂时没有评论