自建密码管理器,我为什么从Bitwarden官方换到了Vaultwarden,又差点换回去
去年双十一,我把用了三年的LastPass换成了自建的Vaultwarden。原因很简单:LastPass免费版只能在一台设备上用了,而我又不想每年掏200多块订阅。当时看了一堆教程,都说Vaultwarden是“神器”,30MB内存就能跑,比官方Bitwarden轻量100倍。我信了。
结果第一个坑就来了。我手头有个1核1GB的VPS,跑着博客和梯子。按照官方Bitwarden的Docker Compose装,内存直接爆了。docker-compose up之后,PostgreSQL和Redis加起来吃了1.2GB,OOM Killer把进程杀了。我查了日志,才发现官方版最低要求是2GB内存,而我的VPS只有1GB。教程里没写这个,他们只说“很简单”。
换成Vaultwarden之后,docker run一行命令,内存占用稳定在22MB左右,镜像大小31.7MB。我用的SQLite,数据库文件才2MB。当时觉得真香。但第二个坑紧接着来了:Vaultwarden不是Bitwarden。它兼容Bitwarden客户端,但少了组织功能、少了SSO、少了紧急访问。如果你只是个人用,没问题。但如果你在公司里推,别想了,官方版才支持这些。
第三个坑最要命:备份。我设置了每天凌晨3点用cron打包/vw-data目录,但只备份到同一个VPS的另一个目录。今年3月,VPS服务商突然迁移节点,我的实例被删了,连同备份一起没了。我花了两个小时从KeePassXC的旧备份里恢复——幸好半年前我导出过一次。所以现在我的观点是:自建密码管理器,技术不是门槛,备份才是。如果你没有异地备份(比如rclone到OneDrive或者B2),就别自建。花10美元一年用官方Bitwarden,比你的时间便宜。
下面是我对比的三个方案,具体参数和步骤。
三个方案的真实数据对比
我用了三个月,记录了一些数字。Vaultwarden跑在1核512MB的VPS上,Ubuntu 22.04,Docker 24.0.7。官方Bitwarden跑在2核2GB的VPS上,同样的系统。KeePassXC跑在我的Windows 11笔记本上,i5-1135G7,16GB内存。
| 维度 | Vaultwarden | 官方Bitwarden | KeePassXC |
|---|---|---|---|
| 最小内存 | 20MB | 1.8GB | 80MB |
| 磁盘占用 | 50MB(含数据库) | 3.2GB | 10MB(kdbx文件) |
| 部署时间 | 5分钟 | 25分钟 | 2分钟 |
| 浏览器插件 | 支持(需自签名证书) | 支持 | 支持(需配置) |
| 移动端 | 支持 | 支持 | 支持(通过WebDAV或Syncthing) |
| 多用户 | 支持(但无组织) | 支持 | 不支持 |
| 两步验证 | 支持TOTP | 支持TOTP、YubiKey、Duo | 支持TOTP、YubiKey |
| 价格 | VPS成本约$3/月 | VPS成本约$10/月 | 免费 |
注意:Vaultwarden的浏览器插件需要你的服务器有可信SSL证书。我用Let's Encrypt,但如果你用自签名,Chrome会一直报错。官方Bitwarden的安装脚本会自己配Caddy,但内存不够照样崩。KeePassXC最省心,但多设备同步要自己解决,我用Syncthing同步kdbx文件,冲突过两次,差点丢密码。
如果你还是要自建,这是我的步骤(Vaultwarden版)
- 买VPS:我推荐RackNerd或CloudCone,1核512MB,年付$10左右。别用Oracle免费机,随时可能被回收。
- 安装Docker:
curl -fsSL https://get.docker.com | sh,然后systemctl enable docker。 - 拉取Vaultwarden:
docker pull vaultwarden/server:latest,镜像大小31.7MB。 - 运行容器:
docker run -d --name vaultwarden -v /vw-data/:/data/ -p 127.0.0.1:8080:80 -e SIGNUPS_ALLOWED=true vaultwarden/server:latest。注意这里只监听本地,后面用Nginx反代。 - 配置Nginx和SSL:用certbot申请证书,
certbot --nginx -d vw.yourdomain.com。然后反代到127.0.0.1:8080。记得在Vaultwarden的admin页面(/admin)设置SIGNUPS_ALLOWED=false。 - 创建账户:打开
https://vw.yourdomain.com,注册。然后从Bitwarden导出JSON,在Vaultwarden里导入。注意:导出时选“.json”格式,不要选“加密的.json”,否则导入会失败。 - 设置备份:
crontab -e,加一行0 3 * * * tar -czf /backup/vw-$(date +\%Y\%m\%d).tar.gz /vw-data/,然后用rclone同步到B2。我用的rclone,配置了rclone sync /backup b2:my-bucket。别学我,只备份到本地。 - 测试恢复:把tar.gz解压到另一个目录,用
docker run挂载,看能不能登录。我每季度做一次。
我的最终观点
如果你只是一个人用,KeePassXC加Syncthing最安全,因为你的密码永远不会离开你的设备。如果你要和家人共享,Vaultwarden是最佳平衡,但你必须搞定备份。如果你在公司里用,别自建,直接买官方Bitwarden Teams,$3/人/月,省下的时间够你写十篇博客。开源软件给了我们选择,但选择的前提是认清代价。我现在的组合是:Vaultwarden做主库,KeePassXC做冷备份,每月1号手动导出一次。麻烦,但安心。