开源密码管理新选择:自建 Bitwarden(Vault)密码托管,跨平台同步 + MFA 多因素认证
本文最后更新于 2025年7月28日 凌晨
为了安全,在不同网站使用不同的强密码确实很麻烦。但如果在自己的服务器上部署Bitwarden密码管理器,整个过程就能变得丝滑: 自动生成并存储强密码,多设备同步,还能一键填充。更爽的是,它甚至支持 MFA(Multi-Factor Authentication) 多因素认证,安全性直接拉满。
Bitwarden
Bitwarden 其实就是一个密码管理器,和 Apple 自带的密码管理工具差不多,提供了密码托管、强密码生成功能。不同的是,Apple 自带的密码管理器,只能在它生态内使用,在 Android 和 Windows 上就很尴尬了,但是 Bitwarden 提供跨平台支持。
其实更多的人应该更了解它的同类产品: 1Password,它也是跨平台支持,但是它价格有一点贵(虽然家庭版本性价比非常高)……
不同的是,Bitwarden 是开源的,而 1Password 是闭源的。同时,Bitwarden 可以自己部署服务端,意味着你可以掌控数据,而不是把数据交给第三方。
你可以搭建了自己的密码管理器,取代浏览器的密码管理器。
Vaultwarden
Bitwarden 本身是开源的,在不订阅的情况下,不论是订阅官方还是利用官方的服务端自建,功能都是受限的。比如: 不提供 MFA(这个挺关键的)、支持的用户有限(其实个人用无所谓)。
我们可以使用第三方开源机构维护的 Bitwarden 服务端:
- Vaultwarden: 基于 Rust 开发的 Bitwarden 服务端,支持 MFA、支持多用户、支持多设备同步。
Vaultwarden 以前叫 bitwarden_rs,后来改名为 vaultwarden。
Vaultwarden 有以下优势:
- 服务器性能要求低: Rust 语言的天然优势,加上社区的贡献,它对服务器的性能要求比官方的版本低很多。
- 支持 MFA: 官方只有订阅版本才支持 MFA,而 Vaultwarden 支持 MFA。
flowchart LR
A[Bitwarden<br/>客户端] --> B{服务端选择}
B -->|Bitwarden官方| C[连接服务器<br/>SaaS OR Self-Host]
C --> D{订阅状态检查}
D -->|高级订阅| E[全功能解锁<br/>MFA/策略管理等]
D -->|免费版| F[基础功能<br/>用户/设备限制]
B -->|Vaultwarden社区版| G[连接自建服务器]
G --> H[全功能默认解锁<br/>无订阅限制]
H --> I[需手动维护更新]
E & F & H --> J[密码库同步]
style A fill:#6c8ebf,stroke:#333
style C fill:#6c8ebf,stroke:#333
style G fill:#d6b656,stroke:#333
style E fill:#82b366,stroke:#333
style H fill:#82b366,stroke:#333
style F fill:#d6b656,stroke:#333
style I fill:#ff9999,stroke:#333
当然,Vaultwarden 也有缺点:
- 不支持自动更新: 官方版本支持自动更新(非自部署版本),而 Vaultwarden 需要手动更新。
- 依靠社区支持: Vaultwarden 依靠社区支持,更新速度可能没有官方那么快。
Vaultwarden 更新计划,可以看 GitHub 的 issue 和 discussions。尤其是这个 issue:
使用体验
就我目前而言,我使用 Bitwarden 的主要原因是:
- 跨平台同步: 不止于 macOS 和 iOS,还支持 Android、浏览器插件和 Linux 等平台上同步;尤其是浏览器插件,利用快捷键一键填充密码,非常方便。
- MFA 多因素认证: 以往的 MFA 都是第三方服务,比如 Google Authenticator,切换到 Bitwarden 后,配合多设备同步, MFA 登录终于不同找手机了。
尤其是浏览器插件,一键填充密码,非常方便:
还有一个扩展功能: Send。 这个功能可以让你把文件或者文本,在 Bitwarden 中创建一个链接并设置有效期,然后发送给其他人,对方就可以通过链接下载文件或者查看文本。当文件或者文本过期后,内容和链接都会失效。
就是大小有限制,目前是最大 500MB,也没有看到可以写改的地方🤔。但是 500MB,其实基本满足了。
支持创作
制作教程不易,如果热心的小伙伴,想支持创作,可以加入我们的电圈(还可以解锁远程协助、好友位😃):
- Mintimate的电圈: https://afdian.com/a/mintimate
- Mintimate的微信赞赏码 👉 如果认为本教程对你很有帮助,可以请我喝咖啡 ☕

志同道合的小伙伴也是知音难觅。
- 开发者爱好群: 👉 如果你对云服务器、CDN、云数据库和Linux等云计算感兴趣,亦或者喜欢编程、设计、产品、运营等领域,欢迎加入我们的开发者爱好群,一起交流学习(目前可能就我一个人?🤔,毕竟才刚刚创建~)。

当然,也欢迎在B站、YouTube或微信公众号上关注我们:
- Bilibili: https://space.bilibili.com/355567627
- YouTube: https://www.youtube.com/@mintimate/featured
- 微信公众号: MintimateBlog

更多:
前置操作条件
部署 Vaultwarden 服务端,其实非常简单,硬件和软件分别需要:
- Linux 服务器: 推荐使用 1CPU 1GB 内存以上的 Ubuntu 或者 Debian 发行版本服务器。
- 域名: 一个域名,Vaultwarden 需要 HTTPS 才能使用,所以需要一个域名。如果你是本地使用,可以使用 hosts 去实现。
- Docker: Vaultwarden 服务端使用 Docker 部署,所以我们需要 Docker 环境。
本文就使用腾讯云的轻量应用服务器配合 Debian 镜像,来部署 Vaultwarden 服务端。
如果你也想使用腾讯云的轻量应用服务器部署 Memos;那么你可以使用博客的专属链接购买体验:
本次使用的服务器配置(主要是内存需要 2G):
Docker Compose
Docker Compose 是 Docker 官方提供的工具,可以让我们通过一个配置文件来定义和运行多个 Docker 容器。使用 Docker Compose 可以简化 Docker 容器的部署和管理。
而且,毕竟 Compose 有一个文件用于定义和编排容器,所以后续的版本升级和配置修改,相比直接使用 docker run
命令,清晰了很多。
flowchart LR
A[Docker 容器管理] --> B[docker run<br/>单容器管理]
A --> C[docker compose<br/>多容器编排]
B --> D1["🔧 手动配置参数<br/>📝 命令行操作<br/>🎯 适合快速测试"]
B --> D2["示例:<br/>docker run -d --name web<br/>-p 80:80 nginx"]
C --> E1["📋 YAML 文件配置<br/>🔄 自动化管理<br/>🏗️ 微服务架构"]
C --> E2["示例:<br/>services:<br/> web:<br/> image: nginx<br/> ports: ['80:80']"]
style A fill:#4a90e2,stroke:#333,stroke-width:2px,color:#fff
style B fill:#f5a623,stroke:#333,stroke-width:2px,color:#fff
style C fill:#7ed321,stroke:#333,stroke-width:2px,color:#fff
style D1 fill:#fff2cc,stroke:#d6b656
style D2 fill:#f8cecc,stroke:#b85450
style E1 fill:#d5e8d4,stroke:#82b366
style E2 fill:#dae8fc,stroke:#6c8ebf
安装 Docker
虽然软件包管理器里面自带 docker,但是那个版本比较低,毕竟 Debian 官方的软件包管理器,都是比较保守的;所以我们一般都使用 Docker CE 版本的 Docker。你可以按照 Docker 官方文档,安装 Docker CE 版本的 Docker。
或者你用的是云厂商的服务器,那么你可以用云厂商的 Docker CE 版本镜像源,比如腾讯云的:
安装好后的效果:
1 |
|
部署 Vaultwarden
前置准备已经完成了。现在我们开始部署 Vaultwarden 服务端(客户端直接使用 Bitwarden 官方客户端即可)。
根据 Vaultwarden Docker Compose 的说明,我们只需要拉取镜像,然后使用 Docker Compose 启动即可。
至于 HTTPS,我个人喜欢在宿主机上部署 Nginx,然后使用 Nginx 代理到 Docker 容器,这样比较方便。
创建 Compose 文件
我的习惯是在根目录创建一个文件夹专门用于存储 Docker 相关的文件:
1 |
|
之后,我们进入该文件夹,创建 docker-compose.yml
文件:
1 |
|
解释一下上面的配置文件:
DMAIN=https://vw_demo.example.com
: 域名,这里我使用的是https://vw_demo.example.com
,你需要换成你自己的域名。后续我们使用 Nginx 代理到该域名。SIGNUPS_ALLOWED=true
: 允许注册,我们可以第一次启动后,注册一个账号,然后关闭该配置,这样就可以禁止注册来实现私有化。volumes: - /dockerData/vaultwarden/vw-data:/data
: 挂载数据卷,这样数据就不会丢失。ports: - "1880:80"
: 端口映射,把容器内的 80 端口映射到宿主机的 1880 端口。
启动程序
之后,我们就可以启动程序了:
1 |
|
之后,我们在防火墙放行对应的端口就可以访问页面,但是无法进入 登录页面,因为没有 HTTPS:
Nginx 反代
上文说到,Vaultwarden 需要 HTTPS 才能使用,所以我们需要一个 HTTPS 的域名。这里我们使用 Nginx 反代,实现 HTTPS。
如果你是在内网使用,那么你可以自签发一个证书,然后使用 Nginx 反代并在使用的客户端安装证书。否则,就需要申请一个 SSL 证书。
你可以参考我之前的文章 使用acme.sh给Web网站自动安装免费的SSL证书并自动更新,轻松实现HTTPS
我们在 Nginx 的配置文件中,添加如下配置:
1 |
|
当然,你也可以像我一样,使用 EdgeOne 这样的 CDN 实现 HTTPS:
之后,浏览器访问 HTTPS,即可看到登录页面:
注册账号后,即可看到主页:
Vaultwarden 配置
接下来,我们可以配置一下 Vaultwarden。
禁止注册
当我们注册完毕后,我们就可以禁止注册了,这样就可以实现私有化部署了。
修改 docker-compose.yml
文件,添加 SIGNUPS_ALLOWED=false
,然后重启容器:
1 |
|
禁止注册后,我们就可以看到注册按钮消失了。
浏览器插件
你可以在 Chrome、Edge 和 Firefox 等浏览器插件商店中搜索 Bitwarden
,安装即可:
打开插件的时候,选择自托管:
在弹出的界面,输入自己服务器的 URL 即可。
你还可以激活插件的自动填充,达到文章开头的效果:
禁用Web入口
为了进一步加固安全,在注册好账户后,你可以禁用Vaultwarden 的 Web入口,只使用 Web API 来登录 Bitwarden 的浏览器插件、移动端应用等。
修改 docker-compose.yml
文件,添加 WEB_VAULT_ENABLED=false
,然后重载容器的配置即可:
哈哈,或者你可以像我这样,自定义一个好看的主页:
END
好啦,感谢阅读,如果觉得不错,欢迎点赞、评论、转发。如果有什么问题,欢迎在评论区留言。
我使用 Vaultwarden 已经一年多了,感觉还是很稳的。目前数据库使用外置 MySQL,看了一下,才用了不到 100MB 的存储空间,还是非常省空间的。至于稳定性就更不用说了,一年没宕机过。
当然,我还是建议大家升级最新 Docker CE 或者 Vaultwarden 镜像前,给服务器做一下快照,防止遇到什么奇葩问题需要回滚。
最后,如果你觉得本篇教程对你有帮助,欢迎加入我们的开发者交流群: 812198734 ,一起交流学习,共同进步。