share · 公开
速览

实践教程

从零搭建一套
可协作的私有密码库

用免费/低成本 VPS、Cloudflare 隧道和 Vaultwarden,搭一套兼容 Bitwarden 官方客户端的密码系统: 个人能用,小团队能按权限共享,数据落在你控制的服务器上。

Vaultwarden Cloudflare Tunnel Docker Always Free 可参考 约 2–4 小时首次搭建

0. 速览(给没时间细看的人)

读完本节约 2 分钟,应能判断:这套方案是什么、适不适合你、最短怎么做。需要细节再往下翻。

一句话是什么

在一台云服务器上运行 Vaultwarden(兼容 Bitwarden 协议的轻量服务端), 通过 Cloudflare Tunnel 用你的域名提供 HTTPS 访问; 人用官方 Bitwarden App/浏览器插件,团队用 Organization + Collection 做权限隔离。

适合 / 不适合

适合不太适合
个人或小团队(大约 2–20 人)要统一管密码 完全不想碰服务器、域名、备份
要协作共享账号,又不想在聊天里发明文 需要等保/审计报告/厂商 SLA
希望数据在自己机器上,客户端继续用 Bitwarden 把 1GB 小鸡塞满 VPN 与一堆服务还要求永远稳
能接受「轻度运维」:备份、升级、偶尔排障 只想开通即走、永不看文档

解决什么痛点

方案极简图

你需要准备

完成后的样子

成本与风险(诚实版)

最短路径(8 步)

  1. 申请 VPS,拿到 SSH 能登录 Linux 即可。 详见第 4 章 →
  2. 安装 Docker 与 Compose 后续一律容器部署。 详见第 5 章 →
  3. 准备 compose 与环境变量 域名、Admin Token、关公开注册、Tunnel Token。 详见第 5 章 →
  4. Cloudflare 建隧道并绑定主机名 指到容器内 Vaultwarden 服务。 详见第 5 章 →
  5. 创建第一个用户 临时开放注册或走邀请,登录 Web Vault。 详见第 6 章 →
  6. 立刻关闭公开注册 恢复「只邀请」基线。 详见第 6 章 →
  7. 客户端改服务器地址并同步 手机/桌面 Bitwarden 填自建 URL。 详见第 6 章 →
  8. (协作)建组织 + 备份 Organization 在 Web Vault 建,不在 Admin 建;备份要可恢复。 组织 → · 备份 →

按你的情况往下跳

你的情况建议
只想判断值不值得 读完本「速览」即可
已有 VPS,只差分发 第 5 章 部署与隧道
页面能开,不会协作分享 第 7 章 组织与协作
怕翻车、关心边界 第 9 章 · 第 10 章
完整照做 第 3 章 前置准备 顺序往下
隐私说明 本文使用 vault.example.comyou@example.com 等占位符。 请把示例全部换成你自己的域名与账号;不要把 Admin Token、Tunnel Token、主密码发到公开地方。

1. 我们在解决什么问题

先对齐「为什么值得做」,再谈怎么装。工具是手段,工作流才是价值。

痛点 常见失败做法 本方案怎么回应
密码到处都是 浏览器各记各的、备忘录、Excel 统一加密保险库 + 多端客户端
要和别人共享账号 群里发明文、口头报密码 Organization + Collection 权限
人走了密码还在 改不动、不知道有哪些 移出成员 + 轮换共享密文
不信任或付不起协作云 继续明文,或强上企业套餐 数据在自管 VPS,入口走 Cloudflare
脚本/自动化也要密钥 写死在仓库或环境变量长期裸奔 可选:机器账号 + CLI 最小权限(进阶)
快速决策 如果只是你一个人、完全不想运维:直接用 Bitwarden / 1Password 等官方云通常更省心。 如果你要协作可控、成本可控、数据位置可控,并愿意学一点基础运维——继续读很值。

2. 架构与选型

三个关键选择:Vaultwarden、Cloudflare Tunnel、默认关闭公开注册。

组件分工

为什么是 Tunnel 而不是裸奔 443

传统做法是:VPS 安全组放行 80/443,Nginx/Caddy 反代并申请证书。 可行,但攻击面更大,证书与防火墙都要自己盯。 Tunnel 把「对公网开洞」变成「出站连 Cloudflare」,域名与 TLS 在边缘处理,VPS 侧可只暴露 SSH(甚至 SSH 也收紧)。

和常见方案比一眼

方案优点代价
Bitwarden / 1Password 官方云 省心、功能全、有 SLA 订阅费;数据在厂商侧
自托管 + 公网 443 完全自控 证书、防火墙、扫描面
本方案:VW + Tunnel 自控 + 客户端现成 + 端口策略更干净 你要会 Docker/备份;免费 VPS 有额度限制
重要概念:Admin ≠ 组织 Vaultwarden 的 /admin 是服务端运维面板(用户列表、邀请诊断等)。 Organization(组织)在用户登录后的 Web Vault 里创建。 很多人在 Admin 里找「新建组织」会找不到——这是产品设计,不是坏了。

3. 前置准备清单

动手前把账号与信息备齐,避免装到一半卡住。

说明
云厂商账号 能创建 Linux 实例;下文以「Always Free 类免费档」叙述,其它 VPS 步骤几乎相同
域名 能在 Cloudflare 添加站点并改 NS(或至少能加 CNAME/隧道路由)
Cloudflare 免费计划通常足够 DNS + Tunnel;进阶可加 Access / WAF
SSH 客户端 手机可用 Termius 等;电脑用终端即可
主密码策略 管理员主密码要足够强,并尽早开客户端 2FA
第二 Owner(协作) 避免「一个人离职/失联 → 组织锁死」

建议的占位符(写文档时也这样)

4. 申请并登录免费/低成本 VPS

目标:拿到一台能 SSH 的 Linux,有出网能力。厂商控制台名称会变,以「能力」为准。

选型建议

通用创建流程(厂商无关)

  1. 创建虚拟网络(VCN/VPC) 若向导要求:公有子网、可分配公网 IP、出网路由。
  2. 安全组/防火墙 至少允许你的 IP 访问 22(SSH)。业务 80/443 可以不放行(走 Tunnel 时)。
  3. 创建实例 选免费/低配规格,挂载足够启动盘,下载或生成 SSH 密钥。
  4. 确认公网 IP 或 SSH 入口 部分厂商默认无私网 IP 出网策略,按控制台文档启用。
  5. 首次 SSH 用密钥登录,做一次 sudo apt update(或对应包管理器)确认网络正常。
示例:SSH 登录
ssh -i /path/to/your-key.pem ubuntu@YOUR_VPS_IP
常见翻车

5. 部署 Vaultwarden 与 Cloudflare Tunnel

完成标志:域名 HTTPS 打开是 Vault 页面;VPS 业务端口不必对全世界打开。

5.1 安装 Docker

在 VPS 上安装 Docker Engine 与 Compose 插件(以 Ubuntu 为例,具体以官方文档为准):

示例(请按官方文档核对)
# 安装 Docker 后验证
docker --version
docker compose version

5.2 准备目录与配置

目录
mkdir -p ~/vaultwarden
cd ~/vaultwarden

准备 compose.yml(示意,按你模板调整):

compose.yml 示意
services:
  vaultwarden:
    image: vaultwarden/server:latest
    restart: unless-stopped
    environment:
      DOMAIN: "https://vault.example.com"
      SIGNUPS_ALLOWED: "false"
      ADMIN_TOKEN: "${VW_ADMIN_TOKEN}"
    volumes:
      - vw-data:/data
    # 建议仅监听本机或 compose 网络,不直接映射公网
    # ports:
    #   - "127.0.0.1:8080:80"

  cloudflared:
    image: cloudflare/cloudflared:latest
    restart: unless-stopped
    command: tunnel --no-autoupdate run
    environment:
      TUNNEL_TOKEN: "${CF_TUNNEL_TOKEN}"
    depends_on:
      - vaultwarden

volumes:
  vw-data:
网络说明 若 cloudflared 与 vaultwarden 在同一 Compose 网络,隧道回源可填 http://vaultwarden:80(服务名)。 若隧道指向宿主机本机端口,则用 http://127.0.0.1:8080 并正确发布端口。 以你实际拓扑为准。

准备 .env(勿提交到公开仓库):

.env 示意
VW_ADMIN_TOKEN=请用 openssl rand -base64 48 生成
CF_TUNNEL_TOKEN=从 Cloudflare Zero Trust 控制台复制
生成 Admin Token
openssl rand -base64 48

5.3 Cloudflare 隧道

  1. Cloudflare 控制台 → Zero TrustNetworks → Tunnels → Create。
  2. 选择 Cloudflared,复制 Token 写入 VPS 的 .env
  3. 为隧道添加 Public Hostname
    • Subdomain:vault
    • Domain:你的根域名
    • Service:HTTPvaultwarden:80(或你的实际回源地址)
  4. 域名 NS 已指向 Cloudflare(若用 CF DNS)。

5.4 启动与验证

启动
cd ~/vaultwarden
docker compose pull
docker compose up -d
docker compose ps
docker compose logs -f --tail=100
验证
# 公网应能打开 Vault(示例域名)
curl -sI https://vault.example.com | head -1

# 本机存活(若映射了 127.0.0.1:8080)
curl -s http://127.0.0.1:8080/alive

完成标志:

安全提醒 ADMIN_TOKENTUNNEL_TOKEN、主密码属于最高敏感信息。 不要发到群聊、公开 Git、截图不打码。泄露后立刻轮换。

6. 第一个用户与安全基线

先能登录,再立刻关掉公开注册;客户端改自建服务器地址。

6.1 注册策略

生产基线建议 SIGNUPS_ALLOWED=false(禁止公开注册)。 但「世界上第一个用户」有时会卡住:没有用户就无法登录,没有 SMTP 就收不到邀请邮件。

可行路径(选一):

  1. 临时开放注册:把 SIGNUPS_ALLOWED 改为 truedocker compose up -d 重建/重载后注册管理员,再改回 false 并重启。
  2. Admin 邀请:用 /admin + Admin Token 进入管理后台发送邀请 (需要 SMTP 时邮件才到;部分情况可配合邀请链接流程,以你版本文档为准)。
注册完成后务必做 立刻恢复 SIGNUPS_ALLOWED=false 并确认生效,避免被扫成「公开注册的密码站」。

6.2 管理后台 /admin

6.3 官方客户端连接自建服

  1. 安装 Bitwarden 官方 App 或浏览器插件。
  2. 登录页找到 自托管 / Self-hosted 或服务器设置。
  3. 服务器 URL 填:https://vault.example.com(不要多写路径)。
  4. 用你的邮箱与主密码登录,开启同步与解锁。

6.4 强烈建议马上做

7. 组织、集合与协作

协作价值从 Organization 开始;权限靠 Collection / Group,而不是「一个大杂烩库」。

7.1 在哪里创建组织

  1. 浏览器打开 https://vault.example.com
  2. 普通用户登录 Web Vault(不是 /admin)
  3. 找到 New organization / 新建组织(界面文案可能随版本变化)
  4. 创建后你是 Owner,再邀请第二位 Owner
双 Owner 规则 协作场景请保证 ≥ 2 名 Owner。 一个人失联、删号或设备全丢时,另一个人仍能管理成员与集合。

7.2 集合(Collections)示例

集合放什么谁碰
infra-prod 生产服务器、云控制台、数据库 仅核心运维读写
infra-dev 测试/开发环境 运维 + 工程师
services-shared 共用 SaaS、订阅、工具账号 多数人只读,少数人可写
agents-ci(可选) CI/脚本用 Token 对应机器账号只读

7.3 群组授权思路

优先「人 → 加入 Group → Group 拥有 Collection 权限」,少给个人直接绑一堆例外。

7.4 入职 / 离职

入职:邀请 → 注册并开 2FA → 加入 Group → 确认可见集合符合预期。

离职:

  1. 从 Organization 移除成员(立即失去集合访问)
  2. 对其曾可写的共享条目做 密码轮换
  3. 若是机器账号:移除后轮换相关 Token

7.5 策略建议

8. 真实使用场景

装好只是一半;下面这些故事才是方案要传递的价值。

场景 A · 两人合伙 / 合租共享订阅

旧做法

密码发微信,改了不同步,分手后还登得上。

新做法

建组织,共享集合放流媒体/工具账号;退出时移出成员并改密。

场景 B · 小团队服务器与面板

旧做法

root 密码口头相传,新同事进组就「先用这个」。

新做法

infra-prod 仅核心组;开发只碰 infra-dev;人员变动改集合权限而不是改群公告。

场景 C · 家人设备与家宽账号

旧做法

路由器密码写在纸条或老人手机备忘录。

新做法

家庭组织 + 只读集合;小孩/长辈客户端只看得到该看的,主管理仍在你这。

场景 D · 外包或临时协作

旧做法

项目结束仍留在共享文档里。

新做法

到期移出 Org,轮换项目相关密码;权限有时间感。

场景 E · 出差换机

旧做法

浏览器不同步,关键密码靠猜。

新做法

官方客户端 + 自建 URL + 2FA,新设备登录即同步。

场景 F · 脚本 / CI 取密(进阶)

原则

单独机器账号,只读某一个集合;用 Bitwarden CLI(bw)短期 unlock 取密。 不要把生产管理员主密码塞进 CI。

9. 备份、升级与加固

能上线不算成功;能恢复、能升级、少裸奔才算。

9.1 备份什么

示意:停服一致性备份(请按自己脚本调整)
cd ~/vaultwarden
docker compose stop vaultwarden
# 备份命名卷或绑定目录,例如:
# docker run --rm -v vw-data:/data -v "$PWD:/backup" alpine \
#   tar czf /backup/vw-$(date +%F).tar.gz -C /data .
docker compose start vaultwarden
备份不等于安全 加密前的备份包等同于数据库失陷。上传对象存储时建议客户端加密(如 rclone crypt),并定期做恢复演练

9.2 升级

示意
cd ~/vaultwarden
docker compose pull
docker compose up -d
docker compose ps

升级前先备份;关注 Vaultwarden 发行说明中的破坏性变更。

9.3 加固清单(由易到难)

10. 成本、风险与和商业方案的对比

自托管的「便宜」往往用时间与责任换。写清楚,读者才不会被教程卖惨或卖安利。

维度自托管本方案官方云密码库
金钱 VPS 可免费档 + 域名;时间成本更高 按人/月订阅,省运维时间
数据位置 在你的 VPS / 备份桶 在厂商基础设施
可用性 取决于你的机器、隧道、你是否在线救火 通常更高,有状态页与支持
协作权限 Org/Collection 够用小团队 企业功能往往更全
合规 需自证流程,本教程不构成合规结论 厂商可能提供认证材料

主要风险(请默认会发生)

11. 常见问题 FAQ

打不开域名 / 502

提示无法注册 / 注册被禁用

这是 SIGNUPS_ALLOWED=false 的预期行为。首用户用临时开放或邀请流程;完成后保持关闭。

邀请邮件收不到

多半未配置 SMTP 或邮件进垃圾箱。先保证 Admin/SMTP 配置正确;过渡期可用临时注册策略。

在管理后台找不到「创建组织」

请到 Web Vault 用户界面创建。Admin 是运维面板。

客户端找不到附件入口

许多客户端需先保存条目,再从条目菜单「附件/Attachments」管理。以你使用的客户端版本为准。

1GB 内存够吗?

仅 Vaultwarden + cloudflared 通常可以。若再叠加重服务,先加监控,不够再升级规格。

能不能当团队唯一密码来源?

技术上可以,但请配套:双 Owner、2FA、备份演练、入离职流程。关键生产权限仍建议最小化。

12. 上线检查清单

附录

术语表

含义
Vaultwarden兼容 Bitwarden API 的自托管服务端实现
Web Vault浏览器里的密码库界面(用户侧)
Admin服务端管理面板 /admin
Organization组织,协作与共享的容器
Collection集合,组织内权限边界单位
TunnelCloudflare 出站隧道,暴露内网 HTTP 服务
主密码解锁保险库的密钥派生口令,服务端也不应「知道明文」

常用运维命令速查

速查
cd ~/vaultwarden
docker compose up -d
docker compose logs -f --tail=200
docker compose pull && docker compose up -d
docker compose ps
curl -s http://127.0.0.1:8080/alive

延伸阅读(官方)

你可以怎么继续完善自己的文档