NodeWarden部署教程:零成本自建Bitwarden密码管理器

前言

NodeWarden 是一个运行在 Cloudflare Workers 上的 Bitwarden 兼容服务端。简单来说:花 0 元,用 Cloudflare 免费额度,就能搭建一个属于自己的密码管理器

与传统的 Vaultwarden(需要 VPS)不同,NodeWarden 部署在 Cloudflare 全球边缘节点上,无需服务器,性能极速,数据安全私有化。

⚠️ 免责声明:本项目仅供学习交流使用,请定期备份密码库,作者不对数据丢失负责。本项目与 Bitwarden 官方无关。


NodeWarden vs Bitwarden 免费版 功能对比

功能 Bitwarden 免费版 NodeWarden 说明
网页密码库 原生 Web Vault 界面
TOTP 动态验证码 含 steam:// 协议支持
PWA / 离线使用 可安装、离线使用、应用快捷方式
Passkey 登录 WebAuthn/FIDO2 无密码认证
API 密钥 支持 bitwarden CLI,可轮换
登录二步验证 TOTP、YubiKey、Passkey
2FA 恢复代码 一次性代码,可禁用 2FA
实时推送同步 网页、浏览器扩展、桌面端、移动端
附件 / Send Cloudflare R2 或 KV 存储
导入 / 导出 Bitwarden JSON / CSV / ZIP(含附件)
云端备份中心 WebDAV / S3 定时增量备份
设备管理 删除设备、撤销信任、永久信任
登录请求 跨设备免密审批、跨设备解锁
多用户 邀请码注册
域名规则 自定义等效域名、全局域名排除
填充辅助 POST /fill-assist
组织/集合/权限 未实现
SSO/SCIM/企业目录 未实现

已测试客户端

  • ✅ Windows 桌面端
  • ✅ 移动端 App
  • ✅ 浏览器扩展
  • ✅ Linux 桌面端
  • ⚠️ macOS 桌面端(未完全验证)

准备工作

在开始部署之前,你需要准备以下内容:

  1. Cloudflare 账号 — 注册 Cloudflare,并托管一个域名(workers.dev 域名在国内网络可能被阻断,建议绑定自定义域名)
  2. GitHub 账号 — 用于 Fork 仓库
  3. 信用卡或 PayPal — 绑定 Cloudflare 以开通 R2 存储(免费额度 10GB 足够日常使用;如使用 KV 模式则无需绑定)

方式一:Cloudflare Dashboard 一键部署(推荐)

1. Fork 项目仓库

打开 NodeWarden GitHub 仓库,点击右上角 Fork 按钮,将仓库克隆到你的 GitHub 账号下。

💡 如需自动同步上游更新,可在 Fork 后配置。但作者提醒:曾因重构导致通行密钥失效,同步上游时请谨慎。

2. 在 Cloudflare 中创建 Worker

  1. 登录 Cloudflare Dashboard
  2. 进入 Workers 和 Pages创建应用程序Pages连接到 Git
  3. 授权 Cloudflare 访问你的 GitHub,选择你 Fork 的 NodeWarden 仓库
  4. 配置构建信息:
    • 构建命令npm run build
    • 部署命令npm run deploy(R2 模式,默认)
    • 如未开通 R2,改为:npm run deploy:kv(KV 模式)
  5. 点击 保存并部署,等待构建完成

3. 绑定自定义域名

  1. 在 Worker 详情页 → 设置域和路由自定义域
  2. 添加你的域名(例如 pw.yourdomain.com
  3. 等待 SSL 证书颁发

⚠️ Workers 默认的 *.workers.dev 域名在部分网络环境不可直连,强烈建议绑定自定义域名。

4. 配置 JWT_SECRET

  1. 打开你的 NodeWarden 域名,页面会提示 “设置 JWT_SECRET”
  2. 复制生成的随机密钥字符串
  3. 在 Cloudflare Worker 详情页 → 设置变量和机密
  4. 点击 添加变量,类型选择 密钥
    • 变量名JWT_SECRET
    • :粘贴刚才生成的密钥(或使用至少 32 个字符的随机字符串,不要使用临时值或示例值

5. 初始化并使用

  1. 刷新你的 NodeWarden 域名页面
  2. 创建主账号密码,完成登录
  3. Worker 第一次处理请求时会自动初始化 D1 数据库,无需手动上传 SQL

方式二:Wrangler CLI 部署

适合有命令行操作经验的用户:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 克隆仓库
git clone https://github.com/shuaiplus/NodeWarden.git
cd NodeWarden

# 安装依赖
npm install

# 登录 Cloudflare
npx wrangler login

# 部署(R2 模式,默认)
npm run deploy

# 或部署(KV 模式)
npm run deploy:kv

# 本地开发
npm run dev
npm run dev:kv

环境变量说明

变量名 必需 说明
JWT_SECRET JWT 加密密钥,至少 32 个字符的随机字符串。在 Cloudflare 中应作为 密钥 添加
HIDE_WEB_VAULT 设置为 1 可隐藏网页密码库前端,API 接口仍正常工作。删除变量或设为非 1 值恢复

R2 vs KV 存储模式对比

对比项 R2 模式(默认) KV 模式
需绑定信用卡 ✅ 是 ❌ 否
最大附件大小 100 MB(软限制,可调整) 25 MiB(Cloudflare 限制)
免费额度 10 GB 存储 1 GB 存储
部署命令 npm run deploy npm run deploy:kv

建议:日常使用选择 R2 模式,附件容量更大。如果只是个人密码管理,KV 模式也完全够用。


使用教程

设置二步验证(TOTP)

  1. 登录 NodeWarden 网页端 → 账户设置安全开启 TOTP
  2. 如果扫码失败,可直接输入设置密钥手动添加
  3. 务必保存恢复代码! 离线保存一份,以防丢失

连接 Bitwarden 客户端

  1. 下载 Bitwarden 官方客户端(桌面端、浏览器扩展、移动端均可)
  2. 在登录界面选择 自托管(Self-hosted)
  3. 输入你的服务器 URL:https://你的域名
  4. 使用你的账号密码登录即可

导入密码

从浏览器导出:

  1. Chrome/Edge 设置 → 密码 → 导出密码(CSV 格式)
  2. 在 NodeWarden 网页端 → 工具导入数据
  3. 选择格式 Bitwarden (csv),上传文件
  4. 导入后可一键删除重复项

从其他密码管理器导入:
NodeWarden 支持 Bitwarden JSON、CSV、ZIP(含附件)等多种格式。

配置云端备份

NodeWarden 支持自动定时增量备份到 WebDAV 或 S3:

  1. 在网页端 → 云端备份中心新增备份地点
  2. 以 InfiniCLOUD WebDAV 为例:
    • 服务地址:你的 WebDAV 地址
    • 用户名:你的 WebDAV 用户名
    • 应用密码:WebDAV 密码
    • 远程目录:备份存放路径
  3. 启用 自动备份,设置备份频率

配置 Passkeys

  1. 在支持 Passkey 的网站(如 GitHub)设置中 添加通行密钥
  2. Bitwarden 浏览器扩展会自动弹出 “保存通行密钥” 窗口
  3. 关联对应的账号即可

配置设备管理

在 NodeWarden 网页端 → 设置设备管理,你可以:

  • 查看所有已登录设备
  • 撤销设备信任
  • 永久信任常用设备

更新升级

手动更新(Fork 仓库)

  1. 打开你 Fork 的 GitHub 仓库
  2. 页面顶部会提示 “This branch is X commits behind shuaiplus:main”
  3. 点击 Sync forkUpdate branch
  4. Cloudflare 将自动检测并重新部署

⚠️ 更新前建议先备份密码库,以防意外。


常见问题

部署后访问空白页?

检查是否已正确配置 JWT_SECRET,确认变量类型为 密钥 而非明文变量。

附件上传失败?

  • R2 模式:确认已绑定信用卡,R2 存储桶已自动创建
  • KV 模式:附件不能超过 25 MiB

如何隐藏网页端?

在环境变量中添加 HIDE_WEB_VAULT = 1 即可隐藏前端页面,API 仍正常工作。

忘密码了怎么办?

你可以忘记密码,但 绝不能丢掉恢复代码!恢复代码是应对 Cloudflare 服务异常等极端情况的最后保障。建议:

  • 将恢复代码离线保存(纸质备份)
  • 同时备份到第三方密码管理器
  • 所有账号的 TOTP 额外备份到第三方验证器(如 Authy、Google Authenticator)

参考资料