2026 Vaultwarden 自建密码管理器:Docker 部署替代 Bitwarden 付费订阅

2479 字
12 分钟
2026 Vaultwarden 自建密码管理器:Docker 部署替代 Bitwarden 付费订阅

你的密码存在哪里?

浏览器自动填充确实方便,但 Chrome 的密码管理器本质上是个加密文件,换了浏览器或设备就得重新折腾。而且浏览器密码管理器的安全性一直是个问题——前几年谷歌就被曝出某些密码可以明文读取。更别提那些还在用「123456」「password」的人,每年数据泄露报告里最常见的密码永远是这几个。

Bitwarden 是开源自建密码管理器的首选——功能全、跨平台、安全性经过了多年验证。但从 2025 年底开始风向变了:Bitwarden 换了新 CEO(专长是「并购」的那类人),悄悄从官网上删掉了「永远免费」的承诺,社区开始怀疑免费层和自建支持会不会被砍。Reddit 上那篇帖子收获了 3.2k 的 upvotes,讨论非常激烈。

Vaultwarden 就是在这里出现的。一个完全兼容 Bitwarden 客户端的服务端,用 Rust 重写,去掉了 Bitwarden 那些笨重的依赖。功能几乎一样——密码管理、安全笔记、TOTP 两步验证、共享集、组织管理——但资源占用少一个数量级。Bitwarden 官方的自建服务需要 2GB+ 内存来跑 .NET 全套,Vaultwarden 在 256MB 的机器上就能跑得很流畅。


一、Vaultwarden vs Bitwarden 自建#

对比项VaultwardenBitwarden 自建
语言Rust(单二进制).NET / Docker 大堆栈
内存占用~50MB~2GB+
数据库SQLite(默认)/ MySQL / PostgreSQLSQL Server / PostgreSQL
安装单个 Docker 容器4 个容器 + 数据库
客户端兼容全部 Bitwarden 客户端官方支持
TOTP/两步验证✅ 免费需 Premium
组织管理✅(部分功能需 Premium)
SSO/OIDC✅ 支持(最新版 1.36)
开源协议AGPLv3部分闭源
社区活跃度62.6k Star,非常活跃官方维护

核心差异在于 资源占用。Bitwarden 自建需要 SQL Server 或 PostgreSQL,加上 .NET 运行时和一系列后台服务,全套跑下来至少 2-3GB 内存。Vaultwarden 一个容器搞定,SQLite 内置不需要额外数据库,512MB 的 VPS 上可以跟其他服务共存。

而且 Vaultwarden 把 TOTP 验证功能免费开放了——Bitwarden 上这是 Premium 功能(年费 10)。如果你只用密码管理基础功能,Vaultwarden等于每年给你省了10)。如果你只用密码管理基础功能,Vaultwarden 等于每年给你省了 10。


二、Docker Compose 部署#

Vaultwarden 的部署非常简单,不需要外部数据库——SQLite 开箱即用。

创建目录:

Terminal window
mkdir -p ~/vaultwarden && cd ~/vaultwarden

新建 docker-compose.yml

services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: unless-stopped
ports:
- "8080:80"
volumes:
- ./data:/data
environment:
SIGNUPS_ALLOWED: "true"
DOMAIN: "https://vault.你的域名.com"
LOGIN_RATELIMIT_MAX_BURST: "10"
LOGIN_RATELIMIT_SECONDS: "60"
ADMIN_TOKEN: "你的管理密码"
WEBSOCKET_ENABLED: "true"
TZ: Asia/Shanghai

几个关键配置说明:

  • SIGNUPS_ALLOWED:是否允许注册。初期设 true 先给自己注册账号,注册完改 false 关掉,防止别人注册
  • DOMAIN:你的域名。如果用了反向代理,这里必须填完整的 HTTPS 地址——Vaultwarden 根据这个生成正确的回调 URL 和附件链接。配错的话客户端会连不上
  • LOGIN_RATELIMIT_*:登录频率限制。防止暴力破解,这里设置每 60 秒最多尝试 10 次
  • ADMIN_TOKEN:管理员面板的密码。设一个强密码,后面管理用户、查看日志都要用这个
  • WEBSOCKET_ENABLED:启用 WebSocket。客户端之间实时同步密码变更需要这个,建议开启

启动:

Terminal window
docker compose up -d

访问 http://你的IP:8080,注册第一个账号。注册完成后,建议立即把 SIGNUPS_ALLOWED 改为 false 重启容器,堵上对外开放注册的口子。

管理员面板: 访问 http://你的IP:8080/admin,输入你在 ADMIN_TOKEN 里设置的密码。这里可以:

  • 查看所有用户列表
  • 禁用或删除用户
  • 查看诊断信息
  • 手动发送邀请邮件
  • 调整配置参数

三、迁移数据和客户端配置#

把已有的 Bitwarden 数据迁移过来很简单:

从 Bitwarden 官方导出:

  1. 登录 Bitwarden Web Vault(官方版或自建版都行)
  2. 设置 → 加密导出 → 导出为 .json(选加密导出,安全第一)
  3. 保存到本地

导入 Vaultwarden:

  1. 登录你的 Vaultwarden Web 界面
  2. 工具 → 导入数据
  3. 源格式选 Bitwarden (json)
  4. 上传之前导出的 json 文件
  5. 确认导入成功

导入后所有密码、安全笔记、身份信息、支付卡都会保留。但附件需要单独处理——Vaultwarden 支持附件,需要重新上传。如果附件很多,可以用 Vaultwarden CLI 脚本批量处理。

客户端配置:

在所有设备上安装 Bitwarden 客户端(安卓、iOS、桌面、浏览器扩展都可以),登录时选择自托管,填入你的服务器地址:

https://vault.你的域名.com

就这么简单。Vaultwarden 完全兼容 Bitwarden 的 API,客户端根本感知不到背后跑的是 Vaultwarden 还是 Bitwarden 官方服务器。


四、反向代理和 HTTPS#

密码管理器不走 HTTPS 是不行的——所有密码数据在传输过程中都是加密的,但如果没有 HTTPS,你无法保证连接的对象是真实的服务器而不是中间人攻击。

Caddy 方案(最简洁):

如果你已经在跑 Caddy(或者准备跟下一篇文章一起部署),配置非常简单:

vault.你的域名.com {
reverse_proxy vaultwarden:8080
}

Caddy 自动申请 Let’s Encrypt 证书,自动续期,什么都不用管。

Nginx Proxy Manager 方案:

如果你用 NPM,添加一条代理规则:

  • 域名:vault.你的域名.com
  • 转发 IP:http://你的内网IP:8080
  • 开启 SSL → 申请 Let’s Encrypt 证书
  • 勾选 Websockets Support(Vaultwarden 的 WebSocket 功能需要)

HTTPS 配置完成后,回到 docker-compose.ymlDOMAIN 改成你的实际 HTTPS 地址:

environment:
DOMAIN: "https://vault.你的域名.com"

然后重启容器:

Terminal window
docker compose restart

这一步必须做——Vaultwarden 用 DOMAIN 来生成正确的附件链接和 WebSocket 地址。配错的话客户端能登录但附件下不了、实时同步也失效。


五、日常维护和备份#

Vaultwarden 的数据全在 ./data 目录里——一个 SQLite 数据库加上附件文件。备份就是备份这个目录:

Terminal window
# 停止容器再备份(保证数据一致性)
docker compose down
tar -czf vaultwarden-backup-$(date +%Y%m%d).tar.gz data/
docker compose up -d

或者用 sqlite3 在线备份(不需要停服务):

Terminal window
sqlite3 data/db.sqlite3 ".backup '/tmp/vw-backup-$(date +%Y%m%d).db'"

备份的注意事项:

  • SQLite 数据库是核心——所有密码、配置、用户信息都在这里。丢了这个等于丢了所有密码
  • 附件——data/attachments/ 目录下的文件也要备份。如果附件不重要,只备份数据库也能恢复所有密码
  • 备份周期——密码不太频繁变动,每周备份一次足够了。但如果经常改密码加账户,建议每日自动备份
  • 恢复——在新机器上解压备份文件到 data 目录,启动容器即可。Vaultwarden 的迁移简单到令人发指

自动备份可以写个 cron 脚本:

#!/bin/bash
# 放到 /etc/cron.daily/vaultwarden-backup
docker exec vaultwarden sqlite3 /data/db.sqlite3 ".backup '/data/backup/auto-$(date +%Y%m%d).db'"
find /data/backup -name "auto-*.db" -mtime +30 -delete

这个脚本每天执行一次,保留最近 30 天的备份,每月 1 号自动清理超期的旧备份。

延伸阅读#


六、常见问题#

Q:Vaultwarden 和 Bitwarden 功能上有什么差异?

Vaultwarden 实现了 Bitwarden API 的绝大部分功能。主要差异是一些企业级功能——比如目录同步(LDAP/AD 集成)、事件日志(审计日志)——Vaultwarden 目前还没有原生支持。不过有社区插件可以用。个人用户和 5 人以下小团队完全感受不到差异。

Q:Bitwarden 客户端会不会更新后不兼容 Vaultwarden?

这是社区最关心的问题。Bitwarden 换了新 CEO 后确实有这个风险——如果 Bitwarden 在客户端里强制校验服务器版本,老的 Vaultwarden 可能连不上。但 Vaultwarden 社区反应很快,Bitwarden 每次 API 变更,Vaultwarden 一般在几天到一周内就会跟进更新。保持 Vaultwarden 版本最新就能避免这个问题。

Q:为什么 Vaultwarden 比 Bitwarden 官方省这么多内存?

Bitwarden 官方自建服务跑的是 .NET 全栈——Identity Server、SQL Server、Web 前端、API 网关、后台任务服务——整整五六个进程。Vaultwarden 用 Rust 写成一个单二进制文件,内嵌了 Web 服务器、API、数据库(SQLite)和后台任务。一个进程干完了 Bitwarden 五六个进程的活,内存自然省下来了。

Q:能不能把 TOTP 验证码也放 Vaultwarden?

可以。Vaultwarden 的 TOTP 功能是免费开放的。在网页端编辑密码条目时,勾选「TOTP 验证码」选项,扫描二维码或输入密钥即可。之后在 Bitwarden 客户端里查看密码时,TOTP 验证码会直接显示在密码旁边——不需要再打开 Google Authenticator 或者 Authy。注意如果你用到其他应用(如 1Password、Proton Pass),它们不能跨应用读取 TOTP。

Q:忘了管理面板的密码怎么办?

管理面板的 ADMIN_TOKEN 存在环境变量里,不是存数据库。如果忘了,可以:

  1. 执行 docker exec -it vaultwarden env 查看当前环境变量
  2. 如果输出里没有 ADMIN_TOKEN,说明没设置或设置错误
  3. docker-compose.yml 里重新设置 ADMIN_TOKEN,然后 docker compose restart

Vaultwarden 部署完成后,你就有了一套完全自控的密码管理系统。对比之前可能用的浏览器密码管理器或者付费订阅的 1Password/Bitwarden Premium——现在所有数据都在你自己的服务器上,没有第三方能访问,每年还省了订阅费。

放到你的 VPS 上跟其他自建服务一起跑——一台 1 核 1G 的机器可以同时运行 Vaultwarden(50MB)+ Navidrome(50MB)+ Gitea(100MB)+ Caddy(30MB),加起来不到半 GB 内存,构成完整的个人云服务矩阵。

推荐指数:⭐⭐⭐⭐⭐

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!

赞助
2026 Vaultwarden 自建密码管理器:Docker 部署替代 Bitwarden 付费订阅
https://www.kshare.top/posts/2026-vaultwarden-自建密码管理器docker-部署替代-bitwarden/
作者
Kshare
发布于
2026-06-21
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
Kshare
Hello, I'm Kshare.
公告
站点已开启广告(类型:弹窗广告),给您带来的不便敬请谅解。如有更好的广告建议,欢迎发送邮件至 t9uzrz6u@anonaddy.me,感谢您的支持!
音乐
封面

音乐

暂未播放

0:00 0:00
暂无歌词
分类
标签
站点统计
文章
187
分类
9
标签
190
总字数
490,175
运行时长
0
最后活动
0 天前

文章目录