OffshoreVps
安全2026年10月8日阅读约 8 分钟作者:OffshoreVps 团队

如何用 restic 备份 VPS:自动化且加密

3-2-1 原则、备份哪些内容、加密的 restic 设置、cron 脚本,以及为什么必须测试恢复。仅靠服务商快照是不够的。

VPS 可能出故障、被误删,或被糟糕的更新搞坏。唯一的保护是经过测试的备份。本指南使用免费工具设置简单、自动化、加密的备份。

VPS 上的终端窗口,显示备份 VPS 所用的命令,以“sudo apt install -y restic”开头
本指南中你将在服务器上运行的那类命令。

3-2-1 原则

保留数据的 3 份副本,存放在 2 种不同类型的存储上,其中 1 份副本放在完全不同的地方。对于 VPS,这通常意味着在线数据、一份本地快照,以及存放在另一服务商或另一个国家的异地副本。

备份哪些内容

  • 网站文件和上传内容(/var/www)。
  • 数据库,先转储为文件(切勿复制正在运行的数据库文件)。
  • 配置:/etc/nginx、/etc 的更改、Docker Compose 文件和卷。
  • Cron 任务和任何自定义脚本。

操作系统几分钟就能重装。无法重装的是你的数据和设置。

使用 restic 进行加密、去重的备份

sudo apt install -y restic
export RESTIC_REPOSITORY=sftp:backup@other-server:/backups/vps1
export RESTIC_PASSWORD_FILE=/root/.restic-pass
restic init

用一个很长的随机字符串创建密码文件,并将副本存放在安全的地方。如果你丢失了这个密码,备份就无法打开。restic 还支持兼容 S3 的存储,因此你可以推送到任何对象存储。

本指南的步骤依次为:1. 3-2-1 原则;2. 备份哪些内容;3. 用 restic 做加密、去重的备份;4. 备份脚本;5. 测试恢复;6. 快照有帮助,但并不足够
本指南的步骤,按顺序排列。

备份脚本

#!/bin/bash
set -e
export RESTIC_REPOSITORY=sftp:backup@other-server:/backups/vps1
export RESTIC_PASSWORD_FILE=/root/.restic-pass

mysqldump --single-transaction --all-databases | gzip > /var/backups/db.sql.gz
restic backup /var/www /etc /var/backups/db.sql.gz
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune

将其保存为 /usr/local/bin/backup.sh,设为可执行并安排计划任务:

sudo chmod +x /usr/local/bin/backup.sh
echo "30 3 * * * root /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1" | sudo tee /etc/cron.d/backup

测试恢复

restic snapshots
restic restore latest --target /tmp/restore-test --include /etc/nginx

从未恢复过的备份只是一种希望。每季度测试一次,并且在改动任何东西之后都要测试。

快照有帮助,但并不足够

服务商快照速度快,在有风险的更改之前很方便,但它们与同一服务商和账户绑定。把它们当作便利手段,并另外保留一份独立的异地副本。