之前在 claw cloud run 上利用免费的 5 刀额度搭建了一个 vaultwarden 自用,不过还是不太放心怕跑路,看了看 claw cloud run 的配置仅 0.2vcpu,128m 内存,还比不上谷歌大善人的免费 e2-micro 小鸡,于是花了 1 个小时搭了一个,自用的话基本是永久免费了。然后自己写了个简单的教程,用ai整理润色了下,方法大家参考。有问题的可以交流
GCP 永久免费 VPS 零成本搭建 Vaultwarden 密码库 (Docker + Caddy)
本指南面向有一定 Linux 和 Docker 基础的用户,旨在利用 Google Cloud Platform (GCP) 的永久免费资源,快速、低成本地搭建一个私有、安全的 Vaultwarden (Bitwarden 兼容) 密码库。
核心优势
零成本运行: 充分利用 GCP 永久免费配额,服务器、磁盘、基础流量均免费。
数据自控: 密码数据存储在自己的服务器上,隐私和安全完全掌握。
功能完善: 兼容 Bitwarden 客户端,支持全平台同步、自动填充、TOTP 等。
自动化 HTTPS: 使用 Caddy 自动申请和续签 Let’s Encrypt 证书。
GCP 永久免费层关键资源
- 实例 (VM):
e2-micro(0.25 vCPU, 1GB RAM),仅限美国部分区域 (us-west1,us-central1,us-east1等)。选择正确区域是免费的关键。 - 磁盘: 30GB 标准永久性磁盘。必须选择“标准”类型。
- 流量: 每月 1GB 网络出站流量 (目的地非中国大陆/澳大利亚)。对于 Vaultwarden 个人使用通常足够。
- IP 地址: 可附加一个免费的静态外部 IP (只要实例运行)。
- 费用估算提示: 创建实例时显示的“每月估算费用”未计入免费层折扣。只要严格遵守免费配额限制,最终账单相关费用会被抵扣。
准备工作
- Google 账号 + 绑定信用卡 (用于验证,不会因免费资源扣费)。
- 一个域名 (强烈建议,用于 Caddy 自动 HTTPS)。
- SSH 客户端。
- 已在 GCP 控制台按免费层要求创建好一台 Debian 12 (或更新稳定版) 的
e2-micro实例,并获取其外部 IP 地址。
搭建步骤
1. 系统初始化与 Docker 安装
通过 SSH 连接到你的 GCP 实例。
# 更新系统并安装基础工具
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl wget nano git
# 安装 Docker & Docker Compose (使用官方脚本)
curl -fsSL [https://get.docker.com](https://get.docker.com) -o get-docker.sh
sudo sh get-docker.sh
# 安装 Docker Compose Plugin (推荐)
sudo apt install -y docker-compose-plugin
# 或者安装旧版 Docker Compose v1 (如果需要)
# sudo apt install docker-compose
# (可选) 允许当前用户免 sudo 执行 docker 命令 (需重新登录或 newgrp docker 生效)
# sudo usermod -aG docker $USER
# newgrp docker
2. 创建项目目录与配置文件
# 创建并进入工作目录
mkdir ~/vaultwarden && cd ~/vaultwarden
# 创建 docker-compose.yml 文件
nano docker-compose.yml
粘贴以下内容到 docker-compose.yml:
version: '3.8' # 建议指定较新版本
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: always
environment:
# !!! 关键: 设置复杂的管理员后台令牌 (使用 openssl rand -base64 48 生成) !!!
ADMIN_TOKEN: '在此粘贴你生成的复杂令牌'
# 初始设置为 true 以便注册,注册后务必改为 false 并重启
SIGNUPS_ALLOWED: 'true'
WEBSOCKET_ENABLED: 'true' # 启用 WebSocket 实现实时同步
volumes:
- ./vw-data:/data
caddy:
image: caddy:latest
container_name: caddy
restart: always
ports:
- "80:80" # HTTP
- "443:443" # HTTPS
- "443:443/udp" # HTTP/3
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile # 映射 Caddy 配置文件
- ./caddy-data:/data # 持久化证书等数据
- ./caddy-config:/config # 持久化配置状态
depends_on:
- vaultwarden
重要:
- 使用
openssl rand -base64 48命令生成一个强随机字符串,替换ADMIN_TOKEN的值。务必保管好此令牌。 SIGNUPS_ALLOWED初始保持true,完成个人账号注册后,必须修改为false并重启服务。
保存并退出编辑器 (Ctrl+X, Y, Enter)。
3. 创建 Caddyfile
nano Caddyfile
粘贴以下内容,并将 your.domain.com 替换为你的域名,[email protected] 替换为你的邮箱:
# 将 your.domain.com 替换为你的真实域名
your.domain.com {
# 反向代理到 Vaultwarden
reverse_proxy vaultwarden:80 {
header_up X-Real-IP {remote_ip}
}
# 为 WebSocket 配置反向代理
reverse_proxy /notifications/hub vaultwarden:3012
# 自动 HTTPS (使用 Let's Encrypt)
# 将 [email protected] 替换为你的邮箱
tls [email protected] {
# (可选) 可以指定 ACME CA,默认是 Let's Encrypt
# ca [https://acme-staging-v02.api.letsencrypt.org/directory](https://acme-staging-v02.api.letsencrypt.org/directory) # 测试用
}
# 推荐的安全 Headers
header {
# 启用 HSTS (Strict-Transport-Security),强制 HTTPS
Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
X-Content-Type-Options "nosniff"
X-Frame-Options "SAMEORIGIN" # 或 DENY
# Referrer-Policy "strict-origin-when-cross-origin"
# Permissions-Policy "interest-cohort=()" # 示例
# 移除 Server 头减少信息泄露
-Server
}
# 启用压缩
encode gzip zstd
}
保存并退出。
4. 配置 GCP 防火墙
- 在 GCP 控制台 → VPC 网络 → 防火墙,创建一条新的防火墙规则。
- 目标: 应用到你的 Vaultwarden VM 实例 (建议使用目标标记 Target tag)。
- 方向: 入站 (Ingress)。
- 操作: 允许 (Allow)。
- 来源 IP:
0.0.0.0/0。 - 协议和端口: 允许 TCP 端口
80和443。 - 确保该规则已应用到你的 VM 实例上。
5. 配置 DNS
- 在你的域名注册商或 DNS 服务商处,为你的域名 (e.g.,
vaultwarden.your.domain.com) 添加一条A记录。 - 将记录值指向你的 GCP VM 实例的 外部 IP 地址。
- 等待 DNS 记录生效 (几分钟到几小时不等,可通过
ping或在线 DNS checker 验证)。
6. 启动服务
在 ~/vaultwarden 目录下执行:
# 首次启动会下载镜像,并由 Caddy 自动申请证书
sudo docker compose up -d
# 检查容器运行状态 (应均为 Up/Running/Healthy)
sudo docker compose ps
# 查看 Caddy 日志确认证书申请成功 (特别重要)
sudo docker compose logs -f caddy
# (按 Ctrl+C 退出日志查看)
7. 访问与安全设置
- 通过浏览器访问
https://your.domain.com。 - 点击 “创建账户”,注册你的管理员账号,设置强主密码。
- 关键安全步骤:禁用后续注册
# 停止服务
sudo docker compose down
# 编辑配置文件
nano docker-compose.yml
# 将 SIGNUPS_ALLOWED 的值从 'true' 修改为 'false'
# 保存退出 (Ctrl+X, Y, Enter)
# 重新启动服务
sudo docker compose up -d
- (可选) 访问
https://your.domain.com/admin,使用之前设置的ADMIN_TOKEN登录后台管理界面。
8. 数据备份 (重要!) 
- 定期备份
~/vaultwarden目录,尤其是./vw-data子目录。 - 必须将备份存储在 异地 (如 GCP Cloud Storage, 其他云存储, NAS, 本地电脑)。
- 推荐使用
cron定时任务配合脚本 (如使用tar压缩 +gsutil或rclone上传) 自动化备份。 - 根据密码更新频率,建议每日或每周备份。
9. 客户端配置
- 下载 Bitwarden 官方客户端 (浏览器扩展、桌面、移动 App)。
- 在客户端登录界面的设置 (通常是齿轮图标
或登录选项) 中,找到 自托管环境 (Self-hosted Environment) 或 服务器 URL (Server URL) 选项。 - 填入你的 Vaultwarden 完整 URL:
https://your.domain.com。 - 保存