Vaultwarden 项目部署

举报
yd_229065422 发表于 2026/11/07 19:52:59 2026/11/07
【摘要】 项目定位:用 Rust 编写的轻量级 Bitwarden 兼容服务端(前身为 bitwarden_rs),可自托管密码管理器,兼容官方 Bitwarden 的网页、浏览器扩展、桌面和手机客户端。开源协议:AGPL-3.0声明:Vaultwarden 是第三方非官方项目,与 Bitwarden 公司无隶属关系。文档依据:项目仓库说明与官方 Wiki(2026 年 11 月),具体参数以官方最新...

项目定位:用 Rust 编写的轻量级 Bitwarden 兼容服务端(前身为 bitwarden_rs),可自托管密码管理器,兼容官方 Bitwarden 的网页、浏览器扩展、桌面和手机客户端。
开源协议:AGPL-3.0
声明:Vaultwarden 是第三方非官方项目,与 Bitwarden 公司无隶属关系。
文档依据:项目仓库说明与官方 Wiki(2026 年 11 月),具体参数以官方最新文档为准。

重要提醒:密码库是最敏感的数据。部署前先想清楚三件事:必须启用 HTTPS、必须做异地备份、必须关闭开放注册。


一、功能与特点

类别 说明
兼容性 基本实现完整的 Bitwarden API,可直接使用官方各端客户端
资源占用 内存占用很低(通常百兆以内),树莓派、小型 VPS 都能跑
核心功能 密码库、文件夹、附件、Send(临时分享)、组织与集合、TOTP 二步验证码存储
登录安全 支持 TOTP、WebAuthn / FIDO2、YubiKey OTP 等二步验证
管理后台 内置管理页面,可管理用户、邀请、查看配置
数据库 默认 SQLite,也可选 MySQL / MariaDB / PostgreSQL
内置网页端 镜像内已打包修改版 Web Vault,无需另装

二、部署前准备

2.1 环境要求

  • 一台 Linux 服务器(VPS、家用服务器、NAS 均可)
  • Docker Engine 与 Docker Compose 插件
  • 一个域名,并解析到服务器公网 IP(公网使用时)
  • 放行 80 与 443 端口(使用反向代理自动签发证书时)
  • 个人使用建议 512MB 以上内存,1 核 CPU 即可

2.2 为什么必须 HTTPS

Bitwarden 的网页端和多数客户端依赖浏览器的加密接口,该接口只在安全上下文(HTTPS 或本机 localhost)下可用。用 HTTP 通过 IP 访问时,网页端无法正常创建账号或登录。 因此:

  • 局域网测试:可以用 localhost 访问
  • 正式使用:必须配置域名 + HTTPS(反向代理)

三、Docker Compose 部署(推荐)

3.1 创建目录

mkdir -p ~/vaultwarden/vw-data
cd ~/vaultwarden

3.2 生成管理后台令牌(强烈建议使用哈希)

管理后台由 ADMIN_TOKEN 保护。不要使用明文弱密码,也不要留空(留空等于禁用后台)。 推荐生成 Argon2 哈希:

# 先临时拉起镜像,在容器内生成哈希(按提示输入两次你自己的强密码)
docker run --rm -it vaultwarden/server:latest /vaultwarden hash

命令会输出形如 $argon2id$v=19$m=65540,t=3,p=4$... 的字符串。把它写入 Compose 时,每个美元符号 $ 要写成两个 $$,否则 Docker Compose 会把它当成变量引用而报错。

也可以把令牌放进 .env 文件,由 Compose 引用,减少转义混乱。

3.3 编写 docker-compose.yml

下面是同时包含 Vaultwarden 与 Caddy 反向代理的完整示例,Caddy 会自动申请并续期证书:

services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: unless-stopped
    environment:
      DOMAIN: "https://你的域名"
      SIGNUPS_ALLOWED: "true"        # 创建完自己的账号后改为 false
      INVITATIONS_ALLOWED: "true"
      ADMIN_TOKEN: "$$argon2id$$v=19$$m=65540,t=3,p=4$$这里替换为你的哈希"
      TZ: "Asia/Shanghai"
    volumes:
      - ./vw-data:/data
    expose:
      - "80"

  caddy:
    image: caddy:2
    container_name: caddy
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile:ro
      - ./caddy-data:/data
      - ./caddy-config:/config
    depends_on:
      - vaultwarden

说明:

  • DOMAIN 必须填写你最终用于访问的完整地址,并以 https 开头,否则附件、邮件链接等功能会异常。
  • Vaultwarden 容器只在内部暴露 80 端口,不直接映射到公网,所有流量由 Caddy 接入。
  • 生产环境建议把镜像固定到具体版本号,升级时再手动修改,避免意外变更。

3.4 编写 Caddyfile

在同目录创建 Caddyfile:

你的域名 {
    encode zstd gzip
    reverse_proxy vaultwarden:80
}

近期版本的 Vaultwarden 已把实时通知(WebSocket)并入主端口,通常无需再单独代理额外端口。如使用较旧版本,请参照官方 Wiki 的代理示例补充。

3.5 启动

docker compose pull
docker compose up -d
docker compose logs -f

等待证书签发完成后,用浏览器访问你的域名,点击「创建账户」,注册第一个账号。


四、首次配置与安全加固

4.1 创建账号后立即关闭注册

注册好自己(和家人)的账号后,把 SIGNUPS_ALLOWED 改为 "false",然后重新应用:

docker compose up -d

之后新增用户请通过管理后台邀请,避免陌生人注册。

4.2 管理后台

访问「你的域名/admin」,使用你设置 ADMIN_TOKEN 时输入的原始密码登录(不是哈希串)。后台可以:

  • 查看和管理用户、邀请新用户
  • 在线修改部分配置,并测试邮件发送
  • 查看诊断信息

建议:

  • 管理后台若不常用,可在不需要时清空 ADMIN_TOKEN 来禁用。
  • 也可以在反向代理层对 /admin 路径做 IP 白名单限制。

4.3 开启二步验证

在每个账号的安全设置中启用 TOTP 或硬件密钥(WebAuthn / FIDO2),并妥善保存恢复码。

4.4 配置邮件(SMTP)

邮件用于账号验证、邀请和部分提醒。在环境变量中添加:

      SMTP_HOST: "你的SMTP服务器"
      SMTP_FROM: "发件地址"
      SMTP_PORT: "587"
      SMTP_SECURITY: "starttls"
      SMTP_USERNAME: "SMTP账号"
      SMTP_PASSWORD: "SMTP密码"

不想自建邮件服务,可使用第三方事务邮件服务的 SMTP 中继。

4.5 其他建议的环境变量

变量 作用 建议
SIGNUPS_ALLOWED 是否允许开放注册 日常设为 false
INVITATIONS_ALLOWED 是否允许邀请 按需开启
SIGNUPS_DOMAINS_WHITELIST 限制可注册邮箱域名 团队使用时设置
SHOW_PASSWORD_HINT 是否在页面显示密码提示 建议关闭,避免泄露提示
LOG_FILE / LOG_LEVEL 日志输出 配合 fail2ban 使用
TZ 时区 设为本地时区

五、客户端接入

  1. 安装官方 Bitwarden 的浏览器扩展、桌面端或手机应用。
  2. 在登录界面点击「自托管环境」之类的选项(不同客户端文字略有差异)。
  3. 在「服务器地址」中填入你的域名(以 https 开头),保存。
  4. 使用你在网页端注册的邮箱和主密码登录。

注意:

  • 主密码无法找回,遗忘后数据将无法解密,请妥善记忆并离线备份恢复信息。
  • 手机端的推送通知需要额外向官方申请推送密钥,不配置也能正常同步,只是实时性稍差。

六、备份与恢复(最关键)

6.1 需要备份的内容

位于 vw-data 目录:

路径 内容 是否必须
db.sqlite3 主数据库(使用 SQLite 时) 必须
attachments 目录 附件文件 使用附件时必须
sends 目录 Send 文件 使用 Send 时需要
rsa_key 开头的文件 令牌签名密钥 建议备份,否则恢复后所有客户端需重新登录
config.json 在后台修改的配置 建议备份

6.2 正确备份 SQLite

不要直接复制正在运行的数据库文件,可能得到损坏的副本。应使用 SQLite 自带的在线备份命令:

mkdir -p ~/vw-backup
sqlite3 ~/vaultwarden/vw-data/db.sqlite3 ".backup '$HOME/vw-backup/db-$(date +%F).sqlite3'"
tar czf ~/vw-backup/files-$(date +%F).tar.gz -C ~/vaultwarden/vw-data attachments sends config.json

若服务器没有 sqlite3 命令,请先安装,或停止容器后再整目录复制。

6.3 自动化与异地

  • 用 cron 每天执行一次备份脚本,并保留最近若干份。
  • 备份文件同步到异地(另一台机器、对象存储等),并对备份文件加密,因为它包含密码库密文数据。
  • 遵循 3-2-1 原则:3 份副本、2 种介质、1 份异地。
  • 每隔一段时间做一次恢复演练,确认备份真的可用。

6.4 恢复步骤

  1. 停止容器:docker compose down
  2. 把备份的数据库、附件等文件放回 vw-data 目录
  3. 启动:docker compose up -d
  4. 登录验证数据是否完整

七、升级与维护

cd ~/vaultwarden

# 升级前先做一次备份,并查看发布说明
docker compose pull
docker compose up -d

# 清理旧镜像
docker image prune

建议:

  • 固定版本号,按需升级,而不是无脑追 latest。
  • 密码管理器涉及安全修复,应关注发布说明并及时升级。
  • 定期检查证书、磁盘空间与备份任务是否正常。

八、安全与运维建议

  1. 只暴露必要端口:容器不直接映射到公网,仅反向代理对外提供 443。
  2. 防暴力破解:结合日志与 fail2ban,封禁多次登录失败的 IP。
  3. 关闭开放注册:完成建号后立刻关闭。
  4. 保护管理后台:使用哈希令牌,必要时限制来源 IP 或平时禁用。
  5. 系统更新:保持系统与 Docker 版本更新,配置防火墙。
  6. 离线保存关键信息:主密码、二步验证恢复码、管理后台密码,在离线安全位置各留一份。
  7. 不要把唯一副本放在同一台机器上:服务器故障或被入侵时,异地备份是最后的保障。

九、常见问题排查

现象 可能原因 处理办法
网页端提示无法创建账户或加密相关错误 通过 HTTP 且非 localhost 访问 配置域名与 HTTPS
附件上传或邮件链接异常 DOMAIN 未配置或不是 https 地址 修正 DOMAIN 并重启
Compose 启动报变量相关错误 哈希令牌中的 $ 未转义 每个 $ 写成 $$
管理后台无法登录 误用哈希串登录,或令牌为空 使用原始密码;确认已设置令牌
证书签发失败 域名未解析或 80、443 端口未放行 检查解析与防火墙
手机端不实时同步 未配置推送 手动同步或按官方说明配置推送
邮件收不到 SMTP 配置错误,或邮件进垃圾箱 在后台测试发信,检查发信域名配置
恢复后所有设备被登出 没有备份 rsa_key 文件 重新登录即可,建议今后纳入备份

十、命令速查

# 启动 / 停止 / 重启
docker compose up -d
docker compose down
docker compose restart vaultwarden

# 查看日志
docker compose logs -f vaultwarden

# 生成管理令牌哈希
docker run --rm -it vaultwarden/server:latest /vaultwarden hash

# 升级
docker compose pull && docker compose up -d

# 在线备份 SQLite
sqlite3 vw-data/db.sqlite3 ".backup 'db-backup.sqlite3'"

附:项目关键信息

  • 项目名称:Vaultwarden(原 bitwarden_rs)
  • 仓库作者:dani-garcia
  • 主要语言:Rust
  • 协议:AGPL-3.0
  • 镜像名称:vaultwarden/server
  • 容器内数据目录:/data
  • 容器内服务端口:80
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。