基于 Google Drive 的 Vaultwarden备份方案实战

amm10090 2025-12-11 14:29 1

Vaultwarden密码库很好用,什么都直接往里存,就怕密码库丢了,看了Backing up your vault · dani-garcia/vaultwarden Wiki · GitHub 之后用AI帮着写做了给方案,这次折腾,是为了给自己的密码库找一个稳定的方案,现在挺放心的

优点:



  • 自动化:不靠手点,不靠记忆,按时跑。

  • 异地化:本地炸了没关系,网盘还有。

  • 加密好:云盘可以被偷,但数据看不懂。

  • 可恢复:压缩包里自带「恢复说明书」,未来的自己也看得懂。


方式是用 docker-compose.yml 一把梭,理念就是:



「拿着 compose 文件 + 备份数据,在任意一台新机器上能完整复原。」



结构大致是两块:



  1. vaultwarden 容器(主服务)



  • 提供 Web / API;

  • 一些安全和性能上的小配置(禁注册、图标缓存等)。



  1. backup 容器(sidecar)



  • 和主容器共享数据卷;

  • 定时打包数据目录;

  • 用密码压缩(AES-256);

  • 调用 rclone 上传到 Google Drive;

  • 邮件通知备份结果




下面这份 docker-compose.yml 在我自己的环境里跑了一段时间,稳定性还不错(我的机子部署了很多东西经常崩)


version: '3'

services:
# === 主服务:Vaultwarden ===
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: unless-stopped
ports:
- "3012:80" # 外部访问端口
volumes:
- /vw-data:/data
environment:
# 域名与 WebSocket
DOMAIN: "https://pass.your-domain.com"
WEBSOCKET_ENABLED: "true"
IP_HEADER: "X-Real-IP"

# 邮件服务(用于登录验证、提醒等)
SMTP_HOST: "smtp.163.com"
SMTP_PORT: "465"
SMTP_SECURITY: "force_tls"
SMTP_FROM: "[email protected]"
SMTP_FROM_NAME: "Vaultwarden Security"
SMTP_USERNAME: "[email protected]"
SMTP_PASSWORD: "YOUR_SMTP_PASSWORD"

# 账户策略与安全加固
SIGNUPS_ALLOWED: "false" # 禁止陌生人注册
INVITATIONS_ALLOWED: "false" # 禁止邀请注册
SHOW_PASSWORD_HINT: "false" # 不展示密码提示
ADMIN_TOKEN: '$$argon2id$$v=19$$m=65540...' # 后台管理入口的 Token

# 图标与性能相关配置
ICON_SERVICE: "internal" # 强制使用内置图标提取服务
ICON_CACHE_TTL: "7776000" # 成功图标缓存 90 天
ICON_CACHE_NEGTTL: "259200" # 失败结果缓存 3 天
ICON_DOWNLOAD_TIMEOUT: "30"
ROCKET_WORKERS: "20" # 调整并发线程数

# === Sidecar 备份服务 ===
backup:
image: ttionya/vaultwarden-backup:latest
container_name: vaultwarden_backup
restart: unless-stopped
volumes:
- /vw-data:/bitwarden/data
- /vw-data/rclone.conf:/config/rclone/rclone.conf
environment:
DATA_DIR: "/bitwarden/data"

# 1. 定时与保留策略
CRON: "45 4 * * *" # 每天 4:45 备份
BACKUP_KEEP_DAYS: "30" # 只保留最近 30 天备份

# 2. 压缩与加密
ZIP_ENABLE: "TRUE"
ZIP_PASSWORD: "YOUR_VERY_LONG_PASSWORD"

# 3. 异地备份(rclone 事先配置好)
RCLONE_REMOTE_NAME: "gdrive"
RCLONE_REMOTE_DIR: "/VaultwardenBackup"

# 4. 邮件通知开关(基础功能)
MAIL_SMTP_ENABLE: "TRUE"
MAIL_ON_SUCCESS: "TRUE"
MAIL_ON_FAILURE: "TRUE"
SMTP_HOST: "smtp.163.com"
# 其他 SMTP_* 参数与上面主服务保持一致即可

上面的备份镜像 ttionya/vaultwarden-backupGitHub - ttionya/vaultwarden-backup: Backup vaultwarden (formerly known as bitwarden_rs) SQLite3/PostgreSQL/MySQL/MariaDB database by rclone. (Docker) 官方说明里也有详细参数,建议佬友自行再对照一遍 README,以防我这边有误差或版本变动


关于备份成功的通知我直接用的 用 curl 走 SMTP 协议发自定义内容邮件


思路大致是:



  1. 备份任务成功后,检查退出码;

  2. 如果成功,就拼出一封简单的中文文本邮件;

  3. curl smtps://smtp.163.com:465 发送出去。


在宿主机上执行一次(注意改邮箱和密码):


docker exec vaultwarden_backup sh -c 'cat <<EOF >> /app/backup.sh

# === 邮件通知脚本 ===
if [ \$? -eq 0 ]; then
printf "Subject: ✅ 备份成功: Vaultwarden\nFrom: [email protected]\nTo: [email protected]\nContent-Type: text/plain; charset=UTF-8\n\n尊敬的管理员:\n\n您的 Vaultwarden 密码库已成功备份到 Google Drive。\n\n备份信息:\n- 时间:\$(date)\n- 内容:数据库、附件、密钥文件及恢复说明 README.txt\n- 状态:✅ 上传成功\n\n建议:\n- 不定期在本地抽查解压、验证可恢复性;\n- 备份密码请妥善线下保存。\n\n此邮件为自动发送,请勿直接回复。\n" | curl -s --url "smtps://smtp.163.com:465" --ssl-reqd --user "[email protected]:PASSWORD" --mail-from "[email protected]" --mail-rcpt "[email protected]" -T -
fi
EOF'

提醒:



  • 邮箱密码建议用专用授权码,不要直接用登录密码;

  • 修改镜像内脚本属于「半定制」,升级镜像时记得重新检查这段逻辑是否还在。


给未来的自己留一份「纸质说明书」


备份只是第一步,更重要的是:未来你能不能看懂当年的自己在干嘛。


我的做法是:



  1. /vw-data/attachments/ 目录下,额外放一个 README.txt

  2. 内容写清楚下面几件事:



  • 这是哪套服务的备份(Vaultwarden);

  • 这个压缩包使用了密码,密码放在哪

  • 从零恢复的大致步骤(新服务器、安装 docker / docker-compose、还原数据卷、启动)。


一个简单的示例(可以按自己习惯改):


文件名:README.txt
位置:/vw-data/attachments/README.txt

内容建议包括:
1. 本备份用途说明
2. 压缩包密码提示
3. 恢复步骤概述(从空机器到可用 Vaultwarden)
4. 需要注意的版本信息

由于备份镜像会把 attachments 一并打包,所以这份说明会一直跟着每次备份走,相当于一个小小的「时间胶囊」。





  • 网盘不是「最后一层」

    这套方案默认相信:



云厂商可以坏,但我手上的解密密码和本地恢复能力还在。

真正关键的是密码管理和线下备份习惯。


最新回复 (10)
  • 过期绿坝粮 12-11 14:31
    1

    全文AI浓度超高(

  • didigo 12-11 14:31
    2

    我正好有密码备份的需求,感谢,我研究一下

  • 天道总司 12-11 14:32
    3

    感谢分享,不过vw就算离线了也能随时导出数据 ^-^

  • 冉多福 12-11 14:32
    4

    bitwarden android版现在不好用了。autofill 都不起作用

  • amm10090 楼主 12-11 14:32
    5

    不好意思,不太会写,又怕佬友们折腾起来麻烦,之前也是跟着ai对话搓出来的

  • amm10090 楼主 12-11 14:33
    6

    主要用的web端和iOS的感觉还可以

  • 时光机 12-11 14:37
    7

    没看懂,但认识到了佬的技术

  • Rebuild 12-11 15:11
    8

    最后突然发现压缩包密码也存数据库了

  • 芍霾🏆 12-11 16:03
    9

    这可以。

  • NgMfkS 08-30 06:44
    10

    Vaultwarden



    Vaultwarden的data目录大概多大,如果不大还有一种思路,直接部署一个smtp, 放一个不重要的邮箱,压缩好后目录直接smtp发给主邮箱,这样即使服务器被攻破恶意删除云端备份也没事。我一直不太放心rclone,如果服务器被攻破岂不是可以操纵挂载的云端数据。?

* 帖子来源Linux.do
返回