自建密码管理器别急着上Vaultwarden:我踩了三个坑,对比Bitwarden和KeePassXC的真实数据

🔑 关键词:Vaultwarden, Bitwarden, 密码管理器, 开源软件, 自建服务器

📖 摘要:一个业余开发者自建密码管理器的真实经历,对比Vaultwarden、官方Bitwarden和KeePassXC的内存占用、部署步骤和备份陷阱,附完整Docker命令和恢复测试方法。

自建密码管理器,我为什么从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版)

  1. 买VPS:我推荐RackNerd或CloudCone,1核512MB,年付$10左右。别用Oracle免费机,随时可能被回收。
  2. 安装Docker:curl -fsSL https://get.docker.com | sh,然后systemctl enable docker。
  3. 拉取Vaultwarden:docker pull vaultwarden/server:latest,镜像大小31.7MB。
  4. 运行容器:docker run -d --name vaultwarden -v /vw-data/:/data/ -p 127.0.0.1:8080:80 -e SIGNUPS_ALLOWED=true vaultwarden/server:latest。注意这里只监听本地,后面用Nginx反代。
  5. 配置Nginx和SSL:用certbot申请证书,certbot --nginx -d vw.yourdomain.com。然后反代到127.0.0.1:8080。记得在Vaultwarden的admin页面(/admin)设置SIGNUPS_ALLOWED=false。
  6. 创建账户:打开https://vw.yourdomain.com,注册。然后从Bitwarden导出JSON,在Vaultwarden里导入。注意:导出时选“.json”格式,不要选“加密的.json”,否则导入会失败。
  7. 设置备份: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。别学我,只备份到本地。
  8. 测试恢复:把tar.gz解压到另一个目录,用docker run挂载,看能不能登录。我每季度做一次。

图片

我的最终观点

如果你只是一个人用,KeePassXC加Syncthing最安全,因为你的密码永远不会离开你的设备。如果你要和家人共享,Vaultwarden是最佳平衡,但你必须搞定备份。如果你在公司里用,别自建,直接买官方Bitwarden Teams,$3/人/月,省下的时间够你写十篇博客。开源软件给了我们选择,但选择的前提是认清代价。我现在的组合是:Vaultwarden做主库,KeePassXC做冷备份,每月1号手动导出一次。麻烦,但安心。

🏷️ 标签: