想把存在第三方云端的全家密码搬回自己手心,Vaultwarden 几乎是目前最舒服的自建选择。它是 Bitwarden 官方服务端的轻量级 Rust 重写版,界面、API 与官方各大平台的浏览器插件、桌面端和手机 App 100% 兼容;更绝的是它把原本官方沉重的一整套微服务压成了一个单容器,常驻内存仅需小几十 MB,一台几块钱的入门小鸡就能跑得飞快。

本教程基于 Vaultwarden 1.37.5 实测撰写(测试时间 2026-11-03,内置 Web Vault 2026.10.1,采用官方 Docker 镜像 vaultwarden/server)。在动手前先给你敲响最高警报:Vaultwarden 正式使用必须配置 HTTPS。由于现代浏览器对 Web Cryptography API 的安全限制,明文 HTTP 下你连主密码哈希都无法生成,直接卡死在注册登录环节(后文踩坑区会详拆),因此反代与域名是刚需。

成品长这样

跟着走完本教程,你会得到一个完全私有化的密码管理器,体验跟官方商业版毫无二致:

Vaultwarden 注册并登录后的空密码库界面
图 1:注册登录后的密码库主界面,接下来就能往里存第一条密码了

准备工作

开工前请确认你手头具备以下环境与资源:

  • Linux 服务器一台:架构不限(x86_64 或 ARM64 均可),内存 1 核 512MB 跑它都绰绰有余。
  • Docker 与 Docker Compose:已安装并能正常运行 docker compose 命令。
  • 一个解析好的域名 + HTTPS 环境:Nginx Proxy Manager、Caddy、Traefik 或宝塔面板皆可;如前文所说,新版网页端在非 HTTPS 下会直接弹红报错。
  • 防火墙放行端口:开放对外映射端口(本教程以宿主机 18084 为例,若用本机反代也可不向公网放行、仅监听 127.0.0.1)。

第一步:Docker Compose 部署

  1. 创建专属目录并编写配置文件

    登录服务器,找一个合适的位置(如 ~/vaultwarden)新建工作目录,并在其中创建 docker-compose.yml:

    BASH
    mkdir -p ~/vaultwarden && cd ~/vaultwarden
    nano docker-compose.yml

    将以下编排文件粘贴进去并保存退出:

    BASH
    services:
      vaultwarden:
        image: vaultwarden/server:1.37.5
        container_name: vaultwarden
        restart: unless-stopped
        environment:
          - TZ=Asia/Shanghai
        volumes:
          - ./data:/data
        ports:
          - "18084:80"
  2. 拉取镜像并启动容器

    在同目录下执行后台启动命令:

    BASH
    docker compose up -d

    几秒钟镜像拉取解压完毕后,执行 docker ps 即可看到名为 vaultwarden 的容器处于 Up 状态。

  3. 基础连通性验活

    此时用浏览器访问 http://你的服务器IP:18084,若能顺利加载出蓝色的 Vaultwarden 登录页面,说明服务已完全拉起。

    千万注意:此步仅用来检验容器是否存活,请不要在当前的纯 HTTP 页面下尝试注册或点击提交!否则浏览器会直接报错。在正式录入密码库前,你必须先接好后续的 HTTPS 反向代理。
    关于数据持久化:宿主机上的 ./data 目录就是你的全部家当,密码库 SQLite 数据库(db.sqlite3)、附件以及服务端私钥(rsa_key.pem)全躺在里面。日后做异地容灾备份,只打包这个目录即可。

第二步:注册第一个账号

在动手注册前,必须先给你的服务套上 HTTPS。Vaultwarden 的网页端严重依赖浏览器的 Web Crypto API,如果在纯 HTTP 下打开,很多核心加密接口会被浏览器直接禁用。最省事的方案是在前面挂一个 Caddy 反向代理自动申请并续签证书,或者用你熟悉的 Nginx 配置 SSL 证书。

  1. 反代就绪后,在浏览器里打开你的站点域名,你首先会看到登录界面。第一次使用还没有账号,直接点击下方的 Create account 开始注册。

    Vaultwarden 登录页
    图 2:登录页,第一次来先点 Create account 注册
  2. 第一阶段需要你输入接收通知的邮箱以及显示名称(Name),核对无误后点击 Continue 继续。随后按照屏幕提示完成邮箱验证流程。

    Vaultwarden 注册页,填写邮箱与姓名
    图 3:注册第一步,填邮箱和姓名
  3. 验证通过后进入最关键的一步:设置主密码(Master Password)。

    重要警告:主密码是你解密整个密码库的唯一钥匙!Vaultwarden 采用端到端零知识加密体系,服务端只保存加盐哈希,没有任何后门。一旦主密码遗忘或丢失,所有数据都将彻底无法恢复,没有任何人能帮你找回,请务必手抄备份并妥善保存。
  4. 账号创建成功后,请立刻返回服务器修改你的 docker-compose.yml,在 environment 区域加上禁止新注册的环境变量并重启容器:

    BASH
    services:
      vaultwarden:
        environment:
          - SIGNUPS_ALLOWED=false

    执行 docker compose up -d 使其生效。

    安全提示:Vaultwarden 默认是完全公开注册的!如果你没加上这行,任何扫描到你服务器端口的人都能自由创建账号、把你的小鸡当成免费网盘用。晚关一天就多一份被人蹭号甚至塞垃圾数据的风险。

第三步:登录并存下第一条密码

现在回到登录页,输入刚刚注册的邮箱与主密码点击 Log in。首次进入控制台时,系统会先后弹出两个引导弹窗,按以下步骤快速跳过进入主页:

  1. 跳过客户端安装引导:系统会先提示你下载浏览器插件,如果你想先熟悉 Web 界面,点击 Add it later,随后再点 Skip to web app 跳过。

  2. 跳过新手导览:紧接着还会弹出一个功能介绍窗,直接点击右上角或底部的 Skip 关闭,此时你就能看到整洁的空密码库了。

  3. 添加第一条凭据:点击页面右上角醒目的 New item(或 Add),默认类型选择 Login。填入项目名称(如 GitHub)、登录用户名、登录密码以及对应的网站 URL,点击 Save 保存即可。

自建密码库最大的好处就是全平台通用:无论你在手机(iOS/Android)、PC 桌面端还是 Chrome/Firefox 扩展上使用官方 Bitwarden 客户端,只需在登录界面找到齿轮图标(设置服务器地址),把环境地址修改为你自己的域名,就能随时随地无缝同步这套私有密码库了。

踩坑实录

新版网页端强制 HTTPS
Web Vault 2026.10.1 起安全机制进一步收紧,在非安全上下文(纯 HTTP 访问)下进行注册或登录都会直接报错 Insecure URL not allowed,前端甚至拒绝向后端拉取配置。局域网环境切勿直接裸跑 IP,自签证书或前置反代 HTTPS 必须先行搞定。

老注册接口已被彻底移除
网上流传的许多老脚本通过 POST /api/accounts/register 实现自动化批量注册,但在 1.37.x 及配套 Web 客户端中该接口已返 404。新版已全面重构为「发送邮箱验证码/令牌校验」搭配「finish 最终提交」的两段式流程,历史自动化脚本切勿生搬硬套。

ROCKET_TLS 写进 shell 别裸奔
如果你尝试直接在命令行环境变量里写内建 TLS 参数:ROCKET_TLS={certs="...",key="..."},千万注意别裸奔敲回车。Bash 会把花括号当作 Brace Expansion 展开语法拆成两截传参,导致 Rocket 框架启动解析失败直接 panic 崩溃。若要配置,务必给整串加上强引用单引号,或者直接老老实实写在 docker-compose.yml 的 environment 列表中最为稳妥。

拉取镜像别打错注册表主机名
编写无 Docker 运行脚本或直连 Registry 提取层文件时,Docker Hub 官方 Registry V2 的 API 域名是 registry-1.docker.io。如果误把请求发给根域名 docker.io,服务端只会返回官方网站的展示 HTML 页面,导致解析 manifest 阶段全盘报错。

升级与备份

Vaultwarden 本身架构非常精简,所有应用状态与核心数据都默认保存在宿主机映射的 data 目录内。日常运维重点关注以下两项:

  • 版本升级:修改 compose 文件中的镜像标签(如切到最新版本),依次执行拉取与后台重建命令即可:

    BASH
    docker compose pull
    docker compose up -d

    容器启动时会自动检测 SQLite 数据库架构版本,无缝执行 migration 迁移操作,业务完全无感。

  • 停服冷备份:为了防止热备份过程中发生 SQLite 锁库或事务写入损坏,推荐先停止容器,再将整个数据目录打包归档:

    BASH
    docker compose down
    tar -czvf vaultwarden_backup_$(date +%F).tar.gz data/
    docker compose up -d
    备份重点:数据目录中的 db.sqlite3 与 rsa_key.pem 必须严格成套保存!rsa_key.pem 用于解密内部凭据和签发客户端 Session Token,如果迁移时遗漏了它,即便数据库完好,所有已登录的客户端也都会全部鉴权失效、被强制登出。
  • 换机恢复:新机器安装好 Docker 环境后,将备份压缩包解压回对应目录,重新挂载到容器的 /data 路径启动,原有的所有账号、密码及加密附件即可立刻满血复活。