Vaultwarden:自托管密码管理器实战指南,用Docker部署你的私有密码库

每次注册新网站都要想一个新密码,结果要么记不住,要么所有账号共用一个"万金油"密码——只要一个站点泄露,所有账号跟着遭殃。云端密码管理器(1Password、Bitwarden Premium)又要按年付费,密码数据还托管在别人服务器上。有没有一种方案,密码存在自己的机器上,客户端体验又不打折?答案就是自托管密码管理服务器 Vaultwarden。

Article Image

一、项目背景

Vaultwarden(原名 bitwarden_rs)是 Bitwarden 服务端的第三方开源实现,用 Rust 语言编写,GitHub 收获 69.5k Star。它实现了完整的 Bitwarden Client API,也就是说:你部署一个 Vaultwarden 服务器,然后直接用官方 Bitwarden 的浏览器扩展、手机 APP、桌面客户端连接它,客户端体验和官方云端版完全一致,但数据只存在你自己的机器上。

和官方 Bitwarden 服务端(C#/.NET 实现)相比,Vaultwarden 的内存占用通常只有 50MB 左右,官方版本动辄几百 MB 到 1GB,非常适合部署在 NAS、低配 VPS 或树莓派上。

Article Image

二、主流密码管理方案对比

对比维度 Vaultwarden(自托管) Bitwarden 云端免费版 1Password
费用 完全免费(含TOTP、报告) 免费(TOTP需Premium) $35.88/年
数据存储 自己服务器,端到端加密 Bitwarden官方服务器 AgileBits服务器
内存占用 ~50MB(Rust) 几百MB(C#/.NET) —
客户端 官方Bitwarden全平台客户端 官方Bitwarden全平台客户端 1Password专属客户端
TOTP双因素 免费内置 需Premium($10/年) 内置
紧急访问/家庭共享 支持Organizations 支持(免费有限额) 支持

简单来说:想要数据自主权 + 零成本,Vaultwarden 是当前最优解;不想折腾服务器就用 Bitwarden 免费云端;预算充足且完全不想运维就选 1Password。

三、Docker 一键部署

部署 Vaultwarden 只需要 Docker 环境,五分钟搞定。以下是完整的 docker-compose 配置:

mkdir -p /opt/vaultwarden/data
cd /opt/vaultwarden

cat > docker-compose.yml << 'EOF'
version: "3.8"

services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: always
    ports:
      - "8080:80"
    volumes:
      - ./data:/data
    environment:
      # 域名(HTTPS必需,后面会讲为什么)
      DOMAIN: "https://vault.example.com"
      # 管理后台邀请令牌(首次注册用)
      ADMIN_TOKEN: "your-strong-random-token-here"
      # 关闭注册,只允许邀请用户
      SIGNUPS_ALLOWED: "false"
      # 启用WebAuthn(可选)
      WEBAUTHN_ENABLED: "true"
      # SMTP邮件配置(用于验证邮箱、发送紧急访问请求)
      SMTP_HOST: "smtp.qq.com"
      SMTP_PORT: "465"
      SMTP_FROM: "your@qq.com"
      SMTP_USERNAME: "your@qq.com"
      SMTP_PASSWORD: "your-smtp-auth-code"
      SMTP_SECURITY: "ssl"
EOF

docker compose up -d
echo "部署完成!访问 http://localhost:8080"

其中 ADMIN_TOKEN 是进入管理后台(/admin)的令牌,建议用强随机字符串:

openssl rand -base64 32

访问 http://服务器IP:8080,你会看到 Bitwarden 风格的登录页。用你设置的 ADMIN_TOKEN 访问 /admin 路径,可以进行用户管理、备份配置、SMTP 设置等操作。

Article Image

四、客户端配置(浏览器+手机)

Vaultwarden 部署好后,直接使用官方 Bitwarden 客户端即可。

4.1 浏览器扩展#

安装 Bitwarden 浏览器扩展(Chrome/Edge/Firefox 应用商店搜索 "Bitwarden"),打开扩展设置,找到 Self-hosted 选项,填入你的服务器地址(如 https://vault.example.com),即可登录并同步你的密码库。

4.2 手机 APP#

iOS 在 App Store、Android 在 Google Play/应用商店搜索 "Bitwarden" 安装。首次打开同样选择 Self-hosted,输入服务器地址即可同步。手机端支持指纹/面容解锁、自动填充表单,体验流畅。

4.3 桌面客户端#

Windows/macOS/Linux 桌面客户端也支持自托管服务器,配置方式同上。

五、踩坑记录

坑1:HTTP 访问时浏览器扩展/手机 APP 拒绝连接

Bitwarden 客户端强制要求 HTTPS(除了 localhost),HTTP 访问会提示 "Invalid server response"。解决方案有两种:

  • 方案A(推荐):配置 Nginx/Caddy 反向代理 + Let's Encrypt 免费 SSL 证书
  • 方案B(临时测试):浏览器扩展可以在 chrome://flags/#unsafely-treat-insecure-origin-as-secure 中把 HTTP 地址加入白名单;手机端比较麻烦,建议还是走 HTTPS

坑2:docker compose up 后容器反复重启

检查日志通常是数据目录权限问题:

docker logs vaultwarden --tail 50

如果看到权限错误,执行:

chown -R 1000:1000 /opt/vaultwarden/data
docker restart vaultwarden

坑3:忘记 ADMIN_TOKEN,无法进入管理后台

直接改环境变量重启即可(docker-compose.yml 里修改 ADMIN_TOKEN 后 docker compose up -d 重建容器);但注意:修改 ADMIN_TOKEN 不影响已注册用户的数据,密码库完全不受影响。

坑4:SMTP 配置后收不到验证邮件

国内 QQ/163 邮箱需要使用"授权码"而不是登录密码,在邮箱设置中生成授权码后填入 SMTP_PASSWORD。SMTP_PORT 用 465(SSL)或 587(STARTTLS),Security 字段要对应填 ssl 或 starttls。

六、总结与选型建议

  • Vaultwarden:有 NAS/VPS、想要数据自主权、追求零成本的开发者和自托管爱好者,首选方案
  • Bitwarden 云端:不想运维、对数据存储地点不敏感的普通用户
  • 1Password:预算充足、追求极致 UI 和家庭共享体验的用户
  • KeePassXC:完全离线、不需要多设备同步的纯本地派

Vaultwarden 最大的价值在于:用 50MB 内存换回了密码数据的完整所有权,同时又保留了 Bitwarden 全平台客户端的优秀体验。对开发者来说,这几乎是零成本就能获得的"密码自由"。

部署过程中有任何问题,欢迎在评论区留言讨论。如果这篇文章对你有帮助,欢迎点赞、收藏、转发三连!