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_ALLOWED 为 false,禁止注册新用户,然后重启服务。
docker compose restart
参考¶
开源密码管理新选择:自建 Bitwarden(Vault)密码托管,跨平台同步 + MFA 多因素认证 - 雨月空间站