1068 字
5 分钟
Nosflare——基于Cloudflare Workers 和 R2部署的Nostr中继

前言#

最近放弃了自建Mastodon,还是因为服务器的问题,在购买了某一家服务器后经常性的出现系统问题,或是失联或是某些奇怪的bug,导致频繁重装恢复数据,实在是太烦躁,就去了解了一下有没有类似的可替代应用,于是乎发现了Nostr。 在网上能搜到有关Nostr的中文内容也是比较少,关于社交方面的内容,我个人是这样理解的: 当你在客户端上发布内容,你可以同时广播到很多中继上去,多份Copy会让你的数据难以消除。(就算不添加中继,你的内容也是可以保存在本地,等有网络之后再将文章广播到各个中继上) 这一点不同于Mastodon(ActivityPub)存储在本地服务器上。 对于个人小型服务器,很容易因为添加了各种中继存储爆满,或者各种服务器资金问题或者其他各种问题失联,这些中继基本只存储数据内容。 上传图片方面:你可以选择别的图片服务来上传图片,或者某些支持上传图片的中继。 最近发现一个基于Cloudflare Workers的中继项目,并且使用R2作为数据存储,这下用于搭建中继的服务器钱也可以省下了,搭建这个中继需要的仅是一个域名和未来可能的R2费用。

原作者仓库:https://github.com/Spl0itable/nosflare 支持一系列的 NIPS, 包括 NIPs 1, 2, 4, 5, 9, 11, 12, 15, 16, 17, 20, 22, 33, 和 40。 每个NIP都有一个功能,具体介绍可以查看:NIPS-README

本教程偏小白向,不使用Wrangler CLI,主要作个人记录,如果你有一定基础,请看原作者仓库部署

正式部署#

  1. 进入Cloudflare控制面板,打开 Workers和Pages。
  2. 创建应用程序 - 创建Worker。
  3. 将 repo 克隆到你的机器上,然后在文件编辑器中打开 worker.js 我都在旁边进行了注释,根据需要进行修改
const relayInfo = {
  name: "Nosflare", // 中继名称
  description: "A serverless Nostr relay through Cloudflare Worker and R2 bucket", // 中继描述
  pubkey: "d49a9023a21dba1b3c8306ca369bf3243d8b44b8f0b6d1196607f7b0990fa8df", // 中继公钥
  contact: "lucas@censorship.rip", // 联系方式
  supported_nips: [1, 2, 4, 5, 9, 11, 12, 15, 16, 17, 20, 22, 33, 40], // 支持的NIP列表
  software: "https://github.com/Spl0itable/nosflare", // 软件链接
  version: "3.17.14", // 版本号
};

// 中继图标
const relayIcon = "https://workers.cloudflare.com/resources/logo/logo.svg"; // 中继图标URL

// Nostr地址NIP-05验证的用户
const nip05Users = {
  "lucas": "d49a9023a21dba1b3c8306ca369bf3243d8b44b8f0b6d1196607f7b0990fa8df", // NIP-05验证的用户
  // ... 更多NIP-05验证的用户
};

// 被阻止的公钥
// 以十六进制格式添加公钥字符串以阻止写入访问

const blockedPubkeys = [
  // ... 被阻止的公钥
];

// 被允许的公钥
// 以十六进制格式添加公钥字符串以允许写入访问
const allowedPubkeys = [
  // ... 被明确允许的公钥
];

你可以进行的操作: 1. 编辑 nip05Users 部分,为 NIP-05 已验证的 Nostr 地址添加用户名及其十六进制密钥。 2. 编辑 blockedPubkeys 或 allowedPubkeys 和 blockedEventKinds 或 allowedEventKinds ,使之成为阻止列表或允许列表的密钥和事件类型。 3. 编辑 blockedContent 以屏蔽特定单词和/或短语。 4. 编辑 blastRelays ,为爆破事件指定其他继电器。 5. 编辑 excludedRateLimitKinds 以将事件类型排除在速率限制之外。

  1. 在文件夹根运行指令: esbuild worker.js --bundle --outfile=dist/worker.js --platform=neutral --target=es2020

  2. 你会发现已经生成了一份文件,查看 dist/worker.js

  3. 编辑Workers代码,将的内容dist/worker.js完整复制进去并点击部署。

  4. 进入R2并创建存储桶

  5. 为其连接自定义域名

  6. 进入域名主页概览,查看区域ID,并记录

  7. 点击获取API令牌,创建自定义令牌,选择缓存清除,区域选择你的域名,记录下你的API。

  8. 进入Workers,添加环境变量 分别填入apiToken、customDomain(R2的子域名),zoneID(区域ID)

  9. 链接存储桶,变量名称为relayDb 此时你的服务已经可以运行

可选的操作#

通过执行高缓存率和较长的 Cloudflare 边缘 TTL 以及启用速率限制来确保中继的最佳性能,以防止中继被滥用。

Nosflare——基于Cloudflare Workers 和 R2部署的Nostr中继
https://z3z.xyz/posts/nosflare/
作者
z3z
发布于
2024-06-05
许可协议
CC BY-NC-SA 4.0