前言
最近放弃了自建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,主要作个人记录,如果你有一定基础,请看原作者仓库部署
正式部署
- 进入Cloudflare控制面板,打开 Workers和Pages。
- 创建应用程序 - 创建Worker。
- 将 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 以将事件类型排除在速率限制之外。
在文件夹根运行指令:
esbuild worker.js --bundle --outfile=dist/worker.js --platform=neutral --target=es2020你会发现已经生成了一份文件,查看 dist/worker.js
编辑Workers代码,将的内容dist/worker.js完整复制进去并点击部署。
进入R2并创建存储桶
为其连接自定义域名
进入域名主页概览,查看区域ID,并记录
点击获取API令牌,创建自定义令牌,选择缓存清除,区域选择你的域名,记录下你的API。
进入Workers,添加环境变量 分别填入apiToken、customDomain(R2的子域名),zoneID(区域ID)
链接存储桶,变量名称为relayDb 此时你的服务已经可以运行
可选的操作
通过执行高缓存率和较长的 Cloudflare 边缘 TTL 以及启用速率限制来确保中继的最佳性能,以防止中继被滥用。
