使用 Docker Compose 部署 Bitwarden/Vaultwarden 并使用 Caddy 实现 HTTPS 反向代理

本文介绍如何部署 Vaultwarden 密码管理器后端,并将其接入我们的 Caddy 网关,实现安全的 HTTPS 访问。

发布于 2 月前
阅读时间:
11–16 分钟

在之前的文章中,我们已经搭建好了基于 Caddy 的统一网关,并创建了外部网络 web_network

对于密码管理器这类极度敏感的服务,HTTPS 加密是强制性要求(在非安全连接下,Bitwarden 客户端和网页端会拒绝工作)。今天我们将部署 Vaultwarden(使用 Rust 重写的开源 Bitwarden 后端,内存占用极低,非常适合个人或小团队服务器),并将其接入我们的 Caddy 网关,实现安全的 HTTPS 访问。

为什么选择 Vaultwarden?

  • 全面兼容:完美支持 Bitwarden 官方的网页端、浏览器扩展、桌面端及手机 App。
  • 轻量高效:官方的 Bitwarden 运行需要多个容器,对服务器内存要求较高(通常需 2GB+);而 Vaultwarden 仅需一个容器,内存占用通常在几十兆(MB)左右。
  • 功能完整:免费解锁了官方需要付费的组织分享、两步验证(TOTP)等高级功能。

部署步骤

第一步:准备工作目录

在服务器上为 Vaultwarden 创建一个独立的工作目录:

Bash

mkdir -p ~/vaultwarden && cd ~/vaultwarden

第二步:编写 docker-compose.yml

~/vaultwarden 目录下创建 docker-compose.yml 文件。由于 Vaultwarden 默认使用 SQLite 数据库,我们只需要启动一个单容器服务即可(数据量极大时也可以配置 PostgreSQL,但对个人而言 SQLite 已经足够强大且易于备份)。

YAML

version: '3.8'

services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden_app
    restart: unless-stopped
    environment:
      - WEBSOCKET_ENABLED=true  # 开启 WebSocket,实现密码实时同步
      - SIGNUPS_ALLOWED=true    # 允许注册(建议自己注册完后改为 false)
    volumes:
      - ./vw-data:/data
    # 注意:同样不需要向宿主机暴露任何端口
    networks:
      - web_network

networks:
  # 加入之前创建的、供 Caddy 统一调度的外部网络
  web_network:
    external: true

第三步:启动 Vaultwarden 服务

在当前目录下执行命令,让 Vaultwarden 在后台运行:

Bash

docker-compose up -d

你可以通过 docker-compose logs -f 查看启动日志,确认服务是否正常运行。其内部默认会监听 80 端口(注意,这是容器内部端口,不会与宿主机冲突)。

第四步:配置 Caddy 反向代理

关于 Caddy 容器的部署以及 web_network 网络的创建,我们在第一篇文章中已经完成。现在我们直接为 Vaultwarden 配置域名解析和反向代理。

进入你的 Caddy 配置目录(如 ~/caddy-proxy),修改 Caddyfile,追加 Vaultwarden 的域名配置。

⚠️ 注意:Bitwarden 的客户端依赖 WebSocket 来进行密码的实时同步。Caddy v2 默认已经支持 WebSocket 转发,不需要像 Nginx 那样写复杂的配置,但我们需要为 Vaultwarden 特殊的路由做一点小优化。

Nginx

# 已有的其他配置...

# 新增:Vaultwarden 密码管理器配置
vault.yourdomain.com {
    # 启用通知(WebSocket)支持,Vaultwarden 内部默认将通知运行在 3012 端口
    # 自较新版本起,Vaultwarden 已支持在单端口(80)同时处理 HTTP 和 WebSocket
    # 为了兼容性和最佳实践,我们直接代理其标准端口即可
    reverse_proxy vaultwarden_app:80
}

💡 提示:请确保 vault.yourdomain.com 的 DNS 解析已经指向了你的服务器 IP。

修改完成后,在 Caddy 目录下执行热重载命令,让配置立即生效:

Bash

docker-compose exec -w /etc/caddy caddy caddy reload

Caddy 会自动为你的新密码库域名 vault.yourdomain.com 申请并安装 SSL 证书。

安全防范与进阶配置(强烈推荐)

由于密码管理器关乎个人所有资产安全,暴露在公网上需要格外注意安全防范。建议在完成初始配置后进行以下调整:

1. 关闭全网注册

当你(和你的家人/朋友)注册完账号后,建议立刻关闭注册功能,防止黑客扫描到你的域名后恶意注册。

修改 ~/vaultwarden/docker-compose.yml,将环境变量改为 false

YAML

    environment:
      - SIGNUPS_ALLOWED=false

然后重启容器生效:docker-compose up -d

2. 定期备份数据

Vaultwarden 的所有数据(包括密码、密钥、附件)都保存在 ~/vaultwarden/vw-data 目录下。你只需要定期将这个文件夹压缩并打包备份到安全的地方(如本地电脑、其他云盘),即可确保数据永不丢失。

验证与使用

  1. 在浏览器中访问 https://vault.yourdomain.com
  2. 此时你应该能看到经典的 Bitwarden 登录与注册界面(地址栏带有绿色的安全锁标志)。
  3. 点击“创建账户”注册你的主账号,并牢记你的主密码(这是解密你所有密码的唯一钥匙!)。
  4. 注册完成后,你可以下载 Bitwarden 的手机 App 或浏览器插件。在登录时,切记点击左上角的“齿轮”图标(设置),将服务器 URL 改为你的自建域名 https://vault.yourdomain.com,然后再输入账号密码登录。

总结

至此,通过我们精心设计的 web_network 独立网络方案,我们已经成功在服务器上部署了 Caddy 网关Umami 统计 以及 Vaultwarden 密码库

利用 Docker 容器间网络互通的特性,所有后端应用都完美隐藏在宿主机防火墙内部,仅由 Caddy 对外提供安全的 HTTPS 访问。不仅极大地节省了系统资源,更让服务的运维和扩展变得井然有序。

2,518字
发布时间:2026/06/04
最后修改:2026/06/10