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 支持(实时同步)
- WEBSOCKET_ENABLED=true
# 禁止新用户注册
- SIGNUPS_ALLOWED=false
# 管理员 Token(访问 /admin)
- ADMIN_TOKEN=your-secure-random-token
# 域名(用于邮件链接)
- DOMAIN=https://vault.example.com
# SMTP 邮件配置(可选)
# - SMTP_HOST=smtp.gmail.com
# - [email protected]
# - SMTP_PORT=587
# - SMTP_SECURITY=starttls
# - [email protected]
# - SMTP_PASSWORD=your-password
volumes:
- ${HOME}/vaultwarden:/data
ports:
- "127.0.0.1:8080:80" # Web UI
- "127.0.0.1:3012:3012" # WebSocket

启动

1
2
3
4
docker-compose up -d

# 查看日志
docker logs -f vaultwarden

生成管理员 Token

1
2
# 生成随机 Token
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 证书
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;

# 允许大附件上传(最大 128MB)
client_max_body_size 128M;

# Web UI
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;
}

# WebSocket(实时同步)
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;
}

# WebSocket 协商
location /notifications/hub/negotiate {
proxy_pass http://localhost:8080;
}
}

初始化配置

访问管理面板

1
https://vault.example.com/admin

使用 ADMIN_TOKEN 登录。

邀请用户

在管理面板中:

  1. 点击 “Invite User”
  2. 输入邮箱地址
  3. 用户会收到邀请链接(需配置 SMTP)

或直接允许注册(不推荐):

1
2
environment:
- SIGNUPS_ALLOWED=true

客户端使用

浏览器扩展

  1. 安装 Bitwarden 扩展
  2. 点击设置 → 自托管环境
  3. 服务器 URL:https://vault.example.com
  4. 注册或登录账号

移动 App

  1. 下载 Bitwarden App
  2. 登录时选择”自托管”
  3. 输入服务器地址

桌面客户端

支持 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 # trace, debug, info, warn, error
- EXTENDED_LOGGING=true

失败登录限制

1
2
3
4
environment:
# 10 分钟内最多 3 次失败
- 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

# 保留最近 30 天备份
find $BACKUP_DIR -name "vault-*.tar.gz" -mtime +30 -delete

添加到 crontab:

1
2
# 每天凌晨 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

安全建议

  1. 强制 HTTPS:禁止 HTTP 访问
  2. 禁止注册SIGNUPS_ALLOWED=false
  3. 启用 2FA:所有账号开启双因素认证
  4. 定期备份:每日自动备份数据
  5. 更新镜像:定期更新 Docker 镜像
  6. 强密码策略:主密码至少 12 位

常见问题

WebSocket 不工作

检查 Nginx 配置的 UpgradeConnection 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
  • 定期更新镜像获取安全补丁
  • 管理员面板只在需要时访问,平时关闭
  • 主密码一旦忘记无法恢复,务必牢记
  • 建议使用独立域名,避免与其他服务混用