写在前面
之前一直用 Nextcloud 插件中的 Passwords 应用管理密码,但 Nextcloud 本身太重了——光是 PHP + 数据库 + Redis + 定时任务,要流畅的跑起来内存就要大几百 MB。后来想找个轻量的替代品,调研了 Vaultwarden、Bitwarden 官方服务端、1Password,最终选择了 Vaultwarden。记录一下对比心得。
为什么要换掉 Nextcloud Passwords
Nextcloud Passwords 的痛点:
| 问题 | 实际体验 |
|---|---|
| 耦合太深 | 必须跑完整 Nextcloud,PHP-FPM + MySQL/PostgreSQL + Redis + Cron |
| 资源占用高 | 空闲内存 500MB+,CPU 偶尔飙升(php-fpm84占满) |
| 维护麻烦 | 版本升级经常插件不兼容,日志满屏报错 |
| 单点故障 | Nextcloud 挂了,密码也访问不了 |
核心需求:
- 自托管,数据完全掌握在自己手里
- 免费开源,无订阅绑定
- 资源占用低,单容器跑起来,内存 < 50MB
- Android / iOS / 浏览器 / 桌面端全平台原生客户端
- 支持 WebDAV / 文件附件 / TOTP / 组织共享 / 紧急访问
三大候选者横向对比
| 维度 | Vaultwarden | Bitwarden 官方 | 1Password |
|---|---|---|---|
| 定位 | Bitwarden 非官方兼容服务端,Rust 重写 | 官方 C# / .NET Core 实现,企业级定位 | 商业闭源 SaaS,主打用户体验 |
| 自托管 | 完全支持 | 支持(需安装密钥) | 不支持 |
| 数据完全本地 | SQLite 单文件/目录 | 但需 MSSQL 集群 | 云端存储 |
| 开源协议 | AGPL-3.0 | 源码可见非 OSI 协议 | 闭源 |
| 资源占用(内存) | 10-30 MB | 2-4 GB+ | N/A(客户端 ~100MB) |
| 容器数量 | 1 个 | 10+ 个 | N/A |
| 数据库 | SQLite | 仅 MSSQL | 专有 |
| 部署难度 | ⭐ 极简 | ⭐⭐⭐⭐ 复杂 | ⭐ 零运维(但非自托管) |
| 客户端生态 | 官方全平台客户端通用 | 官方全平台客户端 | 官方全平台客户端(最好用) |
| 核心功能完整度 | 95%+(含组织、TOTP、WebAuthn、Send、附件) | 100%(含企业级 SSO/SCIM/策略) | 100%(含共享、旅行模式、Watchtower) |
| 管理后台 | 内置简易 Admin 面板 | 完整管理控制台 | 云端管理控制台 |
| 备份迁移 | 直接拷贝 vw-data 目录 |
需备份 MSSQL + 多卷 | 云端导出 / CLI 导出 |
| 社区/文档 | Wiki 详尽、社区活跃 | 官方文档完善、企业支持 | 官方支持、社区一般 |
| 授权/费用 | 完全免费 | 个人免费(需注册密钥),企业功能收费 | 订阅制,无免费自托管 |
为什么最终选 Vaultwarden
1. 资源占用碾压级胜出
- Vaultwarden:单容器,Rust 编译二进制,空闲 ~15 MB 内存,CPU 几乎为 0
- Bitwarden 官方:10+ 容器,.NET Runtime + MSSQL + Redis,起步 2 GB 内存
- Nextcloud Passwords:依附 Nextcloud,500 MB+ 只是底座
2. 部署维护极其简单
# 一条命令拉起
docker run -d --name vaultwarden \
-e DOMAIN=https://vw.domain.com \
-v /opt/vaultwarden:/data \
-p 127.0.0.1:8000:80 \
--restart unless-stopped \
vaultwarden/server:latest
配个 Nginx 反代 + ACME 证书,5 分钟搞定。备份直接 tar czf vw-backup.tar.gz /opt/vaultwarden,迁移拷贝目录即可。
3. 客户端体验零妥协
关键点:Vaultwarden 兼容官方 Bitwarden 所有客户端。
| 平台 | 客户端来源 | 体验 |
|---|---|---|
| Android | Play Store / F-Droid / GitHub Release | 官方 App,指纹/面容解锁、自动填充、NFC YubiKey 全支持 |
| iOS | App Store | 官方 App,Face ID、自动填充、快捷指令集成 |
| 浏览器 | Chrome/Edge/Firefox/Safari 扩展商店 | 官方扩展,Ctrl+Shift+L 填充、右键菜单、TOTP 复制 |
| 桌面端 | 官网 / Microsoft Store / Snap / Flatpak | 官方 Electron App,系统托盘、全局快捷键 |
| CLI | bw 官方 CLI |
脚本自动化、CI/CD 注入密钥、SSH Agent 集成 |
这意味着:家人/团队成员完全不需要学习新软件,直接下载官方 Bitwarden App,填你的服务器地址登录即可。
4. 功能覆盖个人/家庭/小团队 99% 需求
- ✅ 多设备同步
- ✅ TOTP 两步验证码生成(替代 Authy/Google Authenticator)
- ✅ 附件存储(PDF、图片、SSH Key 等)
- ✅ 组织/集合/密码共享(家庭共享 Netflix、路由器密码)
- ✅ WebAuthn/FIDO2/YubiKey 硬件密钥
- ✅ 紧急访问(指定可信联系人紧急情况下查看保险库)
- ✅ Send(临时安全分享文本/文件,可设过期/密码/下载次数)
- ✅ 密码健康报告(重用、泄露、弱密码检测)
- ✅ 数据导入导出(LastPass、1Password、KeePass、CSV、JSON 等 20+ 格式)
5. 避坑 Nextcloud 那种“全家桶”耦合
- Vaultwarden 只做一件事:密码管理 API 服务
- 不捆绑文件同步、日历、联系人、办公套件、邮件客户端……
- 想加功能?用插件/集成(如 Authelia/Keycloak 做 SSO、rclone 备份到 S3),核心保持纯粹
迁移实操步骤
1. 从 Nextcloud Passwords 导出
Nextcloud Passwords → 设置 → 导出 → 预定义 (CSV) 格式

注意:Nextcloud Passwords 导出的 CSV格式与 Bitwarden 标准略有差异,修改CSV表头映射关系,其他字段可以删除了。
| Nextcloud Passwords 字段 | Vaultwarden 目标字段 |
|---|---|
| 标签 | name |
| 用户名 | login_username |
| 密码 | login_password |
| 链接 | login_uri |
| 分类名 | folder |
| 笔记 | notes |
| 标签名 | fields |
2. 部署 Vaultwarden
mkdir -p /opt/vaultwarden && cd /opt/vaultwarden
cat > docker-compose.yml <<'EOF'
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: unless-stopped
environment:
DOMAIN: "https://vw.yourdomain.com"
# SIGNUPS_ALLOWED: "false" # 关闭注册,仅邀请/管理员创建
# ADMIN_TOKEN: "openssl rand -base64 32"
# LOG_LEVEL: "info"
volumes:
- ./vw-data:/data
ports:
- "127.0.0.1:8000:80"
EOF
docker compose up -d
3. 配置反向代理 + HTTPS(以 Nginx 为例)
server {
listen 443 ssl http2;
server_name vw.yourdomain.com;
ssl_certificate /etc/letsencrypt/live/vw.yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/vw.yourdomain.com/privkey.pem;
client_max_body_size 128M;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# WebSocket 支持(实时同步、通知用)
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# 超时设置
proxy_read_timeout 300s;
proxy_send_timeout 300s;
}
# 静态资源缓存(Web Vault 打包的 JS/CSS/字体)
location /icons/ {
proxy_pass http://127.0.0.1:8000;
expires 30d;
add_header Cache-Control "public, immutable";
}
}
server {
listen 80;
server_name vw.yourdomain.com;
return 301 https://$server_name$request_uri;
}

4. 导入数据
- 打开
https://vw.yourdomain.com→ 注册账号 → 设置 → 工具 → 导入数据 → 选择 Bitwarden (csv) → 上传导出文件

5. 配置客户端
- Android和iOS设备下载官方 Vaultwarden App → 设置 → 服务器地址填
https://vw.yourdomain.com→ 登录

- 浏览器插件直接选 Bitwarden ,填写自托管主机,然后填写账号邮件和密码登录就可以了
避坑指南
| 坑 | 解决方案 |
|---|---|
| HTTPS 必须 | Web Crypto API 要求安全上下文,HTTP 下 Web Vault 无法解锁/加密,必须配反代 + 证书 |
| 首次加载慢 | Web Vault 打包 ~10 MB JS/WASM,首次需下载,配置 Nginx expires 30d + immutable 缓存静态资源 |
| 组织共享邀请收不到邮件 | 必须配置 SMTP_* 环境变量,或用管理面板手动创建用户再加入组织 |
| 数据库锁定/损坏 | SQLite 并发写入有限制,高并发场景建议改 MySQL/PostgreSQL(环境变量 DATABASE_URL 指定) |
| 备份别忘附件 | vw-data 目录下 attachments/、sends/、icon_cache/ 都要备份 |
| 版本升级 | docker compose pull && docker compose up -d,数据卷挂载在宿主机,升级无损 |
资源占用实测(我的环境)
| 服务 | 内存 | CPU | 磁盘 |
|---|---|---|---|
| Vaultwarden | 18 MB | 0.1% | 45 MB(含 200+ 条目、10 个附件) |
| Nginx (反代) | 8 MB | 0% | 2 MB |
| Nextcloud (对比) | 620 MB | 2-5% | 3.2 GB |
总结
| 场景 | 推荐 |
|---|---|
| 个人/家庭/小团队,自托管,要省资源 | Vaultwarden |
| 企业、需 SSO/SCIM/目录同步/合规审计 | Bitwarden 官方自托管(或云端企业版) |
| 不想折腾、愿付费、重体验、信任云端 | 1Password 云端订阅 |
| 已在跑 Nextcloud、不想加新服务 | Nextcloud Passwords(但建议迁出) |
一句话:Vaultwarden 是“把 Bitwarden 官方服务端的 95% 功能用 1/100 资源跑起来”的神奇实现。 如果你和我一样,受够了 Nextcloud 的臃肿,想把密码管理剥离出来,数据掌握在自己手里,又要全平台原生体验——直接上 Vaultwarden,别犹豫。
评论区