开源的密码管理器 - Bitwarden

Bitwarden 是一款开源的,支持 自部署 的跨平台密码管理器,官方的服务需要付费使用,如果你有一台 NAS,那么就可以自己部署一个 Bitwarden,可以免费使用还支持多账户,分享给家人和朋友一起使用也没问题。

自部署的好处是密码数据都加密存储在本地,数据泄露的风险会小很多。但使用自己部署 Bitwarden 一定要注意:做好数据备份并且知道如何从故障中恢复,因为 Bitwarden 里的数据几乎是你最重要的数据了。如果你保存了上百条的密码数据,有一天硬盘挂了,而你又没有任何备份,那手动找回上百个密码的画面想想都觉得酸爽!

为了保证传输安全,Bitwarden 不能通过 HTTP 直接访问,需要添加 HTTPS 证书。

前置条件

  1. 服务器已安装 DockerDocker Compose
  2. 拥有一个域名(如 vault.exempt.com),并已解析到服务器 IP。
  3. 服务器已开放 80/443 端口,并配置了 SSL 证书(如 Let’s Encrypt)。

部署 Bitwarden(Vaultwarden)

步骤 1:创建 Docker Compose 文件

创建目录并编写 docker-compose.yml

mkdir ~/bitwarden && cd ~/bitwarden
nano docker-compose.yml

内容如下(按需修改):

version: '3'

services:
vaultwarden:
image: vaultwarden/server:latest
container_name: bitwarden
restart: always
ports:
- "8080:80" # HTTP 服务端口(Nginx 代理使用)
- "3012:3012" # WebSocket 端口(必需)
volumes:
- ./data:/data # 持久化数据目录
environment:
- DOMAIN=https://vault.exempt.com # 必须使用 HTTPS 域名-使用自己的域名
- ADMIN_TOKEN=your_secure_token_here # 生成命令:openssl rand -base64 48
- SIGNUPS_ALLOWED=false # 生产环境禁用注册
# - SMTP_HOST=smtp.example.com # 邮件服务配置(可选)
# - SMTP_FROM=admin@example.com

步骤 2:启动服务

dockeer-compose.yml文件目录下

docker-compose up -d

配置NGINX代理

在 Nginx 配置文件中(如 /etc/nginx/conf.d/bitwarden.conf)添加以下内容:

# Bitwarden 密码管理服务(vault.mycloudhub.top)
server {
listen 443 ssl http2;
server_name vault.exempt.com;
include conf.d/ssl.conf; # 复用你的统一 SSL 配置(没有这个文件需配置SSL文件)

# 普通 HTTP 请求代理
location / {
proxy_pass http://localhost:8080; # 对应 Docker 的 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;

# 安全增强头(与其他服务对齐)
add_header X-Content-Type-Options "nosniff";
add_header X-Frame-Options "DENY";
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
}

# WebSocket 代理(实时通知必需)
location /notifications/hub {
proxy_pass http://localhost:3012; # WebSocket 端口
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;

# WebSocket 保活配置
proxy_read_timeout 7d;
proxy_send_timeout 7d;
}
}

步骤 2:更新 HTTP 跳转配置

在现有的 server { listen 80; ... } 块中,添加新域名到 server_name

server {
listen 80;
server_name ... vault.exempt.com; # 添加到已有域名列表中
return 301 https://$host$request_uri;
}

步骤 3:验证并重载 Nginx

sudo nginx -t          # 检查配置语法
sudo nginx -s reload # 重载配置

验证服务

  1. 浏览器访问
    • 打开 https://vault.exempt.com,应显示 Bitwarden 登录界面。
    • 访问 https://vault.exempt.com/admin,输入 ADMIN_TOKEN 进入管理后台。
  2. 客户端连接
    • 在 Bitwarden 客户端(App/浏览器插件)中设置服务器地址为 https://vault.exempt.com

维护与更新

停止服务

cd ~/bitwarden
docker-compose down

更新镜像

docker-compose pull
docker-compose up -d

备份数据

# 备份 data 目录
tar -czvf bitwarden-backup-$(date +%F).tar.gz ~/bitwarden/data

注意事项

  1. 强制 HTTPS
    • 确保 DOMAIN 环境变量包含 https:// 前缀,否则客户端无法同步。
  2. 禁用注册
    • 生产环境务必设置 SIGNUPS_ALLOWED=false,并通过管理后台邀请用户。
  3. 邮件服务
    • 如需邮件功能(密码重置、邀请),需正确配置 SMTP_* 环境变量。
  4. 防火墙规则
    • 只需开放 Nginx 的 443 端口,Docker 的 8080/3012 端口无需公网暴露。