
前言
最近收到 1Password 的邮件,去年白嫖的免费一年家庭组准备过期了。想到我还有 GitHub 学生包,去领的时候发现 “无法通过您的 GitHub 帐户进行身份验证”,估计是和当前邮箱冲突了,之后过期后注销重试看看吧。
用 1Password 的一年已经让我依赖上了密码管理器,可惜它涨价很夸张没法支持正版了。在一些论坛上看到最近讨论很火热的 Bitwarden 的 Cloudflare Workers 开源分支 Nodewarden,于是就试着部署一下,在此记录一下这个过程、遇到的一些问题和解决方法、以及 Cloudflare 的一些加速技巧。
NOTE本文纯手写,仅在除博客外的 Linux DO 社区有部分转载,其他转载希望能标注一下原文哦,谢谢~
部署
按照 Nodewarden 文档 的部署方法可以使用 GitHub Fork 快速部署和 CLI 部署。但是考虑到 Nodewarden 是个管理自己密码的项目,fork 后项目会强制保持公开,之后要是想自己私下修改点什么功能也许就会被别人当成入侵的入口(虽然估计也无人在意就是了,但是密码管理这种比较敏感的还是保持 private 比较好吧)。
所以我使用了 CLI 部署,这种方法会直接把内容存储在 Cloudflare 上,让它能直接部署,保持了一定的隐私性。
NOTE部署前需要准备:
- Cloudflare 账号和一个绑定在 Cloudflare 上的域名。Workers 只允许使用绑定在 Cloudflare 上的域名,实在没有域名可以使用一些免费的能绑定在 Cloudflare 上的二级域名,例如 dnshe 提供的。
- 本地 Node.js 和 git 环境,用于运行 Cloudflare 的 Wrangler。这是 Cloudflare 官方提供的一个管理 Workers 项目的 CLI 工具。
- 一个可以分区域解析的 DNS 工具,用于后续的优选加速,例如 DNSPod 和华为云 DNS(华为云这个貌似我没找到付费的公示)。
首先先将 Nodewarden fork 到本地,在一个英文路径的文件夹中启动终端输入:
git clone https://github.com/shuaiplus/NodeWarden.gitcd NodeWarden在这个文件夹中安装依赖,更新 Wrangler(之前有次尝试我没更新,出现了点错误,建议就更新一下吧),并在 Wrangler 中登录 Cloudflare 账号。
npm installnpm i -D wrangler@latestnpx wrangler login登录会自动弹出网页版登录,并请求授权,直接允许即可。

回到终端,开始安装推送。作者的 deploy 脚本中已经写好了推送的命令,直接运行即可。
# 默认使用 Cloudflare R2 存储npm run deploy
# 可选使用 KV 存储(和上述命令二选一即可)npm run deploy:kv其中默认使用 Cloudflare R2 来存储,还可以选 Cloudflare Workers 里的 KV 存储。它们对比如下:
- Cloudflare R2:免费额度有 每月 10 GB 的存储,100 万次/月的频繁请求次数。它还 完全兼容 S3 API,方便调用。R2 属于是量大管饱了,推荐使用。
- Cloudflare Workers KV:免费额度共有 1 GB 的存储,每天 10 万次的 KV 读取。
那肯定还是建议使用 R2 去存储,首次使用 R2 需要在 Cloudflare 绑定支付信息。支持信用卡和 PayPal。亲自测试过了,国内的 PayPal 绑储蓄卡都能绑上。
首次启动需要先去开通,开通地址:https://dash.cloudflare.com/?to=/:account/r2/overview
使用上述命令部署成功后,一般会出现一个 Workers 的地址形如:https://**.workers.dev。这个时候我们打开 Cloudflare Workers 管理页面 就可以看到新部署的 Nodewarden。
点击该项目进入后,在 域 (Domain) 处可以添加自定义域名,Workers 只允许托管于 Cloudflare DNS 上的域名绑定。默认的 .workers.dev 域名在大陆也许访问效果不佳,之后的章节中有介绍优化访问速度的技巧。
此时回到本地的终端上,我们需要设置 JWT_SECRET ,这个 key 值关系项目的安全。
根据官方的要求,JWT_SECRET 建议使用 32 位以上随机字符串。不要使用示例值,也不要写进 wrangler.toml、.dev.vars 或 GitHub 仓库。
在终端处继续输入:
npx wrangler secret put JWT_SECRET根据提示输入你的随机密钥即可。你可以使用一些随机密钥生成器,或者在添加前直接访问那个生成的 Workers 域名 https://**.workers.dev 去生成密钥,填入终端即可。
在设置好密钥以及你的域名后(暂时用 Workers 域名也可以,后面再绑定),打开对应的域名,进入项目主页。首次进入会要求创建账户,这个账户将成为管理员。记得记住 主密码,这是用于后续连接账户的重要凭证。

到这里部署部分就结束了,接下来就是项目的设置了。
设置与使用
登录进入 Nodewarden 内部后,就可以通过 导入导出 来导入我们之前的密码了。
这里支持很多其他密码器的导入,具体可以看看 导入教程。我之前使用的是 1Password,它的导出有点麻烦,需要使用客户端,并且综合到一个保险箱中。
例如我这里把所以密码全部迁移到 个人 保险箱里,然后点击左上角三个点,找到导出即可。

导出后是一个形如 *.1pux 的文件,回到项目的导入位置,选择好对应的格式导入即可。

IMPORTANT1Password 中存储的 通行密钥 (Passkey) 和 “通过 xxx 登录(例如 Google)” 无法迁移,需要手动重新设置新的通行密钥。
导入之后,按照官方的建议,还可以给项目添加上二步验证、通行密钥等,具体请看官方教程。https://nodewarden.app/zh/guide/security/two-factor-devices
此外,你还可以添加定时的备份,保证数据的安全。在 云端备份 处,可以添加备份的信息。支持 WebDAV 和 S3 API。它的左侧还提供了一些常见的备份服务商接入的方法,按照官方的方法很快就能添加成功了。

这个项目我们使用起来也非常简单,因为它是基于 Bitwarden 的自托管分支。以 Google Chrome 浏览器为例,我们先在 Bitwarden 官网下载并安装其浏览器插件:https://bitwarden.com/download/#downloads-web-browser-extensions
首次登录我们需要选择服务器为自托管的:

填上你的项目域名,这里以没有绑定其他域名的 Workers 默认域名为例:

选择好后,填入前面创建项目的账号和主密码登录使用即可。
其他设备的登录方法也类似,至此设置和使用部分已经完结。
访问速度优化
大家都知道在大陆访问 Cloudflare Workers 生成的 *.workers.dev 速度感人,有些地方还会被阻断。如果绑定自己的域名,奈何 Cloudflare Workers 只支持绑定在 Cloudflare 上的 (子) 域名,直连速度上几乎没有什么改变,只是阻断变少了。
而我们知道目前主流的加速访问 Cloudflare 托管域名的方法就是使用优选,但是优选一般通过 Cloudflare SaaS 添加回退源来解决。实测对同一个域名使用 Cloudflare SaaS 添加自定义主机后 会自动取消 Workers 的域名绑定,这让我们很难通过这种方法来优选解析。
此外,优选一般作用于可以分地区/运营商解析的 DNS 服务上,Cloudflare 也不支持分地区解析。如果要对某个子域名分地区解析,则 可以添加该子域名的 NS 记录到支持的 DNS 解析服务上。之后以 DNSPod 免费版和一个绑定在 Cloudflare 上的域名为例,该域名的解析在文章发出之前已经删除了。
然而可以发现,在 Workers 处绑定了域名之后,就无法给该子域名添加 NS 记录了,如图:

我在自己使用 Workers 服务的时候发现了个小技巧,可以利用 (时间)错位解析 的方法绕过这个限制。
首先删除 在 Workers 绑定的子域名,并为该子域名添加上 DNSPod 的 NS 记录。


首次在 DNSPod 绑定该子域名还需要添加一个 TXT 记录作为验证:

等待一下 DNS 的解析,在 DNSPod 处检测到生效即可。接下来 先添加一个指向 Workers 域名的 CNAME,并设置路线为 默认(不先添加默认的话 DNSPod 就报错了)。

然后就是给境内添加优选了,我这里直接使用最简单的 CNAME 一个优选域名的方法来实现。添加一条指向优选域名的 CNAME,并设置路线为 境内。我这里使用的是微测网 提供的优选地址:*.cloudflare.182682.xyz。

回到 Cloudflare Workers 域管理,重新添加该域名到 Workers 里。去到该域名的 DNS 页面,就可以发现 NS 记录和这条绑定共存了。

此时,访问你的域名看看能否就好了。Cloudflare 检测到你的子域名走的默认路线,是 Workers 域名的 CNAME,绑定没问题。而在境内则走的是优选的 Cloudflare 线路,同样也是 Cloudflare 的 CDN,故访问没问题。
来到测速网站测试发现,该域名走的优选路线,延迟低了很多。

DNS 查询发现分流优选成功了。

IMPORTANT当然我觉得这可能只是 Cloudflare 的 bug,在目前没有修复之前就悄悄的用吧。
后记
以上是我在 Cloudflare Workers 自建 Nodewarden,迁移 1Password,并使用了个小技巧优选的过程了,如果能对你的部署有帮助的话就更好了哈哈哈。如果有什么写得不对的地方欢迎在评论区指出。
