使用 Restic 和 rclone 将 Vaultwarden 数据备份到 Google Drive

Posted by Loscoy on 2025-06-07
Estimated Reading Time 6 Minutes
Words 1.7k In Total
Viewed Times

Vaultwarden 是一个轻量级的密码管理器,我最近开始用它来管理我的密码和敏感数据。为了确保数据安全,我决定定期将 Vaultwarden 的数据备份到 Google Drive,并使用 Restic 进行增量备份,结合 rclone 连接云存储。这篇博客将分享我的完整备份流程,从配置到自动化,再到数据恢复,全部基于我的实际操作经验。希望能帮到你!

前提条件

在开始之前,确保你已经准备好以下内容:

  • Vaultwarden:运行正常,数据目录位于 ~/Vaultwarden/vw-data
  • 系统:我用的是 Ubuntu(Linux 系统),但流程对其他 Linux 发行版也适用。
  • 工具:需要安装 Restic 和 rclone,稍后我会介绍安装步骤。
  • Google Drive:一个有足够存储空间的账户。
  • 基本工具bash 用于写脚本,cron 用于定时任务。

步骤 1:安装和配置 rclone

rclone 是一个强大的工具,可以让我们轻松连接 Google Drive 作为备份存储后端。

1.1 安装 rclone

在 Ubuntu 上,安装 rclone 非常简单:

1
2
sudo apt update
sudo apt install rclone

如果你的系统不是 Ubuntu,可以从 rclone 官网 下载适合的版本。

1.2 配置 Google Drive

运行以下命令开始配置 rclone:

1
rclone config

按照提示操作:

  • 选择 n 创建一个新的远程存储。
  • 输入一个名称,比如 gdrive
  • 选择存储类型为 drive(Google Drive)。
  • Client ID 和 Client Secret:我直接留空,使用默认值。
  • Scope:选择 drive(完整访问权限)。
  • Root Folder ID:留空,使用整个 Google Drive。
  • 授权时,rclone 会给出一个 URL,复制到浏览器,登录 Google 账户,授权后获取代码,粘贴回终端。

配置完成后,测试一下:

1
rclone lsd gdrive:

如果能看到 Google Drive 里的目录,说明配置成功!

1.3 创建备份专用文件夹

为了保持整洁,我在 Google Drive 上创建了一个专门的备份文件夹:

1
rclone mkdir gdrive:VaultwardenBackups

步骤 2:安装和配置 Restic

Restic 是一个高效的增量备份工具,支持加密,完美适合我们的需求。

2.1 安装 Restic

在 Ubuntu 上安装 Restic:

1
2
sudo apt update
sudo apt install restic

或者从 Restic 官网 下载最新版本。

2.2 初始化 Restic 仓库

我们将 Restic 的备份仓库存储在 Google Drive 上,使用 rclone 作为后端。首先设置环境变量:

1
2
export RESTIC_REPOSITORY="rclone:gdrive:VaultwardenBackups/restic"
export RESTIC_PASSWORD="your-secure-password"

注意:将 your-secure-password 替换为一个强密码,记下来并妥善保存!然后初始化仓库:

1
restic init

这会在 gdrive:VaultwardenBackups/restic 下创建一个 Restic 仓库。可以用以下命令验证:

1
restic snapshots

刚初始化时不会有快照,但命令应该运行无误。

步骤 3:备份 Vaultwarden 数据

Vaultwarden 的数据目录 ~/Vaultwarden/vw-data 包含以下内容:

1
attachments  db.sqlite3  db.db.sqlite3-shm  db.sqlite3-wal  icon_cache  rsa_key.pem  sends  tmp

其中,db.sqlite3-shmdb.sqlite3-wal 是 SQLite 的临时文件,备份时可以忽略。tmp 目录也不需要备份。关键备份内容包括:

  • db.sqlite3(主数据库)
  • attachments(用户附件)
  • icon_cache(图标缓存,可选)
  • rsa_key.pem(加密密钥,超级重要!)
  • sends(发送功能数据)

3.1 首次备份

运行以下命令进行首次备份:

1
restic backup ~/Vaultwarden/vw-data --exclude "*.sqlite3-shm" --exclude "*.sqlite3-wal" --exclude "tmp"

这会备份指定目录,排除临时文件。首次备份会上传所有数据,后续备份只上传变化部分,节省时间和空间。

3.2 验证备份

检查备份是否成功:

1
restic snapshots

你应该能看到一个新的快照,显示备份时间和路径。

3.3 设置保留策略

为了避免备份占满 Google Drive,我设置了保留策略:保留最近 7 天的每日备份、4 周的每周备份和 6 个月的每月备份:

1
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune

--prune 会清理不再需要的旧数据,释放空间。

步骤 4:自动化备份

手动备份太麻烦,我们可以用脚本和 cron 实现自动化。

4.1 创建备份脚本

我创建了一个脚本 ~/backup-vaultwarden.sh

1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/bash
export RESTIC_REPOSITORY="rclone:gdrive:VaultwardenBackups/restic"
export RESTIC_PASSWORD="your-secure-password"

# 备份
restic backup ~/Vaultwarden/vw-data --exclude "*.sqlite3-shm" --exclude "*.sqlite3-wal" --exclude "tmp"

# 清理旧备份
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune

# 检查备份完整性
restic check

保存后,赋予执行权限:

1
chmod +x ~/backup-vaultwarden.sh

4.2 设置定时任务

使用 cron 每天凌晨 2 点自动运行备份:

1
crontab -e

添加以下行:

1
0 2 * * * /bin/bash ~/backup-vaultwarden.sh >> ~/backup-vaultwarden.log 2>&1

这会将备份日志输出到 ~/backup-vaultwarden.log

4.3 测试脚本

手动运行脚本,确认一切正常:

1
/bin/bash ~/backup-vaultwarden.sh

步骤 5:恢复数据

如果需要恢复数据,步骤也很简单。

5.1 列出快照

查看所有可用快照:

1
restic snapshots

记下需要恢复的快照 ID。

5.2 恢复数据

将备份恢复到指定目录,比如 ~/Vaultwarden/restore

1
restic restore <snapshot-id> --target ~/Vaultwarden/restore

替换 <snapshot-id> 为实际的快照 ID。

5.3 验证和应用

检查恢复的文件:

1
ls ~/Vaultwarden/restore/vw-data

然后停止 Vaultwarden 服务,复制恢复的数据:

1
2
3
4
cd ~/Vaultwarden
docker-compose down
cp -r ~/Vaultwarden/restore/vw-data/* ~/Vaultwarden/vw-data/
docker-compose up -d

步骤 6:安全性和最佳实践

6.1 保护密码

我将 Restic 密码存到单独的文件中:

1
2
echo "export RESTIC_PASSWORD=your-secure-password" > ~/.restic-env
chmod 600 ~/.restic-env

在脚本中加载:

1
source ~/.restic-env

6.2 监控备份

定期检查 ~/backup-vaultwarden.log,确保备份正常。你也可以用 ntfy 发送备份结果通知。

6.3 检查备份完整性

每月运行一次完整性检查:

1
restic check

6.4 注意 Google Drive 限制

Google Drive 有文件数量限制(约 40 万个文件),定期运行 restic forget --prune 可以减少文件数量。

6.5 确保数据安全

Restic 默认加密所有备份数据,即使 Google Drive 被攻破,数据依然安全。特别注意保存好 rsa_key.pem,否则数据可能无法解密!

常见问题

  1. rclone 授权失效
    重新运行 rclone config 更新令牌。
  2. 备份速度慢
    检查网络连接或 Google Drive 存储限制。
  3. 数据库文件不一致
    备份前暂停 Vaultwarden(docker-compose down)。
  4. Restic 仓库锁定
    运行 restic unlock 解锁。

总结

通过 Restic 和 rclone,我成功实现了 Vaultwarden 数据的自动增量备份到 Google Drive,整个过程简单、安全又高效。希望这篇博客能帮你顺利备份你的 Vaultwarden 数据!如果你有任何问题,欢迎留言讨论。

参考资料


如果您喜欢此博客或发现它对您有用,则欢迎对此发表评论。 也欢迎您共享此博客,以便更多人可以参与。 如果博客中使用的图像侵犯了您的版权,请与作者联系以将其删除。 谢谢 !