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 | sudo apt update |
如果你的系统不是 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 | sudo apt update |
或者从 Restic 官网 下载最新版本。
2.2 初始化 Restic 仓库
我们将 Restic 的备份仓库存储在 Google Drive 上,使用 rclone 作为后端。首先设置环境变量:
1 | export RESTIC_REPOSITORY="rclone:gdrive:VaultwardenBackups/restic" |
注意:将 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-shm 和 db.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 |
|
保存后,赋予执行权限:
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 | cd ~/Vaultwarden |
步骤 6:安全性和最佳实践
6.1 保护密码
我将 Restic 密码存到单独的文件中:
1 | echo "export RESTIC_PASSWORD=your-secure-password" > ~/.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,否则数据可能无法解密!
常见问题
- rclone 授权失效:
重新运行rclone config更新令牌。 - 备份速度慢:
检查网络连接或 Google Drive 存储限制。 - 数据库文件不一致:
备份前暂停 Vaultwarden(docker-compose down)。 - Restic 仓库锁定:
运行restic unlock解锁。
总结
通过 Restic 和 rclone,我成功实现了 Vaultwarden 数据的自动增量备份到 Google Drive,整个过程简单、安全又高效。希望这篇博客能帮你顺利备份你的 Vaultwarden 数据!如果你有任何问题,欢迎留言讨论。
参考资料:
如果您喜欢此博客或发现它对您有用,则欢迎对此发表评论。 也欢迎您共享此博客,以便更多人可以参与。 如果博客中使用的图像侵犯了您的版权,请与作者联系以将其删除。 谢谢 !