前言
Bitwarden 是一款开源的密码管理工具,不仅能保存和管理密码,还拥有密码生成、自动填充、多端同步等功能。Bitwarden 的另一个重要优势是可以自托管,用户可以在自己的服务器上部署 Bitwarden,以获得更高的安全性和隐私保护。Vaultwarden 是一个由社区维护的 Bitwarden 服务端实现,相比于官方的 Bitwarden 服务器,Vaultwarden 更加轻量级,并且能够完全兼容官方的 API 和客户端。
本文将介绍如何使用 Vaultwarden 在 Ubuntu 服务器上部署一个私有化的 Bitwarden 实例。除了 Vaultwarden 服务器本身,我们还需要一个反向代理服务器来处理 HTTPS 请求,并且为了保证数据的安全性,还需要一个定期备份的机制。我们将使用 Caddy 作为反向代理服务器,因为它可以自动申请和续期 SSL 证书,并且配置简单易用。最后,我们还会介绍如何使用 Docker Compose 来管理这些服务,一共运行三个容器:Vaultwarden、Caddy 和备份服务。
配置
安装 Docker
首先,安装 Docker 和 Docker Compose:
| |
创建目录结构
我们将所有的数据和配置文件都放在 /opt/vaultwarden 目录下,具体目录结构如下:
| |
使用以下命令创建目录结构,并将当前用户设置为 /opt/vaultwarden 目录的所有者:
| |
Docker Compose 配置
首先在 /opt/vaultwarden 目录下创建 docker-compose.yml 文件,内容如下:
| |
在 docker-compose.yml 中,我们配置了3个镜像,分别是 Vaultwarden、Caddy 和备份服务。
Vaultwarden 镜像使用官方的 vaultwarden/server:latest,并将数据目录挂载到主机的 ./data 目录下。环境变量中的 ADMIN_TOKEN 是 Vaultwarden 的管理令牌,用于访问管理界面,这里使用 ${VAULTWARDEN_ADMIN_TOKEN} 的语法,在 .env 文件中进行配置,避免在 docker-compose.yml 中明文写入。
Caddy 镜像使用自定义的 Dockerfile 构建,配置文件挂载到 /etc/caddy/Caddyfile,数据和配置目录分别挂载到主机的 ./caddy/data 和 ./caddy/config 目录下。环境变量中的 CLOUDFLARE_API_TOKEN 用于 Cloudflare DNS 验证,同样在 .env 文件中进行配置。另外,由于 443 端口可能被 ISP 屏蔽,我们使用非标的 16443 端口提供服务。
最后,备份服务的主体使用 bash 脚本实现,定期备份 Vaultwarden 和 Caddy 的数据。
配置 Caddy
在 /opt/vaultwarden/caddy 目录下创建 Caddyfile,内容如下:
| |
这里的 your.domain.com 需要替换为你自己的域名。如果在 docker-compose.yml 中配置了别的端口号,也需要相应地修改此处的端口号。{env.CLOUDFLARE_API_TOKEN} 引用了 docker-compose.yml 中传递的环境变量。
在 /opt/vaultwarden/caddy 目录下创建 Dockerfile,内容如下:
| |
这里利用了 caddy:2-builder 作为构建器,编译了带有 Cloudflare DNS 插件的 Caddy 2 可执行文件,并替换了 caddy:2 官方镜像中的可执行文件。由于在 docker-compose.yml 中已经配置了构建过程,我们并不需要手动调用 docker build, docker-compose 会自动处理。
配置备份
在 /opt/vaultwarden 目录下创建 backup.sh,内容如下:
| |
这个脚本会每天备份一次 Vaultwarden 和 Caddy 的数据,并自动删除超过 7 天的备份文件。这个功能也可以使用 cron 定时任务来实现,但在这个简单的场景中, cron 有点太「重」了,使用脚本的方式更加轻量级。
配置环境变量
在 /opt/vaultwarden 目录下创建 .env 文件,内容如下:
| |
这里保存了 Vaultwarden 的管理令牌和 Cloudflare 的 API 令牌。Vaultwarden 的管理令牌可以是任意一个字符串,Cloudflare 的 API 令牌可以在 Cloudflare 的用户设置中找到。为了保证安全,应该把 .env 文件的权限设置为只有当前用户可读写。
| |
运行
完成配置后,可以使用以下命令启动服务:
| |
一切正常的话,会有类似以下输出:
| |
查看 caddy 容器的日志,应该能看到成功申请证书的消息:
| |
访问 https://your.domain.com:16443,应该能看到 Vaultwarden 的登录界面。再访问 http://your.domain.com:16443/admin,应该能看到 Vaultwarden 的管理界面。使用在 .env 文件中配置的 VAULTWARDEN_ADMIN_TOKEN 进行登录,即可以配置 Vaultwarden 了。大部分配置保持默认即可,不过为了方便增加账号,推荐配置一个有效的 SMTP 服务器,GMail 或 QQ 邮箱均可,就可以通过邮件邀请其他用户注册了;如果不配置 SMTP 服务器,新增一个用户是比较麻烦的。
