自建 Bitwarden 服务器不推荐使用官方版本,占用较大,推荐使用 Vaultwarden 版本(原 Bitwarden_RS),它是用 Rust 编写的 Bitwarden 服务器非官方实现,极其轻量,完美适配 Docker,且解锁了官方版需要付费才能使用的功能(如 TOTP 二步验证、附件上传等)。

更重要的是,只有服务的自建是不完整的,没有备份的自建是危险的。本文将通过 docker-compose 一键部署 Vaultwarden,并挂载自动化备份容器,将密码库加密打包上传到云端。

准备工作

  • 一台安装了 Docker 和 Docker Compose 的服务器(VPS 或 NAS)。

  • 一个域名(用于配置 HTTPS,Bitwarden 强制要求 HTTPS)。

部署步骤

配置 Rclone

通过下面的命令创建 Rclone 配置卷,根据实际配置存储端。建议将远程名称设置为 BitwardenBackup,否则你需要指定环境变量 RCLONE_REMOTE_NAME 为你设置的远程名称。

docker run --rm -it \
  --mount type=volume,source=vaultwarden-rclone-data,target=/config/ \
  ttionya/vaultwarden-backup:latest \
  rclone config

编写 docker-compose.yml

在你的项目目录下创建 docker-compose.yml 文件,填入以下内容:

services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: always
    environment:
      # 替换为你自己的域名
      DOMAIN: "https://password.abc.com"
    volumes:
      - ./data/:/data/
    ports:
      - 10080:80
      
  backup:
    image: ttionya/vaultwarden-backup:latest
    restart: always
    environment:
      RCLONE_REMOTE_NAME: 'BitwardenBackup'
      # 远程存储的具体路径
      RCLONE_REMOTE_DIR: '/BitwardenBackup/'
      # 定时任务:每天凌晨 0 点执行
      CRON: '0 0 * * *'
      # 开启压缩
      ZIP_ENABLE: 'TRUE'
      # 压缩包加密密码
      ZIP_PASSWORD: '123456'
      # 压缩格式
      ZIP_TYPE: 'zip'
      # 备份文件名后缀,例如:backup-20231027.zip
      BACKUP_FILE_SUFFIX: '%Y%m%d'
      # 本地保留备份天数
      BACKUP_KEEP_DAYS: 7
      # 时区设置
      TIMEZONE: 'Asia/Shanghai'
    volumes:
      - ./data:/bitwarden/data/
      - vaultwarden-rclone-data:/config/
      
volumes:
  vaultwarden-rclone-data:
    external: true
    name: vaultwarden-rclone-data

启动服务

在目录下执行:

docker compose up -d

启动后,访问 http://IP:10080 即可看到界面。Bitwarden 必须要 HTTPS 才能使用,需要配合 Nginx Proxy Manager 或 Caddy 进行反向代理并申请 SSL 证书。