SSD Nodes Learn Hosting plans →
指南 Matt Connor作者: Matt Connor · 更新于 2026-08-26

Vaultwarden 与 Bitwarden 自托管怎么选

Bitwarden 标准版最低需要 2 GB RAM、约 12 个容器;Vaultwarden 用一个容器和 SQLite 提供相同客户端 API。了解 VPS 应选哪种方案。

Vaultwarden 和 Bitwarden 自托管实际上是什么

Vaultwarden 与 Bitwarden 自托管的区别,是两个使用相同客户端 API 的服务器之间的选择,而不是两个密码管理器之间的选择。Bitwarden 官方技术栈在 Nginx 后运行大约 12 个容器,将所有数据存储在 Microsoft SQL Server 中,并绑定到使用电子邮件地址注册的安装 ID。Vaultwarden 是使用 Rust 编写的 Bitwarden 客户端 API 非官方重新实现版本,以一个容器配合一个 SQLite 文件运行。您的浏览器扩展和手机无法区分两者,因为它们响应相同的端点。

无论选择哪一种, encryption 都相同。Bitwarden 客户端会在数据离开设备前加密密码库,因此服务器存储的是无法读取的数据块;在两种情况下,密码库格式都属于 Bitwarden。两者的区别在于所需租用的机器资源、代码维护者、需要付费的功能,以及需要备份的内容。

Vaultwarden 的 README 直接说明了其定位:“此项目与 Bitwarden 或 Bitwarden, Inc. 没有关联。”这是一个志愿者项目,没有支持服务,也不提供担保。一名活跃维护者在 Bitwarden 工作,并利用个人时间参与贡献;这属于个人善意,不代表官方认可。

可安装的三种堆栈

许多比较忽略了 Bitwarden 提供两种不同的自托管产品。

Bitwarden 标准版。 这是由厂商提供的部署方式,通过 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 证书、数据库名称,以及安装 ID 和密钥。您需要输入电子邮件地址,从 https://bitwarden.com/host 获取这些信息。./bitwarden.sh start 随后会拉取镜像并启动整个堆栈。Bitwarden 文档将 2 GB RAM 和 12 GB 存储空间列为最低要求,将 4 GB RAM 和 25 GB 存储空间列为推荐配置,并要求使用 Docker Engine 26 或更高版本以及 Compose 插件。数据库使用 MSSQL Express 镜像。除非将部署指向外部数据库,否则该版本会将关系数据库容量限制为 10 GB。

Bitwarden lite。 这种部署方式以前称为 Bitwarden Unified。它于 2025 年 12 月结束 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。每个实例只有 1 个用户、一个小型密码库且没有附件,运行在配备 4 GB RAM 的 Ubuntu 24.04 主机上。磁盘占用包括镜像和首次成功启动后的数据目录。

ChartIdle memory, container count and disk, measured on one Ubuntu 24.04 box
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。如果同一台 VPS 还需要运行密码库以外的服务,请先确认其他服务的最低资源需求,再选择方案,因为PhotoPrism 或 Immich 等照片服务器所需的内存远高于 Vaultwarden。不过,并非所有相关服务都同样占用资源:例如将 Jellyfin 媒体库呈现为 90 年代录像带出租店的 Halcyon是一个浏览器前端,主要依赖其指向的媒体服务器,不会自行引入数据库。需要检查的最低配置不只有内存,因为用于远程桌面会话的 RustDesk 中继在 docker stats 中几乎不占内存,但会消耗方案的带宽配额。

Vaultwarden 中哪些付费功能可以免费使用?

运行 Bitwarden 服务器本身不收费,但付费功能在上传许可证文件前仍处于锁定状态。Premium 个人账户以及所有付费组织层级(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 保管库都可以连接到 Vaultwarden。在登录前,您需要在每个客户端的环境设置页面中填写自托管服务器 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+ 的客户端,必须进行此更新;请先更新,再报告相关问题。”截至 August 2026,当前版本为 1.37.1,发布日期为 29 July 2026。

养成两个习惯,就能避免这类问题变得复杂。固定使用具体的镜像标签,而不是 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.json
  • sends/

容器运行时,不要使用 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 将快照备份到异地存储,将其推送到当前主机之外。悄悄停止运行的备份任务,与从未存在过的备份任务看起来完全一样。因此,应让计时器将自身的失败报告到你能注意到的位置,这正是连接到 systemd OnFailure 单元的自托管 ntfy 服务器的用途。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,以及用于保存单个 vault 的 JSON 和文件附件的 .zip。卡片、身份信息、已保存的 passkey 和 SSH key 只有在 JSON 格式中才能保留,因此使用 CSV 迁移时,这些数据会被静默丢弃。任何导出格式都不包含回收站项目或 Sends,组织所有的数据也不属于个人导出内容。

明文导出文件应按实时密钥处理,因为它确实包含磁盘上的完整明文 vault。导出、导入并删除文件应在同一次操作中完成。不要通过电子邮件或聊天发送此文件。

迁移过程中有一个常见陷阱。与账户绑定的加密导出文件无法导入到其他账户,而迁移服务器必然意味着使用其他账户。请改用受密码保护的导出选项,因为这种格式可以跨账户迁移。

从 Vaultwarden 迁移到标准 Bitwarden 更复杂,因为组织结构不会包含在导出文件中。您需要在新服务器上重新创建组织,再次邀请用户,并由每位用户导入自己的 vault。请提前安排维护窗口,不要等到迁移当天才发现这一限制。

应运行哪个?

如果您是个人用户、家庭用户,或在 1 GB 或 2 GB VPS 上运行家庭实验室,请使用 Vaultwarden。组织、紧急访问和 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 不包含在任何导出格式中,组织拥有的项目也必须由所有者单独导出。因此,请计划在新服务器上重新创建组织并重新邀请用户。

#vaultwarden#bitwarden#password-manager#自托管#Docker