跳转至

Bitwarden 自部署方案

最近我从 Android 换到 iOS,发现 Microsoft Authenticator 的数据居然无法同步,只能用 root 后的设备导出,再一个个导入,具体可以看 Microsoft Authenticator 安卓导出。于是,我决定改用 Bitwarden,它可以同时管理 TOTP 和密码,代替我以前使用的 Microsoft Authenticator 和 KeePassXC。

服务端我部署的是非官方的开源实现:dani-garcia/vaultwarden。它性能要求较低,并且不付费就拥有官方的所有功能。

前置准备

需要提前准备域名和云服务器,服务器上装好 Docker。云服务器最好别选大陆的,备案太麻烦。

Docker

创建 docker-compose.yml。

mkdir -p ~/vaultwarden && cd ~/vaultwarden
vim docker-compose.yml

粘贴下面的内容,域名、邮箱需要自己填写。它会部署 vaultwarden 和 nginx 反向代理,并且自动申请 SSL 证书。

官方说 vaultwarden 自带的 HTTPS 实现得不好,建议加一个反向代理实现 HTTPS。1

services:
  # 反向代理
  nginx-proxy:
    image: nginxproxy/nginx-proxy:latest
    container_name: nginx-proxy
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro
      - ./data/certs:/etc/nginx/certs:ro
      - ./data/vhost.d:/etc/nginx/vhost.d
      - ./data/html:/usr/share/nginx/html
    environment:
      DEFAULT_HOST: <域名>

  # 自动申请 SSL 证书
  letsencrypt:
    image: nginxproxy/acme-companion:latest
    container_name: nginx-letsencrypt
    restart: unless-stopped
    environment:
      NGINX_PROXY_CONTAINER: nginx-proxy
      DEFAULT_EMAIL: <邮箱>
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./data/certs:/etc/nginx/certs
      - ./data/vhost.d:/etc/nginx/vhost.d
      - ./data/html:/usr/share/nginx/html
      - ./data/acme:/etc/acme.sh

  # vaultwarden 服务
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: unless-stopped
    environment:
      DOMAIN: https://<域名>
      SIGNUPS_ALLOWED: true
      VIRTUAL_HOST: <域名>
      VIRTUAL_PORT: 80
      LETSENCRYPT_HOST: <域名>
      LETSENCRYPT_EMAIL: <邮箱>
    volumes:
      - ./data/vw:/data

然后就可以启动了!

docker compose pull
docker compose up -d

第一次申请 SSL 证书需要时间,可以查看日志。

docker compose logs -f

禁止注册

当我们把账号注册好后,可以修改 docker-compose.yml 中的 SIGNUPS_ALLOWEDfalse,禁止注册新用户,然后重启服务。

docker compose restart

参考

​​开源密码管理新选择:自建 Bitwarden(Vault)密码托管,跨平台同步 + MFA 多因素认证 - 雨月空间站