Vaultwarden 是 Bitwarden 服务端的轻量级开源实现,兼容所有 Bitwarden 官方客户端(浏览器插件、桌面端、移动端),让你把密码数据完全掌握在自己手里。由于密码数据极为敏感,HTTPS 是运行 Vaultwarden 的硬性要求。

本文要点

  • Docker 一键部署 Vaultwarden
  • 为什么 HTTPS 是必须的
  • Nginx 反代 + SSL 配置
  • 客户端连接自建服务器
  • 数据备份策略

为什么 HTTPS 是必须的

Vaultwarden 存储的是你的所有密码,若使用 HTTP 明文传输,密码在网络中完全暴露。此外,Bitwarden 客户端本身要求服务端使用 HTTPS,否则客户端拒绝连接。

没有 SSL 禁止公网暴露

在配置好 SSL 之前,不要将 Vaultwarden 暴露到公网。先在本地测试,确认反代和证书正常后再开放访问。

部署 Vaultwarden

使用 Docker 运行,数据持久化到本地目录:

mkdir -p /opt/vaultwarden/data

docker run -d \
  --name vaultwarden \
  -e DOMAIN="https://vault.yourdomain.com" \
  -e SIGNUPS_ALLOWED=true \
  -e ADMIN_TOKEN=$(openssl rand -base64 48) \
  -v /opt/vaultwarden/data:/data \
  -p 8180:80 \
  --restart unless-stopped \
  vaultwarden/server:latest

或使用 docker-compose.yml 管理(推荐,便于修改环境变量):

# /opt/vaultwarden/docker-compose.yml
services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    environment:
      DOMAIN: "https://vault.yourdomain.com"
      SIGNUPS_ALLOWED: "true"
      ADMIN_TOKEN: "替换为随机字符串_openssl rand -base64 48"
      LOG_LEVEL: "warn"
    volumes:
      - ./data:/data
    ports:
      - "8180:80"
    restart: unless-stopped

注册完成后关闭注册

初始注册完自己的账号后,将 SIGNUPS_ALLOWED 改为 false 并重启容器,防止陌生人注册。

Nginx 反向代理 + SSL

先申请证书:certbot --nginx -d vault.yourdomain.com

创建 /etc/nginx/conf.d/vaultwarden.conf

server {
    listen 443 ssl;
    server_name vault.yourdomain.com;
    ssl_certificate     /etc/letsencrypt/live/vault.yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/vault.yourdomain.com/privkey.pem;
    client_max_body_size 10m;
    location / {
        proxy_pass http://127.0.0.1:8180;
        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 https;
    }
    location /notifications/hub {
        proxy_pass http://127.0.0.1:8180;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

客户端连接自建服务器

客户端设置方式服务器 URL 填写
浏览器插件点击齿轮图标→自托管环境https://vault.yourdomain.com
桌面端登录页→高级选项https://vault.yourdomain.com
手机端(iOS/Android)登录页→自托管https://vault.yourdomain.com

数据备份

所有密码数据存储在 /opt/vaultwarden/data,重要性极高,建议每日备份到多个位置:

# 备份数据目录
tar czf /tmp/vault_backup_$(date +%F).tar.gz -C /opt/vaultwarden data

# 可配合 rclone 上传到对象存储
rclone copy /tmp/vault_backup_$(date +%F).tar.gz remote:vaultwarden-backup/

小结

  • HTTPS 是强制要求,没有 SSL 不要开放公网访问
  • 注册完个人账号后立即关闭开放注册
  • ADMIN_TOKEN 保管好,忘记需重新生成并重启容器
  • 数据目录是备份的核心,建议每日异地备份

常见问题

Vaultwarden 和 Bitwarden 有什么区别?

Bitwarden 是官方服务端(开源但较重),Vaultwarden 是社区实现的轻量替代,完全兼容 Bitwarden 客户端,适合个人和小团队在 VPS 上自建。

忘记 ADMIN_TOKEN 怎么办?

用 openssl rand -base64 48 生成新 Token,更新 docker-compose.yml 中的环境变量后执行 docker compose up -d 重启容器。

密码数据可以迁移走吗?

可以。在 Bitwarden 客户端的设置中导出密码库(JSON 或加密格式),可导入到任何 Bitwarden 兼容服务端,或备份存档。