NodeWarden部署教程:零成本自建Bitwarden密码管理器
NodeWarden部署教程:零成本自建Bitwarden密码管理器
luoli前言
NodeWarden 是一个运行在 Cloudflare Workers 上的 Bitwarden 兼容服务端。简单来说:花 0 元,用 Cloudflare 免费额度,就能搭建一个属于自己的密码管理器。
与传统的 Vaultwarden(需要 VPS)不同,NodeWarden 部署在 Cloudflare 全球边缘节点上,无需服务器,性能极速,数据安全私有化。
- 项目地址:https://github.com/shuaiplus/NodeWarden
- 官方 Wiki:https://nodewarden.app
- 交流群组:Telegram 频道 | Telegram 群组
⚠️ 免责声明:本项目仅供学习交流使用,请定期备份密码库,作者不对数据丢失负责。本项目与 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 桌面端(未完全验证)
准备工作
在开始部署之前,你需要准备以下内容:
- Cloudflare 账号 — 注册 Cloudflare,并托管一个域名(workers.dev 域名在国内网络可能被阻断,建议绑定自定义域名)
- GitHub 账号 — 用于 Fork 仓库
- 信用卡或 PayPal — 绑定 Cloudflare 以开通 R2 存储(免费额度 10GB 足够日常使用;如使用 KV 模式则无需绑定)
方式一:Cloudflare Dashboard 一键部署(推荐)
1. Fork 项目仓库
打开 NodeWarden GitHub 仓库,点击右上角 Fork 按钮,将仓库克隆到你的 GitHub 账号下。
💡 如需自动同步上游更新,可在 Fork 后配置。但作者提醒:曾因重构导致通行密钥失效,同步上游时请谨慎。
2. 在 Cloudflare 中创建 Worker
- 登录 Cloudflare Dashboard
- 进入 Workers 和 Pages → 创建应用程序 → Pages → 连接到 Git
- 授权 Cloudflare 访问你的 GitHub,选择你 Fork 的
NodeWarden仓库 - 配置构建信息:
- 构建命令:
npm run build - 部署命令:
npm run deploy(R2 模式,默认) - 如未开通 R2,改为:
npm run deploy:kv(KV 模式)
- 构建命令:
- 点击 保存并部署,等待构建完成
3. 绑定自定义域名
- 在 Worker 详情页 → 设置 → 域和路由 → 自定义域
- 添加你的域名(例如
pw.yourdomain.com) - 等待 SSL 证书颁发
⚠️ Workers 默认的
*.workers.dev域名在部分网络环境不可直连,强烈建议绑定自定义域名。
4. 配置 JWT_SECRET
- 打开你的 NodeWarden 域名,页面会提示 “设置 JWT_SECRET”
- 复制生成的随机密钥字符串
- 在 Cloudflare Worker 详情页 → 设置 → 变量和机密
- 点击 添加变量,类型选择 密钥:
- 变量名:
JWT_SECRET - 值:粘贴刚才生成的密钥(或使用至少 32 个字符的随机字符串,不要使用临时值或示例值)
- 变量名:
5. 初始化并使用
- 刷新你的 NodeWarden 域名页面
- 创建主账号密码,完成登录
- Worker 第一次处理请求时会自动初始化 D1 数据库,无需手动上传 SQL
方式二:Wrangler CLI 部署
适合有命令行操作经验的用户:
1 | # 克隆仓库 |
环境变量说明
| 变量名 | 必需 | 说明 |
|---|---|---|
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)
- 登录 NodeWarden 网页端 → 账户设置 → 安全 → 开启 TOTP
- 如果扫码失败,可直接输入设置密钥手动添加
- 务必保存恢复代码! 离线保存一份,以防丢失
连接 Bitwarden 客户端
- 下载 Bitwarden 官方客户端(桌面端、浏览器扩展、移动端均可)
- 在登录界面选择 自托管(Self-hosted)
- 输入你的服务器 URL:
https://你的域名 - 使用你的账号密码登录即可
导入密码
从浏览器导出:
- Chrome/Edge 设置 → 密码 → 导出密码(CSV 格式)
- 在 NodeWarden 网页端 → 工具 → 导入数据
- 选择格式
Bitwarden (csv),上传文件 - 导入后可一键删除重复项
从其他密码管理器导入:
NodeWarden 支持 Bitwarden JSON、CSV、ZIP(含附件)等多种格式。
配置云端备份
NodeWarden 支持自动定时增量备份到 WebDAV 或 S3:
- 在网页端 → 云端备份中心 → 新增备份地点
- 以 InfiniCLOUD WebDAV 为例:
- 服务地址:你的 WebDAV 地址
- 用户名:你的 WebDAV 用户名
- 应用密码:WebDAV 密码
- 远程目录:备份存放路径
- 启用 自动备份,设置备份频率
配置 Passkeys
- 在支持 Passkey 的网站(如 GitHub)设置中 添加通行密钥
- Bitwarden 浏览器扩展会自动弹出 “保存通行密钥” 窗口
- 关联对应的账号即可
配置设备管理
在 NodeWarden 网页端 → 设置 → 设备管理,你可以:
- 查看所有已登录设备
- 撤销设备信任
- 永久信任常用设备
更新升级
手动更新(Fork 仓库)
- 打开你 Fork 的 GitHub 仓库
- 页面顶部会提示 “This branch is X commits behind shuaiplus:main”
- 点击 Sync fork → Update branch
- Cloudflare 将自动检测并重新部署
⚠️ 更新前建议先备份密码库,以防意外。
常见问题
部署后访问空白页?
检查是否已正确配置 JWT_SECRET,确认变量类型为 密钥 而非明文变量。
附件上传失败?
- R2 模式:确认已绑定信用卡,R2 存储桶已自动创建
- KV 模式:附件不能超过 25 MiB
如何隐藏网页端?
在环境变量中添加 HIDE_WEB_VAULT = 1 即可隐藏前端页面,API 仍正常工作。
忘密码了怎么办?
你可以忘记密码,但 绝不能丢掉恢复代码!恢复代码是应对 Cloudflare 服务异常等极端情况的最后保障。建议:
- 将恢复代码离线保存(纸质备份)
- 同时备份到第三方密码管理器
- 所有账号的 TOTP 额外备份到第三方验证器(如 Authy、Google Authenticator)










