• amm10090

    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-backup`GitHub - 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` 一并打包,所以这份说明会一直跟着每次备份走,相当于一个小小的「时间胶囊」。


    - 网盘不是「最后一层」。

    这套方案默认相信:

    云厂商可以坏,但我手上的解密密码和本地恢复能力还在。
    真正关键的是密码管理和线下备份习惯。

    主楼
  • 过期绿坝粮

    全文AI浓度超高(

    #1
  • didigo

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

    #2
  • 天道总司

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

    #3
  • 冉多福

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

    #4
  • amm10090

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

    #5
  • amm10090

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

    #6
  • 时光机

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

    #7
  • Rebuild

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

    #8
  • 芍霾🏆

    这可以。

    #9
  • NgMfkS

    Vaultwarden

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

    #10

发表回复

登录后回复