使用 Cloudflare R2 对 VaultWarden 进行备份和恢复

使用 Cloudflare R2 对 VaultWarden 进行备份和恢复
Mus前置条件
有 Cloudflare 账号,并且能够创建 R2 存储桶。如果达不到这个硬性条件那下面的步骤就不用看了。
介绍
vaultwarden-backup 是一个 vaultwarden 的备份工具,它依赖 Rclone 驱动,通过把要备份的文件上传到 Rclone 中配置的远程地址,以实现备份的目的。
本文默认 vaultwarden 是使用 Docker 进行部署的,且下面步骤中全部使用 Docker 进行讲解。
Cloudflare R2 创建令牌
关于 R2 令牌的创建,网上教程很多,这里就不演示了。
令牌名称随意,这里权限一定要给管理员读写,因为 vaultwarden-backup 备份需要!
然后点击创建令牌,这里一定要把下面我打码的地方对应的值找个地方存起来,因为这只会显示一次!

上图对应信息下面会用到,这里先提前打个预防针。
配置 Rclone
由于 vaultwarden-backup 的备份是依赖 Rclone 的,所以我们需要配置一下 Rclone。
可通过下面的命令直接配置 Rclone。
1 | docker run --rm -it \ |
运行后应该能看到类似下面的输出。
1 | No remotes found, make a new one\? |
这里输入 n 后回车,意为新建远程文件。
然后随便起一个名称,这里我就叫做 test-remote 了。

Storage 选 s3。

提供商选 Cloudflare。

这一步默认即可,因为我们下面会配置 Cloudflare R2 的令牌。

下面两个填写的值就用创建令牌时的值,对应位置请看之前提到的那张图。

地区就写 auto。

endpoint 就用创建令牌时的值,对应位置请看之前提到的那张图。

Edit advanced config 处默认回车即可。然后应该能看到下图。

这里由于我没有写 access_key_id 这类信息,所以我这里是没有的,但是你那里应该有。
下面输入 y 保存此次配置。
最后可在 Current remotes 下查看刚才配置的 remote。这里我有两个是因为,我之前已经配置过了。

最后输入 q 退出配置。
配置的 remote 存储的位置
还记得那个命令吗?
1 | docker run --rm -it \ |
这里其实把配置的数据放到名为 vaultwarden-rclone-data 的 volume 中了。
下面部署 vaultwarden-backup 会用到这个 volume。
部署 vaultwarden-backup
如果你有一个正在运行的 vaultwarden,请确保你的 vaultwarden 容器被命名为 vaultwarden,否则你需要自行替换 docker run 的 --volumes-from 部分。
默认情况下 vaultwarden 的数据文件夹是 /data,你需要显式使用环境变量 DATA_DIR 指定数据文件夹。
1 | docker run -d \ |
RCLONE_REMOTE_NAME 指定刚刚创建的 remote。
RCLONE_REMOTE_DIR 指定存储桶
TIMEZONE 指定时区。
ZIP_TYPE 打包方式,默认 zip,这里指定 7z。
ZIP_PASSWORD 解压密码。
更多配置请参考官方文档:vaultwarden-backup/README_zh。
RCLONE_REMOTE_DIR
如果你没有提前创建存储桶,而是直接填写。那么它会自动的去创建。这里需要注意 Cloudflare R2 的命名规范。

等待片刻后应该就能在 R2 中看到了。

备份数据
上面部署好后,应该就完事了,你可以手动触发一次备份,然后在 Cloudflare 对应的桶中应该能看到备份的压缩包。
手动触发备份命令:
1 | docker exec vaultwarden_backup bash /app/backup.sh |
使用默认设置启动容器(每小时的 05 分自动备份)。
运行成功命令效果图。

从 backup file 中恢复
从 Cloudflare R2 中下载备份的文件,然后把它上传到宿主机任意路径下。
使用我提前写好的脚本:
1 |
|
授予可执行权限后,参考脚本的说明运行即可。
授予可执行权限命令 chmod +x restore.sh。
详细说明
你的 vaultwarden 容器一般来讲是有挂载目录的,挂载的是宿主机的某个目录和容器内的 /data 目录。
那么脚本中的 VAULTWARDEN_PATH 就是你宿主机上挂载的那个目录的绝对路径。
备份脚本
1 |
|
这里的 vaultwarden_backup 就是容器名,换成你的就行。
WebHook 通知
对于 Docker,这里推荐可视化面板 DPanel,这样设置容器的参数好弄点。
WebHook 配置以钉钉通知为例。
主要就这么几个参数:

思路就是你写哪个请求地址和对应的 _CURL_OPTIONS 变量,那么对应时机就会触发你写的地址。
钉钉机器人的请求地址我这里就不贴了,你写上你的就行。
这里主要讲一下 _CURL_OPTIONS 怎么写。参考:
1 | -X POST -H "Content-Type: application/json" -d "{\"msgtype\":\"markdown\",\"markdown\":{\"title\":\"自动备份更新通知\",\"text\":\"🚀 %{subject} \n 📂 %{content}\"}}" |
我这里的 title 为 自动备份更新通知,那么钉钉机器人那里对应的关键词也就设置这个应该就能够触发到了。



