Vaultwarden 是 Bitwarden 的轻量级开源替代实现,使用 Rust 编写,资源占用极低,非常适合个人或小团队使用。
什么是 Vaultwarden
- 开源免费:完全兼容 Bitwarden 客户端
- 轻量高效:相比官方服务器降低 90% 资源占用
- 功能完整:支持组织、共享、附件等高级功能
- 自托管:数据完全掌控,无需付费订阅
Docker 部署
docker-compose.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| version: "3.9"
services: vaultwarden: image: vaultwarden/server:latest container_name: vaultwarden restart: unless-stopped environment: - WEBSOCKET_ENABLED=true - SIGNUPS_ALLOWED=false - ADMIN_TOKEN=your-secure-random-token - DOMAIN=https://vault.example.com volumes: - ${HOME}/vaultwarden:/data ports: - "127.0.0.1:8080:80" - "127.0.0.1:3012:3012"
|
启动
1 2 3 4
| docker-compose up -d
docker logs -f vaultwarden
|
生成管理员 Token
1 2
| openssl rand -base64 48
|
Nginx 反向代理
完整配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| server { listen 80; listen [::]:80; server_name vault.example.com; return 301 https://$host$request_uri; }
server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name vault.example.com;
ssl_certificate /etc/letsencrypt/live/vault.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/vault.example.com/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
client_max_body_size 128M;
location / { proxy_pass http://localhost:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; }
location /notifications/hub { proxy_pass http://localhost:3012; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; }
location /notifications/hub/negotiate { proxy_pass http://localhost:8080; } }
|
初始化配置
访问管理面板
1
| https://vault.example.com/admin
|
使用 ADMIN_TOKEN
登录。
邀请用户
在管理面板中:
- 点击 “Invite User”
- 输入邮箱地址
- 用户会收到邀请链接(需配置 SMTP)
或直接允许注册(不推荐):
1 2
| environment: - SIGNUPS_ALLOWED=true
|
客户端使用
浏览器扩展
- 安装 Bitwarden 扩展
- 点击设置 → 自托管环境
- 服务器 URL:
https://vault.example.com
- 注册或登录账号
移动 App
- 下载 Bitwarden App
- 登录时选择”自托管”
- 输入服务器地址
桌面客户端
支持 Windows、macOS、Linux。
高级配置
启用 2FA(双因素认证)
1 2 3
| environment: - YubiKey_CLIENT_ID=your-client-id - YubiKey_SECRET_KEY=your-secret-key
|
限制组织功能
1 2 3
| environment: - ORG_CREATION_USERS=none
|
日志级别
1 2 3
| environment: - LOG_LEVEL=info - EXTENDED_LOGGING=true
|
失败登录限制
1 2 3 4
| environment: - LOGIN_RATELIMIT_MAX_BURST=3 - LOGIN_RATELIMIT_SECONDS=600
|
备份和恢复
备份数据
1 2 3 4 5
| tar -czf vaultwarden-backup-$(date +%Y%m%d).tar.gz ~/vaultwarden
cp ~/vaultwarden/db.sqlite3 ~/backups/
|
自动备份脚本
1 2 3 4 5 6 7 8 9
| #!/bin/bash BACKUP_DIR=~/backups DATA_DIR=~/vaultwarden
tar -czf $BACKUP_DIR/vault-$(date +%Y%m%d-%H%M).tar.gz $DATA_DIR
find $BACKUP_DIR -name "vault-*.tar.gz" -mtime +30 -delete
|
添加到 crontab:
1 2
| 0 2 * * * /path/to/backup.sh
|
恢复数据
1 2 3 4 5 6 7 8
| docker-compose down
tar -xzf vaultwarden-backup-20240929.tar.gz -C ~/
docker-compose up -d
|
安全建议
- 强制 HTTPS:禁止 HTTP 访问
- 禁止注册:
SIGNUPS_ALLOWED=false
- 启用 2FA:所有账号开启双因素认证
- 定期备份:每日自动备份数据
- 更新镜像:定期更新 Docker 镜像
- 强密码策略:主密码至少 12 位
常见问题
WebSocket 不工作
检查 Nginx 配置的 Upgrade
和 Connection
header。
附件上传失败
增加 client_max_body_size
:
1
| client_max_body_size 128M;
|
忘记管理员 Token
重新生成并更新 docker-compose.yml
,然后重启容器。
性能优化
1 2 3 4 5 6 7
| environment: - DATABASE_MAX_CONNS=10 - ICON_CACHE_TTL=2592000 - DISABLE_ICON_DOWNLOAD=false
|
参考资料
注意事项
- HTTPS 必需:Bitwarden 客户端强制要求 HTTPS
- 定期更新镜像获取安全补丁
- 管理员面板只在需要时访问,平时关闭
- 主密码一旦忘记无法恢复,务必牢记
- 建议使用独立域名,避免与其他服务混用