使用 Docker 轻松部署 Bitwarden 服务端,搭建你自己的密码管理器

使用 Docker 轻松部署 Bitwarden 服务端,搭建你自己的密码管理器
Mr. O简介
在数字时代,密码安全至关重要,然而,要为每个账户都设置复杂且独一无二的密码,并在不同设备间高效管理,是一项很有难度的挑战,所以十分推荐使用密码管理器。
常见的密码管理方案对比如下:
- Apple 内置密码管理器 : 在非 Apple 设备使用受限,没有集成 TOTP 。
- Google 内置密码管理器 : 设备限制相比 Apple 少一些,但仍然受限,也不支持 TOTP,且 Chrome 开放权限过高。
- 1Password : 界面友好、功能完善,但需要订阅(个人版 $2.99/月,家庭版 $4.99/月)。
- Bitwarden.com : 提供免费方案,但功能有限(不支持 TOTP),高级版 $1/月。
- KeePass : 开源的客户端,需要自行解决密码库的同步问题。
从安全、便利的角度考虑,推荐直接使用 1Password 的服务,但如果你不想长期付费,或不愿意将所有密码存放在别人的服务器上,那么自托管就成为更理想的解决方案。
本教程将介绍如何使用 Vaultwarden(一个轻量、高效的 Bitwarden 服务器实现)与 Docker Compose,快速部署一个完全由你掌控的、功能强大的私有密码库。
什么是 Bitwarden
Bitwarden 是一款免费、开源的密码管理器,支持所有主流平台(桌面端、移动端、浏览器扩展等)。
用户可以直接使用 bitwarden.com 提供的官方托管服务,或者选择自行部署官方开源的服务端。
不过需要注意的是,在官方托管或自建服务的情况下,高级功能(TOTP)仍受到付费限制。
什么是 Vaultwarden
Vaultwarden 是一个开源的,使用 Rust 编写的非官方 Bitwarden 服务器实现,它非常轻量、高效,并且与官方 Bitwarden 客户端完全兼容。
Vaultwarden 的源代码托管在 GitHub ,目前有 48k 的 Stars,受到广泛认可。
通过 Vaultwarden,你不仅能自由掌控数据,还可以 免费解锁 Bitwarden 的全部高级功能,例如内置的 TOTP 验证器,并且依然能够无缝使用官方客户端。
一、环境准备
在开始之前,需要拥有一个自己的 VPS 或是支持 Docker 容器的 NAS 系统。
1. 安装 Docker 和 Docker Compose
这是我们容器化部署的基础。如果你的服务器尚未安装,可以参考以下教程。
2. 准备域名
为了通过 HTTPS 安全地访问你的密码管理器,你需要一个域名,并将其解析到你的服务器 IP。
3. 创建项目目录
为 Vaultwarden 创建一个专用的目录,用于存放配置文件和数据。
1 | mkdir -p /opt/vaultwarden |
二、使用 Docker Compose 部署 Vaultwarden
创建 compose.yml
文件
在项目目录 (/opt/vaultwarden
) 中,创建一个名为 compose.yml
的文件。
1 | cd /opt/vaultwarden |
将以下内容粘贴到文件中:
1 | services: |
配置解析:
image
: 使用vaultwarden/server:latest
镜像。ports
: 将容器的 80 端口映射到主机的127.0.0.1:6666
。127.0.0.1 表示 Vaultwarden 只能通过本机(或反向代理)访问。environment
:DOMAIN
: 设置需要使用的域名WEBSOCKET_ENABLED
: 启用 WebSocket 可以让你的客户端与服务器之间进行实时通信和同步。SIGNUPS_ALLOWED
: 设置为false
会禁止注册新账户。注意: 可以在注册完账户后,删除前面的
#
,使这行配置生效,然后重新启动服务
volumes
: 将 Vaultwarden 的所有数据(包括用户、密码库和配置)持久化存储在主机当前目录下的data
文件夹中,确保容器更新或重建后数据不会丢失。
启动 Vaultwarden 服务
在 compose.yml
文件所在目录中,执行以下命令来拉取镜像并启动服务:
1 | docker compose up -d |
三、配置反向代理(关键步骤)
绝对不要将没有 HTTPS 的密码管理器暴露在公网上。 我们需要使用 Nginx 或其他反向代理工具,为 Vaultwarden 启用 SSL/TLS 加密。
以下是一个 Nginx 的配置示例。你需要为你的域名申请一个 SSL 证书(例如通过 Let’s Encrypt)。
1 | # /etc/nginx/conf.d/vault.yourdomain.com.conf |
测试并重载 Nginx 配置:
1 | nginx -t |
四、使用你的自建密码库
创建账户: 浏览器访问
https://vault.yourdomain.com
,注册用户。配置客户端:
- 打开 Bitwarden 浏览器插件或手机 App。
- 在登录界面,服务器设置为自托管。
- 在 “Server URL” 字段中,填入你的 Vaultwarden 访问地址:
https://vault.yourdomain.com
- 保存后,使用你注册的账号密码登录。
数据备份
备份至关重要,我们必须对 Vaultwarden 的数据进行定期备份,以避免密码丢失的情况。
手动备份
您可以随时执行以下命令来创建一份即时备份。
1 | tar zcvf /root/backup/vaultwarden-backup-$(date +%F).tar.gz -C /opt vaultwarden |
- 此命令会将
/opt/vaultwarden
目录完整备份到/root/backup/
目录下。 $(date +%F)
会在文件名中自动加入当前日期(例如2025-08-26
)。-C /opt vaultwarden
参数可以避免在归档文件中包含/opt/
的上层路径,使恢复过程更简洁。
自动备份 (Crontab)
为了实现自动化,我们可以使用 crontab
来设置定时备份任务。
编辑 Crontab
执行
crontab -e
命令来编辑定时任务列表。添加定时任务
在编辑器中添加以下两行内容:
1
2
3
4
5# 每天凌晨 3:00 备份 Vaultwarden 数据
0 3 * * * tar zcvf /root/backup/vaultwarden-backup-$(date +\%F).tar.gz -C /opt vaultwarden >/dev/null 2>&1
# 每天凌晨 3:05 删除超过 7 天的旧备份
5 3 * * * find /root/backup -name "vaultwarden-backup-*.tar.gz" -mtime +15 -delete- 第一行命令会在每天凌晨 3:00 创建一个带时间戳的备份。
- 注意: 在
crontab
中,%
字符需要被转义为\%
。 >/dev/null 2>&1
会将命令的正常输出和错误输出都重定向到空设备,避免产生不必要的邮件通知。
- 注意: 在
- 第二行命令会在每天凌晨 3:05 查找并删除
/root
目录下所有超过 15 天的 Vaultwarden 备份文件,以节省磁盘空间。
- 第一行命令会在每天凌晨 3:00 创建一个带时间戳的备份。
保存并退出编辑器后,cron
服务会自动加载新的定时任务。
除了打包备份之外,还要将备份文件保存在不同的设备中存储,避免遇到 VPS 服务商或是 NAS 的硬盘错误导致无法访问的情况
对于 Linux 服务器,我们可以在存储备份的设备上使用 rsync
、rclone
定期同步 /root/backup
文件夹
总结
恭喜!你现在拥有了一个完全由自己掌控、安全且功能强大的密码管理器。通过 Docker 和 Vaultwarden,你可以轻松地保护你的数字身份,同时享受媲美商业解决方案的便捷体验。