在之前的文章中,我们已经搭建好了基于 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 目录下。你只需要定期将这个文件夹压缩并打包备份到安全的地方(如本地电脑、其他云盘),即可确保数据永不丢失。
验证与使用
- 在浏览器中访问
https://vault.yourdomain.com。 - 此时你应该能看到经典的 Bitwarden 登录与注册界面(地址栏带有绿色的安全锁标志)。
- 点击“创建账户”注册你的主账号,并牢记你的主密码(这是解密你所有密码的唯一钥匙!)。
- 注册完成后,你可以下载 Bitwarden 的手机 App 或浏览器插件。在登录时,切记点击左上角的“齿轮”图标(设置),将服务器 URL 改为你的自建域名
https://vault.yourdomain.com,然后再输入账号密码登录。
总结
至此,通过我们精心设计的 web_network 独立网络方案,我们已经成功在服务器上部署了 Caddy 网关、Umami 统计 以及 Vaultwarden 密码库。
利用 Docker 容器间网络互通的特性,所有后端应用都完美隐藏在宿主机防火墙内部,仅由 Caddy 对外提供安全的 HTTPS 访问。不仅极大地节省了系统资源,更让服务的运维和扩展变得井然有序。