Vaultwarden 与 Bitwarden 自托管服务器怎么选
Bitwarden standard 至少需要 2 GB 内存、约 12 个容器;Vaultwarden 用一个容器和 SQLite 提供兼容 API。了解 standard、lite 与 Vaultwarden 的资源、功能和维护差异。
Vaultwarden 和 Bitwarden 自托管版本的实际含义
Vaultwarden 与 Bitwarden 自托管版本的区别,是在两个使用相同客户端 API 的服务器之间做选择,而不是在两个密码管理器之间做选择。Bitwarden 官方技术栈在 nginx 后运行约 12 个容器,将所有数据存储在 Microsoft SQL Server 中,并绑定到通过电子邮件地址注册的安装 ID。Vaultwarden 是 Bitwarden 客户端 API 的非官方重新实现,使用 Rust 编写,以一个容器配合一个 SQLite 文件运行。浏览器扩展和手机无法区分两者,因为它们都响应相同的端点。
两者使用完全相同的加密方式。Bitwarden 客户端会在数据离开设备前加密密码库,因此服务器保存的是无法读取的密文数据块;两种方案使用的密码库格式也都属于 Bitwarden。不同之处在于所需的服务器资源、代码维护者、需要付费的功能,以及需要备份的数据。
Vaultwarden 的 README 直接说明了其项目状态:“此项目与 Bitwarden 或 Bitwarden, Inc. 没有关联。”这是一个志愿者项目,没有技术支持台,也不提供保证。一名活跃维护者在 Bitwarden 工作,并利用个人时间参与贡献;这表示其个人支持,不代表 Bitwarden 的认可。
可安装的三个堆栈
多数对比都忽略了这一点:Bitwarden 提供两种不同的自托管产品。
Bitwarden standard。 由厂商提供的部署方式,通过 shell 脚本驱动。
curl -Lso bitwarden.sh "https://func.bitwarden.com/api/dl/?app=self-host&platform=linux" \
&& chmod 700 bitwarden.sh
./bitwarden.sh install安装程序会询问您的域名、是否申请 Let's Encrypt 证书、数据库名称,以及您通过在 https://bitwarden.com/host 中输入电子邮件地址获取的 installation ID 和 key。./bitwarden.sh start 随后会拉取镜像并启动整个堆栈。Bitwarden 将 2 GB RAM 和 12 GB 存储空间列为最低要求,将 4 GB RAM 和 25 GB 存储空间列为推荐配置,并要求使用 Docker Engine 26 或更高版本及 Compose plugin。数据库使用 MSSQL Express 镜像;除非将部署指向外部数据库,否则该版本会将关系数据库限制为 10 GB。
Bitwarden lite。 该部署方式过去称为 Bitwarden Unified。它于 December 2025 结束 beta 阶段并更名。它由一个应用容器和一个由您选择的数据库组成:
services:
bitwarden:
depends_on:
- db
env_file:
- settings.env
image: ghcr.io/bitwarden/lite
restart: always
ports:
- "80:8080"
volumes:
- bitwarden:/etc/bitwarden
db:
environment:
MARIADB_USER: "bitwarden"
MARIADB_PASSWORD: "super_strong_password"
MARIADB_DATABASE: "bitwarden_vault"
MARIADB_RANDOM_ROOT_PASSWORD: "true"
image: mariadb:10
restart: always
volumes:
- data:/var/lib/mysql
volumes:
bitwarden:
data:它支持 MariaDB 或 MySQL、PostgreSQL、SQLite 和 MSSQL,并要求 200 MB RAM 和 1 GB 存储空间。Bitwarden 自己的文档说明了两点注意事项。该版本面向个人使用和家庭实验室,而不是商业用途;它不会自动备份数据库,因此备份工作完全由您负责。
Vaultwarden。 只有一个容器,直接使用项目 README 中的配置:
docker run --detach --name vaultwarden \
--env DOMAIN="https://vw.domain.tld" \
--volume /vw-data/:/data/ \
--restart unless-stopped \
--publish 127.0.0.1:8000:80 \
vaultwarden/server:latest发布配置仅将 8000 端口绑定到 loopback,这样设置是有意为之的。Vaultwarden 提供明文 HTTP,并要求前置反向代理终止 TLS(传输层安全)。这里 TLS 不是可选项:Web vault 使用浏览器的 WebCrypto API 进行加密,而浏览器仅在安全上下文中提供该 API。因此,通过明文 http 访问时,登录页面会在浏览器中失败,服务器甚至还未收到请求。完整的 Vaultwarden 安装指南介绍了代理和证书配置。
Vaultwarden 与自托管 Bitwarden 一起运行需要多少 RAM?
供应商给出的最低配置说明的是安装程序拒绝运行的配置,而不是软件实际占用的资源。下表数据来自空闲状态下的 docker stats --no-stream 安装环境。每个环境只有一个用户、一个小型密码库且不含附件,运行在配备 4 GB RAM 的 Ubuntu 24.04 主机上。磁盘占用包括首次成功启动后的镜像和数据目录。
The data behind this chart
[
{
"label": "Vaultwarden (SQLite)",
"idle_ram_mb": 58,
"containers": 1,
"disk_gb": 0.4
},
{
"label": "Bitwarden lite + MariaDB",
"idle_ram_mb": 470,
"containers": 2,
"disk_gb": 1.6
},
{
"label": "Bitwarden standard (MSSQL)",
"idle_ram_mb": "2,400",
"containers": 12,
"disk_gb": 6.5
}
]Vaultwarden 在单个容器中空闲时占用 58 MB。标准 Bitwarden 堆栈在 12 个容器中空闲时占用约 2,400 MB,其中大部分由 MSSQL 容器占用。Bitwarden lite 与其 MariaDB 容器合计占用 470 MB,介于两者之间。在确认这些数值前,请在自己的主机上运行相同的命令,因为实际占用会随用户数量、附件和同步流量变化,而且 MSSQL 运行时间越长,其工作集通常越大。
对于小型 VPS,实际可按以下方式选择:使用 SQLite 的 Vaultwarden 在 1 GB 配置上可以稳定运行,而标准 Bitwarden 堆栈无法在该配置上启动。2 GB 配置达到标准堆栈记录的最低要求,但留给操作系统的内存很少,因此内核内存不足终止程序机制可能会被触发。触发后,dmesg 会输出一行,显示被终止的进程名称;在此堆栈中,通常是 sqlservr。标准部署建议使用 4 GB。
Vaultwarden 中哪些付费功能是免费的?
运行 Bitwarden 服务器不需要付费,但付费功能在上传许可证文件前仍处于锁定状态。个人高级账户以及所有付费组织层级(Families、Teams、Enterprise)都需要许可证。个人账户可从云端 Web 保管库中依次进入 Settings 和 Subscription 下载许可证;组织账户则从 Admin Console 中依次进入 Billing 和 Subscription 下载,然后将许可证上传到您自己的实例。组织许可证与存储在 ./bwdata/env/global.override.env 中的安装 ID 绑定。因此,自托管组织仍然持有付费订阅,并且仍会访问 Bitwarden 云端以处理计费。
Vaultwarden 无需许可证或订阅即可启用相同功能。项目 wiki 列出了这些功能:
- 组织、集合和组
- 文件附件
- 使用电子邮件、Duo、YubiKey 和 FIDO2 的两步登录
- Emergency Access
- Bitwarden Send
- 个人 API 密钥
- 通过 OpenID Connect 实现的 SSO
SSO 是这些功能中最新的一项,通过 SSO_ENABLED、SSO_AUTHORITY、SSO_CLIENT_ID 和 SSO_CLIENT_SECRET 进行配置。它只负责验证登录身份。wiki 明确说明,仍然需要主密码,且身份提供商无法控制该密码,因为该密码会派生出用于解密保管库的密钥。将 SSO_AUTHORITY 指向 自托管的 Authentik 身份提供商的发现端点,然后用户可在那里登录,再使用主密码解锁。该值必须与发现端点返回的 issuer 字段匹配,但末尾不能包含 /.well-known/openid-configuration 后缀。
Vaultwarden 无法提供的是厂商支持。Bitwarden 通过了 SOC 2 Type 2 和 ISO 27001 认证,发布第三方审计报告,并运行私有 HackerOne 漏洞赏金计划。这些保障针对的是 Bitwarden 的代码和服务,而不是您安装的服务器。不过,如果审计人员要求密码管理器背后有明确的供应商,志愿者维护的重新实现项目会很难满足这一要求。
官方 Bitwarden 应用是否支持 Vaultwarden?
支持。Vaultwarden 实现了客户端 API,因此浏览器扩展、桌面应用、移动应用以及内置 Web 密库都可以连接到它。登录前,应在每个客户端的环境设置页面中填写自托管服务器 URL,而不是登录后再设置。
有一项功能需要额外配置:向移动应用发送推送通知。没有推送通知时,应用只会在打开时或按照自身计时器同步。因此,您在笔记本电脑上修改密码后,手机上的内容要等您打开应用才会更新。Vaultwarden 可以使用 Bitwarden 的推送中继,但需要从官方安装程序使用的同一个 https://bitwarden.com/host 页面获取安装 ID 和密钥。
PUSH_ENABLED=true
PUSH_INSTALLATION_ID=<your installation id>
PUSH_INSTALLATION_KEY=<your installation key>EU 区域的服务器还需要 PUSH_RELAY_URI=https://api.bitwarden.eu 和 PUSH_IDENTITY_URI=https://identity.bitwarden.eu。在开始长时间排查之前,您需要了解 wiki 中记录的两个常见问题。从 F-Droid 或 Neo Store 安装的应用不支持 Firebase,无论服务器如何配置,都不会收到推送通知。在 Vaultwarden 1.30.2 之前连接过的应用,必须清除应用数据,以便重新注册推送令牌。
重新实现有多安全?
Bitwarden 的审计历史悠久且公开。Cure53 在 2018、2021、2022 和 2023 年对其进行了审查。IOActive 和 Mandiant 在 2024 年审查了客户端,Fracture Labs 在 2024 和 2025 年覆盖了 Web 和网络评估,Unit 42 在 2025 年评估了移动应用,ETH Zurich Applied Cryptography Group 在 2025 年审查了密码学实现。
Vaultwarden 也接受过外部审查,这会让那些以为没人检查它的人感到意外。德国联邦信息安全办公室(BSI)委托 mgm security partners 在 2024 年 2 月至 5 月期间,根据 Caos 3.0 代码分析项目对其进行了测试;该审查将两项发现评为高危。除此之外,ERNW 报告了一个影响低于 1.32.5 版本的身份验证绕过漏洞(CVE-2024-55225),该漏洞已于 2024 年 11 月修复。2026 年 7 月发布的 1.37.0 版本修复了通过图标端点进行的 SSRF(服务器端请求伪造)、跨组织密码访问,以及目录导入时绕过组织策略的问题。
这些历史表明,该项目具备正常运行的信息披露流程。它们也指出了反复出现的攻击面:管理页面。因此,应将该页面视为敏感功能。除非设置了 ADMIN_TOKEN,否则它处于禁用状态;您还应存储哈希,而不是明文令牌。
docker run --rm -it vaultwarden/server /vaultwarden hash该命令会输出 Argon2 PHC 字符串(密码哈希竞赛格式),将其粘贴到 ADMIN_TOKEN 中。在启用管理页面之前先启用 HTTPS,因为令牌会随请求发送;如果通过未加密的 HTTP 连接传输明文令牌,路径上的任何设备都可以读取它。尽可能不要让 /admin 暴露在公网,并结合常规的主机加固措施,例如限制服务器上的 SSH 访问。
官方 API 变更时会出现哪些故障
这是人们容易低估的风险。Bitwarden 发布客户端,这些客户端会在夜间通过应用商店自动更新。Vaultwarden 必须跟进。当客户端版本更新改变 API 契约时,未升级的 Vaultwarden 会遇到已经迁移到新 API 的客户端,未操作过的设备也可能开始登录失败或无法同步。
发行说明中有一个具体示例。Vaultwarden 1.37.0 写道:“要支持版本为 2026.7.0+ 的客户端,必须安装此更新;在报告相关问题前,请先更新。”截至 2026 年 8 月,当前版本是 1.37.1,发布于 2026 年 7 月 29 日。
养成两个习惯即可避免大多数问题。固定使用具体的镜像标签,而不是 latest,这样无人值守的拉取操作不会在凌晨 3 点自动更新服务器。然后监控版本发布源,并先阅读发行说明,再有计划地升级,因为破坏性变更会在其中说明,其他地方通常不会记录。例如,版本 1.35.5 在升级时会使所有现有的双因素认证“记住”令牌失效,从而将用户登出他们以为已经保存的登录步骤。
标准 Bitwarden 部署面临相反的问题。升级通过 ./bitwarden.sh updateself 和 ./bitwarden.sh update 执行,更新过程会应用数据库迁移。在迁移前创建的备份不能回滚迁移后的数据库架构,因此请创建备份,并记录创建备份时使用的版本。
备份:实际导致密码库丢失的环节
Vaultwarden 的数据目录就是服务器本身。请保留以下内容:
db.sqlite3- 所有
rsa_key*文件,包括rsa_key.pem和rsa_key.der attachments/config.jsonsends/
容器运行时,不要使用 cp 复制 db.sqlite3。SQLite 可能正在写入,因此复制结果可能是损坏的数据库。该数据库在恢复前看起来可能完全正常。请改用在线备份 API:
sqlite3 data/db.sqlite3 ".backup '/path/to/backups/db-$(date '+%Y%m%d-%H%M').sqlite3'"从 1.32.1 开始,镜像中还内置了 /vaultwarden backup 命令。无论采用哪种方式,快照在移动之前仍与原始数据位于同一磁盘上。因此,应按计划使用 restic 快照备份到异地存储 将其复制到服务器之外。rsa_key 文件与数据库同样重要:服务器使用其中的密钥签发会话令牌。因此,如果在新生成的密钥旁恢复数据库,所有用户都会被注销,正在处理中的组织邀请也会失效。
Bitwarden 标准版会备份更多自身数据。只要 mssql 容器正在运行,它就会将每夜的数据库备份写入 ./bwdata/mssql/backups,并保留 30 天。也可以手动强制执行一次备份:
docker exec -i bitwarden-mssql /backup-db.sh需要保留的目录包括 ./bwdata/env(环境变量,其中包含数据库和证书密码)、./bwdata/core/attachments、./bwdata/mssql/data 和 ./bwdata/core/aspnet-dataprotection。最后一个目录最容易被忽略。它包含框架级数据保护材料,包括身份验证令牌和部分数据库列。因此,若只恢复数据库而不恢复该目录,其中受保护的列将无法读取。Bitwarden lite 完全不会自动备份,因此选择 lite 就意味着必须像使用 Vaultwarden 一样自行制定数据库导出计划。
向任一方向迁移
迁移通过客户端完成,而不是服务器,因为导出和导入属于客户端功能。因此,两个方向的操作步骤相同。
每位用户从 Web vault 或桌面应用导出,在新服务器上创建账户,然后执行导入。可用格式包括明文 .json、明文 .csv、加密 .json,以及用于保存 JSON 和单个 vault 文件附件的 .zip。卡片、身份信息、已保存的 passkey 和 SSH key 只有在 JSON 格式中才能保留,因此使用 CSV 迁移会静默丢失这些数据。任何导出格式都不包含回收站项目或 Sends,组织所有的数据也不会包含在个人导出中。
将明文导出视为实时密钥,因为它确实是这样:整个 vault 以明文形式保存在磁盘上。应在同一时段完成导出、导入和删除。绝不要通过电子邮件或聊天发送明文导出文件。
迁移过程中有一个常见陷阱。与账户绑定的加密导出无法导入到其他账户,而迁移服务器必然意味着使用不同的账户。请选择受密码保护的导出选项,因为这种格式可以移植。
从 Vaultwarden 迁移到 Bitwarden standard 更复杂,因为组织结构不会随导出文件迁移。您需要在新服务器上重新创建组织,再次邀请用户,然后由每位用户导入自己的 vault。请提前安排维护窗口,不要等到迁移当天才发现这一点。
应该运行哪个?
如果您是个人、家庭用户,或在 1 GB 或 2 GB VPS 上运行家庭实验室,请运行 Vaultwarden。Organizations、Emergency Access 和 Send 均免费提供,空闲内存开销大约相当于一个浏览器标签页,备份只需保存一个 SQLite 文件和一个小型目录。这种组合正是它在自托管密码管理方案中占主导地位的原因。
如果其他人依赖该服务开展专业工作,请运行 Bitwarden 自有服务器:例如,公司需要支持合同,合规要求指定供应商,或者您已经为企业功能付费。标准部署应分配 4 GB 内存,并将许可证文件和安装 ID 视为部署的一部分,而不是文档手续。
Bitwarden lite 处于一个尴尬的位置。它使用供应商代码,但资源占用仅为完整版本的一小部分,这确实很有吸引力。不过,Bitwarden 将其定位为个人和家庭实验室使用,而且不提供自动备份。您需要承担 Vaultwarden 的运维负担,却无法获得 Vaultwarden 的免费功能集。如果供应商代码对您的重要性高于功能,并且您愿意自行运行数据库,可以选择它。
如果您还在决定这台服务器将托管哪些其他服务,请参阅更广泛的自托管服务清单,其中会将这个选择与其他争用相同内存资源的服务进行比较。
FAQ
Vaultwarden 足够安全,可以作为真正的密码管理器吗?
对于个人和家庭使用,在满足一定条件时可以。客户端会在密码库到达服务器前完成加密,因此 Vaultwarden 永远无法看到您的主密码或任何明文数据。它经过外部审查:BSI 委托 mgm security partners 在 2024 年 2 月至 5 月期间对其进行测试,ERNW 报告了一个已在 1.32.5 中修复的身份验证绕过漏洞。请保持版本为最新版本,禁用管理页面,或使用 Argon2 哈希保护的 ADMIN_TOKEN,并且仅通过 HTTPS 提供服务。需要供应商支持或审计文档的企业应运行 Bitwarden 官方服务器。
与自托管 Bitwarden 相比,Vaultwarden 需要多少 RAM?
在使用 docker stats --no-stream 测量的空闲安装中,使用 SQLite 的 Vaultwarden 在一个容器中占用约 58 MB,而 Bitwarden 的标准部署在 12 个容器中占用约 2,400 MB,其中大部分用于 MSSQL 数据库。Bitwarden 文档将 2 GB 列为标准堆栈的最低内存,将 4 GB 列为推荐内存,并将 Bitwarden lite 的内存要求列为 200 MB。Vaultwarden 可在 1 GB VPS 上运行,并且仍有充足余量。
自托管需要 Bitwarden 许可证吗?
免费个人密码库不需要。运行服务器本身是免费的。要解锁个人高级功能以及任何付费组织计划,必须使用许可证文件;这些计划包括 Families、Teams 和 Enterprise。您可以从云端 Web 密码库下载许可证文件,然后上传到您的实例。组织许可证根据存储在 ./bwdata/env/global.override.env 中的安装 ID 签发。Vaultwarden 不需要许可证,并会自行启用组织功能。
以后可以从 Vaultwarden 迁移到 Bitwarden,或迁回去吗?
可以,两个方向都可以通过客户端完成。每位用户都应从 Web 密码库或桌面应用导出自己的密码库,在新服务器上创建账户后,再将其导入。.zip 导出格式会包含个人密码库的附件,JSON 格式会包含卡片、身份信息、通行密钥和 SSH 密钥。回收站项目和 Sends 不包含在任何导出格式中。组织拥有的项目必须由所有者单独导出。因此,请计划在新服务器上重新创建组织并重新邀请用户。