从零搭建 Vaultwarden:自托管 Bitwarden 的轻量方案(Docker + HTTPS)
写在前面:Vaultwarden 是什么,适合谁?
Vaultwarden 是 Bitwarden Server 的非官方实现(社区项目),主打资源占用低、部署简单,适合个人/小团队自托管密码库。与官方 Bitwarden Server 不同,Vaultwarden 是完全开源的,你可以在自己的服务器上运行它,而无需支付任何费用。
- 适合:个人密码管理、多端同步、家庭/小团队共享
- 不适合:强合规要求、需要官方企业功能/审计/支持的场景
1. 准备工作
1.1 你需要什么
- 一台服务器(本文以 Linux 为例,作者使用的系统是 Ubuntu 24.04 64 位)
- 一个域名(推荐)与可解析的 A/AAAA 记录(例如:
vw.example.com) - Docker 与 Docker Compose(推荐用 compose 插件)
1.2 端口规划
- 对外只暴露:
80/443(给反向代理) - Vaultwarden 容器内部常用端口:
80(HTTP 服务)
2. 部署方案选择
本文给两条常见路线:
- 最省心:Caddy 自动签发 HTTPS(快捷)
- 更可控:Nginx + 证书(Certbot 或你已有证书体系)
后文两种都给示例,你选其一即可。
3. 统一部署:先用 Docker 把 Vaultwarden 跑起来
不管你选择 Caddy 还是 Nginx,Vaultwarden 本体的部署都一样。核心思路是:
- Vaultwarden 容器只需要提供 HTTP 服务(容器内通常是
80) - 我们把它映射到宿主机的一个本地端口(例如
8443) - 对外只开放
80/443,由反向代理(Caddy/Nginx)负责 HTTPS 与转发
3.1 生成 Admin Token(强烈建议)
openssl rand -base64 48
把输出保存好,后面会用到 ADMIN_TOKEN。
3.2 启动 Vaultwarden
建议指定版本,不要用 latest,避免遇到不兼容导致的异常(例如某些版本组合下会出现 KDF config is required 之类的问题)。
docker run -d --restart always --name vaultwarden \
-e TZ=Asia/Shanghai \
-e LOG_FILE=/data/log/vaultwarden.log \
-e ADMIN_TOKEN=some_random_token \
-v /vaultwarden-data/:/data/ \
-p 8443:80 \
vaultwarden/server:1.35.2
或者
docker run -d --restart always --name vaultwarden -e TZ=Asia/Shanghai -e LOG_FILE=/data/log/vaultwarden.log -e ADMIN_TOKEN=some_random_token -v /vaultwarden-data/:/data/ -p 8443:80 vaultwarden/server:1.3.25
说明:
-
-v /vaultwarden-data/:/data/:数据持久化目录,备份只需要备份它 -
ADMIN_TOKEN:启用/admin管理后台的访问控制 -
-d:指定容器运行于前台或者后台(默认为 false 表示运行于后台)
-
--restart always:自动启动(在宿主机重启后或者 Docker 服务重启后) -
--name vaultwarden:指定容器名称为 vaultwarden -
-e TZ=Asia/Shanghai:设置时区 -
-e LOG_FILE=/data/log/vaultwarden.log:设置日志文件路径 -
-e ADMIN_TOKEN=some_random_token:设置 ADMIN_TOKEN 环境变量以启用管理页面 -
-v /vaultwarden-data/:/data/:挂载容器的 data 目录到宿主机的 vaultwarden-data 目录上 -
-p 8443:80:指定容器的 80 端口暴露在宿主机的 8443 端口上
启动后可以用下面命令确认容器状态:
docker ps
docker logs --tail=100 vaultwarden
也可以通过 http://127.0.0.1:8443 访问。不过此时没有开启https,一般是无法进行注册的,但是可以通过http://127.0.0.1:8443/admin进行配置管理。
4. 反向代理(二选一):Caddy 或 Nginx
接下来只剩“反代 + HTTPS”这一步。两种方案本质相同,区别在于你更习惯哪种工具。
- Caddy 通常自动处理
4.1 方案 A:Caddy(最省心)
Caddyfile 示例
vw.example.com {
reverse_proxy 127.0.0.1:8443
}
要点:
- 域名
vw.example.com需要解析到你的服务器 - Caddy 会自动申请并续期证书(前提是 80/443 可用且域名可达)
4.2 方案 B:Nginx + Let's Encrypt(更可控)
下面是 Nginx 的基础反代配置(证书路径以 Certbot 默认为例,默认你已经通过cerbot将SSL证书下载好了,如果没有请先通过cerbot下载证书)。配置显示该站点监听443端口,使用SSL证书,并将请求反向代理到本地的8443端口。
server {
listen 443 ssl;
server_name vw.example.com;
ssl_certificate /etc/letsencrypt/live/vw.example.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/vw.example.com/privkey.pem; # managed by Certbot
location / {
proxy_pass http://127.0.0.1:8443;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
5. 反代成功后如何访问
当 Caddy/Nginx 配好并加载成功后,按下面步骤验收:
-
浏览器访问 Vaultwarden:
https://vw.example.com
-
管理后台(需要
ADMIN_TOKEN):https://vw.example.com/admin
6. 备份与恢复
Vaultwarden 的核心数据都在 /data:
- SQLite 数据库(默认)
- 附件、图标缓存、发送记录等(视配置而定)
6.1 备份建议
- 定期备份整个
/data(最简单可靠) - 备份位置:异机/对象存储/加密盘(至少两份)
示例(以 bind mount /opt/vaultwarden/data 为例):
docker stop vaultwarden
tar -czf /opt/backup/vaultwarden-$(date +%F).tar.gz -C /opt/vaultwarden data
docker start vaultwarden
7. 升级维护
docker compose pull
docker compose up -d
docker image prune -f
升级后验证:
- Web 能打开
- 客户端能同步
8. 常见问题排查
8.1 客户端提示证书/无法登录
- 检查是否真的走
https:// - 检查
DOMAIN是否与你访问域名一致 - 反代是否正确传递
X-Forwarded-Proto
9. 验收清单
https://vw.example.com正常访问- 管理后台需要 Token
- 禁止公开注册(除非你明确要开放)
- 客户端/浏览器扩展可同步
10. 结语
到这里,一个可用且相对安全的 Vaultwarden 就搭好了。
浙公网安备 33010602011771号