Featured image of post VPS 自动备份方案:Restic + S3 低成本数据保护

VPS 自动备份方案:Restic + S3 低成本数据保护

告别手动备份和昂贵云服务。用 Restic 开源工具配合对象存储,构建企业级自动备份系统,月成本低至几块钱。支持增量备份、加密传输、跨服务器灾难恢复。

为什么你需要自动化备份

你运营着一台或多台 VPS,上面跑着网站、数据库、配置文件、用户数据。如果有一天磁盘损坏、服务商故障、或者误删了关键文件——你的数据怎么办?

很多 VPS 用户只依赖服务商提供的快照功能,但这远远不够:

  • 快照通常在同一机房,机房故障无法恢复
  • 快照成本高昂,保留策略受限
  • 数据仍在服务商掌控中,缺乏隐私保护
  • 无法跨服务器、跨区域复制

Restic 是一款优秀的开源备份工具,支持增量备份、端到端加密、去重压缩。配合 S3 兼容的对象存储(如 MinIO、Backblaze B2、Aliyun OSS),你可以构建一套低成本、高安全、完全自控的企业级备份系统。


核心优势对比

特性Restic + S3服务商快照商业备份服务
增量备份✅ 自动去重❌ 全量复制✅
端到端加密✅ 本地加密❌⚠️ 部分支持
跨机房容灾✅ 数据可复制到任意存储❌⚠️ 有限
月成本(100GB)约 ¥5-15¥50-200¥100-500
数据所有权完全私有服务商控制第三方控制
恢复粒度文件级精确恢复整机恢复文件/整机

架构概览

┌──────────────────────────────────────────────────────────────────┐
│                     你的 VPS(备份源)                              │
│                                                                  │
│  ┌──────────────┐    ┌──────────────┐    ┌──────────────────┐   │
│  │  应用数据目录  │    │  数据库文件   │    │  系统配置文件     │   │
│  │  /var/www/    │    │  /var/lib/   │    │  /etc/           │   │
│  │  /home/       │    │  docker/     │    │  crontab         │   │
│  └──────┬───────┘    └──────┬───────┘    └────────┬─────────┘   │
│         │                   │                     │              │
│         └───────────────────┼─────────────────────┘              │
│                             ▼                                    │
│               ┌─────────────────────────┐                        │
│               │    Restic 备份客户端      │                        │
│               │  • 增量快照 · 加密 · 去重  │                        │
│               └───────────┬─────────────┘                        │
└───────────────────────────┼──────────────────────────────────────┘
                            │ HTTPS (加密传输)
                            ▼
┌──────────────────────────────────────────────────────────────────┐
│                   S3 兼容对象存储                                  │
│                                                                  │
│  ┌─────────────────────────────────────────────────────────┐    │
│  │              备份仓库(Repository)                        │    │
│  │  • 加密块存储(AES-256-GCM)                              │    │
│  │  • 固定大小分片(4MB),天然去重                           │    │
│  │  • 任意时间点快照(Snapshot)                              │    │
│  │  • 快照保留策略(保留最近7天/30天/12个月)                   │    │
│  └─────────────────────────────────────────────────────────┘    │
│                                                                  │
│  可选:MinIO(自建) / Backblaze B2(¥0.5/GB/月)/ 阿里云OSS      │
└──────────────────────────────────────────────────────────────────┘

第一步:安装 Restic

在所有需要备份的 VPS 上安装 Restic:

# Ubuntu/Debian
curl -fsSL https://github.com/restic/restic/releases/latest/download/restic_0.17.1.deb \
  -o /tmp/restic.deb && dpkg -i /tmp/restic.deb

# 或者直接从 GitHub 下载
wget https://github.com/restic/restic/releases/latest/download/restic_0.17.1_linux_amd64.tar.gz
tar xzf restic_*.tar.gz
sudo mv restic /usr/local/bin/

restic --version  # 确认安装成功

第二步:初始化备份仓库

备份仓库存储在 S3 兼容的对象存储中。以 Backblaze B2 为例(性价比最高,¥0.5/GB/月,免费下载前1GB):

# 设置环境变量(建议写入 ~/.profile)
export RESTIC_REPOSITORY="s3:s3.backblazeb2.com/your-bucket-name"
export AWS_ACCESS_KEY_ID="your-b2-application-key-id"
export AWS_SECRET_ACCESS_KEY="your-b2-application-key-secret"
export RESTIC_PASSWORD="your-strong-backup-encryption-password"

# 初始化仓库
restic init

如果你使用自建 MinIO,只需修改 endpoint:

export RESTIC_REPOSITORY="s3:minio.your-domain.com/backup-bucket"
export AWS_ENDPOINT_URL="https://minio.your-domain.com"
export AWS_S3_FORCE_PATH_STYLE="true"

第三步:编写备份脚本

创建一个可复用的备份脚本 /usr/local/bin/restic-backup.sh:

#!/bin/bash
set -euo pipefail

# ===== 配置区 =====
RESTIC_REPOSITORY="s3:s3.backblazeb2.com/vps-backup"
AWS_ACCESS_KEY_ID="${B2_ID}"
AWS_SECRET_ACCESS_KEY="${B2_SECRET}"
RESTIC_PASSWORD="${BACKUP_PASSWORD}"
TAGS="vps-primary"

# 要备份的目录
BACKUP_SOURCES=(
    "/etc"
    "/var/www"
    "/home"
    "/opt/app-data"
)

# 排除规则(避免备份不需要的内容)
EXCLUDE_FILE="/etc/restic-exclude.txt"

# ===== 执行备份 =====
LOG_FILE="/var/log/restic-backup.log"
TIMESTAMP=$(date +%Y%m%d-%H%M%S)

echo "[$TIMESTAMP] 开始备份..." >> "$LOG_FILE"

# 执行备份,保留最近 7 天的快照
restic backup \
    --tag "$TAGS" \
    --exclude-file "$EXCLUDE_FILE" \
    "${BACKUP_SOURCES[@]}" \
    >> "$LOG_FILE" 2>&1

# 清理旧快照:保留最近 7 天每日、4 周每周、12 个月每月
restic forget \
    --keep-daily 7 \
    --keep-weekly 4 \
    --keep-monthly 12 \
    --prune

echo "[$TIMESTAMP] 备份完成,快照已清理" >> "$LOG_FILE"

创建排除规则文件 /etc/restic-exclude.txt:

/var/cache
/var/tmp
/tmp
/proc
/sys
/dev
*.log
*.tmp
swap

赋予执行权限:

chmod +x /usr/local/bin/restic-backup.sh

第四步:配置定时任务

使用 cron 实现每日自动备份:

# 编辑 crontab
crontab -e

# 每天凌晨 2:00 执行备份
0 2 * * * /usr/local/bin/restic-backup.sh

同时建议在 /etc/environment 中设置密钥变量,避免每次输入:

echo 'B2_ID=your-application-key-id' >> /etc/environment
echo 'B2_SECRET=your-application-key-secret'  >> /etc/environment
echo 'BACKUP_PASSWORD=your-encryption-password' >> /etc/environment

第五步:验证与恢复测试

定期验证备份有效性至关重要:

# 查看备份历史
restic snapshots

# 检查备份是否完整
restic check

# 列出某次快照的内容
restic ls latest

# 恢复到指定目录
restic restore latest --target /tmp/restore-test

# 恢复单个文件
restic restore latest --include="/etc/nginx/nginx.conf" --target /tmp/

进阶:多服务器统一备份

如果你有多个 VPS,推荐两种策略:

策略 A:中心备份服务器(推荐)

在一台 VPS 上运行统一的 Restic 仓库,其他服务器通过 SSH 推送备份:

# 在备份服务器上初始化仓库
restic init --repo /data/backups/main

# 在被备份服务器上,通过 SSH 推送到中心仓库
restic backup --repo ssh:backup-server:/data/backups/main /etc /var/www

这样所有服务器的数据集中存储,便于统一管理、检索和恢复。

策略 B:分级备份 + 异地冗余

主 VPS 备份到本地磁盘,同时异步复制到异地 S3:

# 本地快速备份(磁盘)
restic backup --repo /data/backups/local /var/www

# 异地冗余备份(S3,延迟异步)
restic backup --repo s3:s3.backblazeb2.com/remote-backup /var/www

成本估算

存储方案价格适用场景
Backblaze B2¥0.5/GB/月个人/小型项目,性价比最高
阿里云 OSS(标准)¥1.68/GB/月国内用户,延迟低
AWS S3 标准¥0.23/GB/月(首年)已有 AWS 生态
自建 MinIO(本地硬盘)仅硬盘成本完全自控,无额外费用

典型场景: 备份 200GB 数据,使用 Backblaze B2,月成本约 ¥100。而同等容量的云服务商快照可能收费 ¥500+。


安全检查清单

  • 备份密码使用强随机字符串(建议 32 位以上)
  • 定期执行 restic check 验证完整性
  • 每季度进行一次恢复演练
  • 备份密钥不要硬编码在脚本中,使用环境变量或密钥管理服务
  • 启用异地冗余(至少两份备份)
  • 设置快照保留策略,防止无限增长

总结

Restic + S3 对象存储的组合,为 VPS 用户提供了一套低成本、高安全、完全自控的备份方案。相比商业备份服务和云快照,它在数据加密、跨机房容灾、成本控制方面具有显著优势。

从安装到首次备份完成,整个过程不超过 15 分钟。现在就为你的 VPS 配置自动备份,让数据安全问题不再成为隐患。

📺 看视频版教程 → DuckDB Lab YouTube

Subscribe for more DuckDB & AI automation tutorials