Vaultwarden密码库很好用,什么都直接往里存,就怕密码库丢了,看了Backing up your vault · dani-garcia/vaultwarden Wiki · GitHub 之后用AI帮着写做了给方案,这次折腾,是为了给自己的密码库找一个稳定的方案,现在挺放心的
优点:
- 自动化:不靠手点,不靠记忆,按时跑。
- 异地化:本地炸了没关系,网盘还有。
- 加密好:云盘可以被偷,但数据看不懂。
- 可恢复:压缩包里自带「恢复说明书」,未来的自己也看得懂。
方式是用 docker-compose.yml 一把梭,理念就是:
「拿着 compose 文件 + 备份数据,在任意一台新机器上能完整复原。」
结构大致是两块:
- vaultwarden 容器(主服务)
- 提供 Web / API;
- 一些安全和性能上的小配置(禁注册、图标缓存等)。
- 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 协议发自定义内容邮件
思路大致是:
- 备份任务成功后,检查退出码;
- 如果成功,就拼出一封简单的中文文本邮件;
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'
提醒:
- 邮箱密码建议用专用授权码,不要直接用登录密码;
- 修改镜像内脚本属于「半定制」,升级镜像时记得重新检查这段逻辑是否还在。
给未来的自己留一份「纸质说明书」
备份只是第一步,更重要的是:未来你能不能看懂当年的自己在干嘛。
我的做法是:
- 在
/vw-data/attachments/目录下,额外放一个README.txt。 - 内容写清楚下面几件事:
- 这是哪套服务的备份(Vaultwarden);
- 这个压缩包使用了密码,密码放在哪
- 从零恢复的大致步骤(新服务器、安装 docker / docker-compose、还原数据卷、启动)。
一个简单的示例(可以按自己习惯改):
文件名:README.txt
位置:/vw-data/attachments/README.txt
内容建议包括:
1. 本备份用途说明
2. 压缩包密码提示
3. 恢复步骤概述(从空机器到可用 Vaultwarden)
4. 需要注意的版本信息
由于备份镜像会把 attachments 一并打包,所以这份说明会一直跟着每次备份走,相当于一个小小的「时间胶囊」。
- 网盘不是「最后一层」。
这套方案默认相信:
云厂商可以坏,但我手上的解密密码和本地恢复能力还在。
真正关键的是密码管理和线下备份习惯。