自建 Vaultwarden:部署、安全配置与异地备份
记录如何用 Google Cloud、Docker 与 Cloudflare Tunnel 部署 Vaultwarden,并为密码库补上安全配置和 OneDrive 异地备份。
一些网站密码泄露后,我检查了浏览器里保存的 700 多条密码,发现不少密码存在重复使用。于是我把密码迁移到了 Vaultwarden,服务端运行在 Google Cloud,通过 Cloudflare Tunnel 对外访问。
这套部署以我 2025 年 7 月使用的免费额度和控制台界面为准。云服务的免费范围可能变化,创建实例前需要重新核对 Google Cloud 的当前说明。
部署结构
-
Google Cloud (GCP) - 你的免费服务器
- 作用:提供一台位于美国,24 小时运行的微型虚拟服务器 (
e2-micro)。 - 免费点:GCP 提供“始终免费”层级,其中就包含了这台服务器、30GB 的硬盘和每月 1GB 的对外流量。这对密码库来说绰绰有余。
- 作用:提供一台位于美国,24 小时运行的微型虚拟服务器 (
-
Cloudflare Tunnel - 访问通道
- 作用:连接 GCP 上的服务与 Cloudflare 网络。
- 安全点:Vaultwarden 不需要直接开放 HTTP 或 HTTPS 入站端口,外部访问经过 Cloudflare Tunnel。
- 免费点:我部署时使用的是 Cloudflare 的免费方案。
-
Vaultwarden - 你的轻量级密码管家
- 作用:提供兼容 Bitwarden 客户端的开源服务端,对服务器资源要求较低,适合运行在微型实例上。
准备工作
- 一个 Google Cloud 账号:点击注册。需要绑定一张信用卡用于身份验证,但只要你不超出免费额度,就不会被收费。
- 一个 Cloudflare 账号:点击注册。免费套餐即可。
- 一个你自己的域名:这是你访问密码库的地址。可以在Namecheap、GoDaddy等平台购买,一年费用通常几十元人民币。购买后,需要按照 Cloudflare 的提示,将域名的 DNS 服务器修改为 Cloudflare 的服务器。
创建 Google Cloud 服务器
- 登录 Google Cloud Console。
- 导航到 “计算引擎(Compute Engine)” > “VM 实例”,然后点击 “创建实例”。
- 按照以下关键配置进行设置,确保免费:
- 名称:随意,例如
bitwarden-server。 - 区域(Region):务必选择以下三个之一(
us-west1离中国最近):us-west1(俄勒冈)us-central1(爱荷华)us-east1(南卡罗来纳)
- 机器类型(Machine type):选择
e2-micro。 - 启动磁盘(Boot disk):点击“更改”,将**“启动磁盘类型”**修改为 “标准永久性磁盘”,大小设置为
30GB 或更小。 - 防火墙(Firewall):不要勾选 “允许 HTTP 流量” 或 “允许 HTTPS 流量”。
- 名称:随意,例如
控制台右侧可能显示标准估算价格。是否能被免费额度抵扣,以创建实例时 Google Cloud 的规则和最终账单为准。
- 点击 “创建”,等待几分钟,你的免费服务器就准备好了。
安装 Vaultwarden
- 在 VM 实例列表中,找到你刚创建的服务器,点击最右侧的 “SSH” 按钮,浏览器会弹出一个终端窗口。
- 在终端里,依次输入以下命令来安装 Docker(一个容器化工具):
Terminal window sudo apt-get updatesudo apt-get install -y docker.io - 运行下面这行命令,一键启动你的 Vaultwarden 密码库服务:
Terminal window sudo docker run -d --name vaultwarden -v /vw-data/:/data/ -p 8080:80 --restart unless-stopped vaultwarden/server:latest
创建 Cloudflare Tunnel
- 登录 Cloudflare 仪表板,选择你的域名。
- 在左侧菜单中,找到并点击 “Zero Trust”。
- 进入 Zero Trust 仪表板后,在左侧导航到 “Networks” > “Tunnels”。
- 点击 “Create a tunnel”,给隧道起个名字(如
bitwarden-gcp),保存。 - 在“Choose your environment”页面,选择 “Debian”,然后复制下面框里的那段以
curl开头的命令。 - 回到你 GCP 的SSH 终端窗口,粘贴并运行刚刚复制的命令。这会自动安装并配置好通道。
- 稍等片刻,Cloudflare 页面会显示你的连接器已激活。点击 “Next”。
- 现在配置公共访问地址:
- 子域名 (Subdomain):输入你想要的地址前缀,例如
bw。 - 域名 (Domain):选择你的域名。
- 服务 (Service):
- Type: 选择
HTTP。 - URL: 输入
localhost:8080。
- Type: 选择
- 子域名 (Subdomain):输入你想要的地址前缀,例如
解惑: 这里使用 HTTP 是安全的,因为这是
cloudflared在服务器内部与 Vaultwarden 通信,流量并未离开服务器,不产生任何费用。你从外部访问https://bw.yourdomain.com的全程都是被 Cloudflare 加密的。
- 点击 “Save hostname”。
等待一两分钟后访问 https://bw.yourdomain.com,确认 Bitwarden 登录页面可以打开。
安全配置与数据迁移
禁止新用户注册
在你注册完自己的账号后,为了安全,必须禁止其他人注册。
- 回到 GCP 的 SSH 终端。
- 依次执行以下三条命令,用新的配置重建容器(数据不会丢失):
Terminal window # 停止当前容器sudo docker stop vaultwarden# 移除旧容器sudo docker rm vaultwarden# 使用禁止注册的配置重新启动sudo docker run -d --name vaultwarden -e SIGNUPS_ALLOWED=false -v /vw-data/:/data/ -p 8080:80 --restart unless-stopped vaultwarden/server:latest - 刷新你的登录页面,会发现“创建账户”的按钮已经消失了。
从 Chrome 浏览器导入密码
- 导出:在 Chrome 地址栏输入
chrome://settings/passwords,在右侧菜单中选择“导出密码”。 - 导入:登录你的 Vaultwarden 网页版,进入 “工具” > “导入数据”,格式选择“Chrome (csv)”,然后上传文件即可。
- 清理:导出的
.csv文件是明文,导入后请立即彻底删除它。
配置浏览器插件
- 从Chrome 应用商店安装官方Bitwarden插件。
- 点击插件图标,点击左上角的齿轮设置。
- 在**“服务器 URL”**中,填入你的完整域名
https://bw.yourdomain.com,保存。 - 用你的主密码登录插件。
- 回到
chrome://settings/passwords,关闭“要约保存密码”和“自动登录”。
配置完成后,Bitwarden 插件会负责密码的自动填充和保存。
忘记主密码时怎么办
问:如果我忘记了 Vaultwarden 的主密码怎么办?
服务端管理员无法查看或重置 Vaultwarden 的主密码。
- 唯一的机会:注册时设置的“密码提示”。
- 最后的手段:管理员可以删除这个账户,让用户用原邮箱重新注册一个空密码库,但原有数据无法恢复。