跳过正文

密码库自托管?NodeWarden!

·6 分钟· loading
asm2apex
作者
asm2apex
目录

博文概览
#

博文概览

你是不是也有这种纠结:想用密码管理器,但又不太想把整份密码库交给第三方;想自托管,又不想为了一个密码库专门养 VPS、配数据库、折腾反代和证书。

NodeWarden 刚好卡在这个位置:它是一个运行在 Cloudflare Workers 上的 Bitwarden 兼容服务端,能接 Bitwarden 的客户端生态,又把部署和运行交给 Cloudflare 这套托管基础设施。

先把丑话说前面:密码库不是图床,丢了、泄了、误删了,都不是“再传一张图”能解决的事。本文只讲部署流程,不替你承诺绝对安全。正式使用前至少做到:

  • 主密码足够强
  • JWT_SECRET 用随机强密钥,别用示例值
  • 定期导出或远程备份
  • 重要账号别只压在一个自托管服务上

这篇文章做四件事:

  1. Fork NodeWarden 项目,并开启上游同步
  2. 在 Cloudflare Workers & Pages 里从 GitHub 部署
  3. 根据首次访问提示补齐 Secret/变量
  4. 绑定自定义域名,让它变成自己的密码库入口

0. 先讲清楚:NodeWarden 是什么
#

NodeWarden 的定位很直接:运行在 Cloudflare Workers 上的 Bitwarden 兼容服务端

它不是 Bitwarden 官方服务端,也不要把它当成官方平替去找 Bitwarden 客服。你可以把它理解成一个更轻量的自托管方案:用 Cloudflare Workers 承接服务端,用 D1/R2 或 KV 这类托管能力保存数据,再让你继续使用熟悉的 Bitwarden 客户端。

适合它的人:

  • 想自托管密码库,但不想维护服务器
  • 已经有 Cloudflare 账号和自己的域名
  • 能接受开源项目的能力边界和更新节奏
  • 愿意自己负责备份和密钥管理

不太适合它的人:

  • 需要企业组织、集合权限、SSO、SCIM 之类的完整企业能力
  • 不想碰任何 Cloudflare 配置
  • 不愿意承担自托管密码库的备份责任

一句话:它解决的是“我想要一个轻量、可控、能跑在 Cloudflare 上的密码库服务端”,不是解决“我从此再也不用管密码安全”。

1. 准备工作:别开局就卡在账号上
#

你需要准备这些东西:

  • 一个自己的域名
  • 一个 Cloudflare 账号
  • 一个 GitHub 账号
  • 能正常访问 Cloudflare 和 GitHub 的网络环境

域名在哪里买都行,Spaceship、Cloudflare Registrar、Namesilo 这类都可以,关键是域名要在你手里。密码库这种东西,别长期挂在临时域名上。

Cloudflare 账号这里要注意一点:默认 R2 模式通常需要账号完成绑卡验证。你如果暂时不想绑卡,可以考虑 KV 模式,但 KV 的单文件大小和免费额度都更紧。简单说:

  • R2:更适合长期用,附件空间更宽松
  • KV:门槛低一些,但限制更明显

别在这一步纠结到天荒地老。你如果打算认真用,优先 R2;只是体验一下,可以先看 KV 模式。

2. Fork 项目:先把代码放到自己名下
#

项目地址:

打开项目后,点击右上角 Fork,把仓库复制到自己的 GitHub 账号下。

Fork 的目的不是“显得很专业”,而是让 Cloudflare 后面能从你的仓库构建和部署。更重要的是,你可以控制什么时候同步上游,而不是每次上游变化都直接影响你的生产环境。

3. 开启自动同步:别把更新全靠记性
#

进入你 Fork 出来的仓库:

GitHub -> Actions -> Sync upstream -> Enable workflow

这样它会按项目内置的 workflow 自动同步上游。你也可以手动更新:

GitHub 仓库首页 -> Sync fork -> Update branch

我的建议很简单:自动同步可以开,但生产密码库别完全“闭眼更新”。项目有大版本变动时,先看一下更新说明,再决定什么时候部署。密码库这种服务,稳定比新鲜更重要。

4. 创建 Cloudflare Worker:让 Cloudflare 替你跑
#

快速入口:

打开后选择:

Continue with GitHub

第一次使用时,Cloudflare 会让你授权 GitHub。授权后选择刚刚 Fork 出来的 nodewarden 仓库。

如果页面已经自动识别好了配置,就按默认配置继续部署。如果 Cloudflare 页面需要你手动填构建和部署命令,可以按下面这样填:

Build command: npm run build
Deploy command: npm run deploy

如果你明确要走 KV 模式,把部署命令改成:

npm run deploy:kv

然后点击部署,等 Cloudflare 构建完成。这个过程别疯狂刷新,给它一点时间。页面自动跳转后,可以隔一会儿刷新部署状态,直到看到 production 部署成功。

5. 首次访问:跟着“密码提示”补配置
#

部署完成后,Cloudflare 会给你一个默认访问域名。点进去,看到 NodeWarden 的登录页面后,先别急着注册。

第一次访问时,点击登录界面的「查看密码提示」。这个页面会告诉你当前还缺哪些关键配置。

最常见的是缺少 JWT_SECRET。处理方式是:

Cloudflare Dashboard -> Workers & Pages -> 你的 NodeWarden 项目 -> Settings -> Variables and Secrets

新增 Secret:

JWT_SECRET=<一段足够长的随机字符串>

正式环境别用临时值,也别用网上教程里的示例值。你可以在本机生成一个:

openssl rand -base64 48

保存后重新部署。再回到 NodeWarden 页面刷新,如果密码提示里不再报这个问题,说明这一步过了。

6. 绑定自定义域名:别长期用 workers.dev
#

Cloudflare 默认分配的 workers.dev 域名能用,但不建议长期当主入口。

原因很现实:

  • 有些网络环境下 workers.dev 不稳定
  • 自定义域名更好记,也更方便以后迁移
  • 密码管理器客户端里填自己的域名,心理上也更清楚

到 Worker 设置里添加自定义域名:

Workers & Pages -> 你的项目 -> Settings -> Domains & Routes -> Add Custom Domain

比如:

vault.your-domain.com

如果域名已经托管在 Cloudflare,通常按提示点完就能自动配置 DNS 和证书。等状态变成 active 后,用浏览器打开:

https://vault.your-domain.com

能正常看到 NodeWarden 登录页面,就说明入口已经换好了。

7. 客户端怎么连:填自己的服务地址
#

NodeWarden 兼容 Bitwarden 客户端,所以桌面端、手机 App、浏览器扩展都可以按自托管服务来配置。

大致路径是:

Bitwarden 客户端 -> 设置服务器地址 -> 填你的自定义域名

例如:

https://vault.your-domain.com

然后再登录或注册对应账号。这里建议你先用一个测试账号验证同步、导入、导出和浏览器扩展登录流程,别一上来就把所有正式密码倒进去。先跑通闭环,再迁移核心数据。

8. 备份:密码库最不该省的步骤
#

NodeWarden 支持导入导出,也有远程备份能力。无论你用哪种方式,原则只有一个:

密码库一定要有备份,而且备份要能恢复。

别只做“我导出过一次”的心理安慰。你至少应该验证:

  • 导出的文件能正常下载
  • 附件是否包含在备份策略里
  • 换一个空实例能否恢复
  • 备份文件放在哪里,谁能访问

密码库自托管最容易翻车的点,不是部署失败,而是“平时看起来一切正常,真出事时没有可用备份”。

9. 常见翻车点
#

9.1 打开默认域名失败
#

先别怀疑自己部署错了。workers.dev 在部分网络环境下就是可能不稳定。

解决方式:尽快绑定自定义域名,然后用自定义域名访问。

9.2 页面提示缺少 JWT_SECRET
#

去 Worker 的 Variables and Secrets 里添加 Secret,保存后重新部署。

注意是 Secret,不是随便写在代码里。密钥进 Git,等于把门钥匙挂在门上。

9.3 客户端同步失败
#

先检查三件事:

  • 客户端服务器地址是不是你的自定义域名
  • 域名是否是 HTTPS
  • Worker 是否重新部署过最新配置

别一上来就怀疑客户端。大多数时候,是入口地址或部署配置没对齐。

9.4 R2 和 KV 选哪个
#

如果你只是轻量测试,KV 可以先跑起来;如果你准备长期用,尤其会用附件或 Send 文件,优先 R2。

这不是信仰问题,是限制问题。KV 的上限更紧,后面再迁移才是真的麻烦。

10. 我的结论:能跑很简单,敢长期用靠纪律
#

NodeWarden 的部署流程其实不复杂:Fork 仓库,交给 Cloudflare 构建部署,补齐 Secret,再绑定自定义域名。

真正决定体验的不是这十分钟部署,而是后面的三件事:

  • 密钥别乱放
  • 更新别闭眼冲
  • 备份别靠嘴说

把这三件事做好,NodeWarden 就是一个很舒服的轻量自托管密码库方案。它不要求你养服务器,也不逼你把所有东西都交给第三方。中间这条路,刚好够用,也足够清醒。