想把存在第三方云端的全家密码搬回自己手心,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 下你连主密码哈希都无法生成,直接卡死在注册登录环节(后文踩坑区会详拆),因此反代与域名是刚需。
成品长这样
跟着走完本教程,你会得到一个完全私有化的密码管理器,体验跟官方商业版毫无二致:

准备工作
开工前请确认你手头具备以下环境与资源:
- 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 部署
-
创建专属目录并编写配置文件
登录服务器,找一个合适的位置(如
~/vaultwarden)新建工作目录,并在其中创建docker-compose.yml:mkdir -p ~/vaultwarden && cd ~/vaultwarden nano docker-compose.yml
将以下编排文件粘贴进去并保存退出:
services: vaultwarden: image: vaultwarden/server:1.37.5 container_name: vaultwarden restart: unless-stopped environment: - TZ=Asia/Shanghai volumes: - ./data:/data ports: - "18084:80" -
拉取镜像并启动容器
在同目录下执行后台启动命令:
docker compose up -d
几秒钟镜像拉取解压完毕后,执行
docker ps即可看到名为vaultwarden的容器处于Up状态。 -
基础连通性验活
此时用浏览器访问
http://你的服务器IP:18084,若能顺利加载出蓝色的 Vaultwarden 登录页面,说明服务已完全拉起。千万注意:此步仅用来检验容器是否存活,请不要在当前的纯 HTTP 页面下尝试注册或点击提交!否则浏览器会直接报错。在正式录入密码库前,你必须先接好后续的 HTTPS 反向代理。关于数据持久化:宿主机上的./data目录就是你的全部家当,密码库 SQLite 数据库(db.sqlite3)、附件以及服务端私钥(rsa_key.pem)全躺在里面。日后做异地容灾备份,只打包这个目录即可。
第二步:注册第一个账号
在动手注册前,必须先给你的服务套上 HTTPS。Vaultwarden 的网页端严重依赖浏览器的 Web Crypto API,如果在纯 HTTP 下打开,很多核心加密接口会被浏览器直接禁用。最省事的方案是在前面挂一个 Caddy 反向代理自动申请并续签证书,或者用你熟悉的 Nginx 配置 SSL 证书。
-
反代就绪后,在浏览器里打开你的站点域名,你首先会看到登录界面。第一次使用还没有账号,直接点击下方的 Create account 开始注册。

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

图 3:注册第一步,填邮箱和姓名 -
验证通过后进入最关键的一步:设置主密码(Master Password)。
重要警告:主密码是你解密整个密码库的唯一钥匙!Vaultwarden 采用端到端零知识加密体系,服务端只保存加盐哈希,没有任何后门。一旦主密码遗忘或丢失,所有数据都将彻底无法恢复,没有任何人能帮你找回,请务必手抄备份并妥善保存。 -
账号创建成功后,请立刻返回服务器修改你的
docker-compose.yml,在environment区域加上禁止新注册的环境变量并重启容器:services: vaultwarden: environment: - SIGNUPS_ALLOWED=false执行
docker compose up -d使其生效。安全提示:Vaultwarden 默认是完全公开注册的!如果你没加上这行,任何扫描到你服务器端口的人都能自由创建账号、把你的小鸡当成免费网盘用。晚关一天就多一份被人蹭号甚至塞垃圾数据的风险。
第三步:登录并存下第一条密码
现在回到登录页,输入刚刚注册的邮箱与主密码点击 Log in。首次进入控制台时,系统会先后弹出两个引导弹窗,按以下步骤快速跳过进入主页:
-
跳过客户端安装引导:系统会先提示你下载浏览器插件,如果你想先熟悉 Web 界面,点击 Add it later,随后再点 Skip to web app 跳过。
-
跳过新手导览:紧接着还会弹出一个功能介绍窗,直接点击右上角或底部的 Skip 关闭,此时你就能看到整洁的空密码库了。
-
添加第一条凭据:点击页面右上角醒目的 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 文件中的镜像标签(如切到最新版本),依次执行拉取与后台重建命令即可:
docker compose pull docker compose up -d容器启动时会自动检测 SQLite 数据库架构版本,无缝执行 migration 迁移操作,业务完全无感。
-
停服冷备份:为了防止热备份过程中发生 SQLite 锁库或事务写入损坏,推荐先停止容器,再将整个数据目录打包归档:
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路径启动,原有的所有账号、密码及加密附件即可立刻满血复活。