从零搭建 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. 部署方案选择

本文给两条常见路线:

  1. 最省心:Caddy 自动签发 HTTPS(快捷)
  2. 更可控: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 配好并加载成功后,按下面步骤验收:

  1. 浏览器访问 Vaultwarden:

    • https://vw.example.com
  2. 管理后台(需要 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 就搭好了。

posted @ 2026-01-27 15:06  无邪将军  阅读(87)  评论(0)    收藏  举报