3 个版本
0.0.4 | 2024 年 7 月 18 日 |
---|---|
0.0.3 | 2024 年 5 月 16 日 |
0.0.2 | 2024 年 1 月 28 日 |
470 在 网络编程
136 每月下载
570KB
8K SLoC
nostr-rs-relay
这是一个用 Rust 编写的 nostr 中继。它目前支持完整的 relay 协议,并使用 SQLite 持久化数据。实验性支持 Postgresql。
项目主仓库可在 sourcehut 上找到,并在 GitHub 上镜像。
功能
NIPs 列出了具有特定中继实现的 NIP。
- NIP-01: 基本协议流程描述
- 核心事件模型
- 隐藏旧元数据事件
- Id/作者前缀搜索
- NIP-02: 联系人列表和昵称
- NIP-03: 事件的开源时间戳证明
- NIP-05: 将 nostr 密钥映射到基于 DNS 的互联网标识符
- NIP-09: 事件删除
- NIP-11: 中继信息文档
- NIP-12: 通用标签查询
- NIP-15: 存储事件结束通知
- NIP-16: 事件处理
- NIP-20: 命令结果
- NIP-22: 事件
created_at
限制 (仅未来日期事件) - NIP-26: 事件委派 (已实现,但当前已禁用)
- NIP-28: 公共聊天
- NIP-33: 参数化可替换事件
- NIP-40: 过期时间戳
- NIP-42: 客户端到中继的认证
快速入门
提供的 Dockerfile
将编译并构建服务器应用程序。使用绑定挂载将 SQLite 数据库存储在容器镜像之外,并将容器的 8080 端口映射到主机端口(以下示例中的 7000)。
以下示例启动了一个无根 podman 容器,映射本地数据目录和配置文件。
$ podman build -t nostr-rs-relay .
$ mkdir data
$ podman unshare chown 100:100 data
$ podman run -it --rm -p 7000:8080 \
--user=100:100 \
-v $(pwd)/data:/usr/src/app/db:Z \
-v $(pwd)/config.toml:/usr/src/app/config.toml:ro,Z \
--name nostr-relay nostr-rs-relay:latest
Nov 19 15:31:15.013 INFO nostr_rs_relay: Starting up from main
Nov 19 15:31:15.017 INFO nostr_rs_relay::server: listening on: 0.0.0.0:8080
Nov 19 15:31:15.019 INFO nostr_rs_relay::server: db writer created
Nov 19 15:31:15.019 INFO nostr_rs_relay::server: control message listener started
Nov 19 15:31:15.019 INFO nostr_rs_relay::db: Built a connection pool "event writer" (min=1, max=4)
Nov 19 15:31:15.019 INFO nostr_rs_relay::db: opened database "/usr/src/app/db/nostr.db" for writing
Nov 19 15:31:15.019 INFO nostr_rs_relay::schema: DB version = 0
Nov 19 15:31:15.054 INFO nostr_rs_relay::schema: database pragma/schema initialized to v7, and ready
Nov 19 15:31:15.054 INFO nostr_rs_relay::schema: All migration scripts completed successfully. Welcome to v7.
Nov 19 15:31:15.521 INFO nostr_rs_relay::db: Built a connection pool "client query" (min=4, max=128)
使用类似于 noscl
的 nostr
客户端来发布和查询事件。
$ noscl publish "hello world"
Sent to 'ws://127.0.0.1:8090'.
Seen it on 'ws://127.0.0.1:8090'.
$ noscl home
Text Note [81cf...2652] from 296a...9b92 5 seconds ago
hello world
在 DockerHub 上也提供预构建的容器:[https://hub.docker.com/r/scsibug/nostr-rs-relay](https://hub.docker.com/r/scsibug/nostr-rs-relay)
构建和运行(无 Docker)
构建 nostr-rs-relay
需要安装 Cargo 和 Rust:https://rust-lang.net.cn/tools/install
以下操作系统包将很有帮助;在 Debian/Ubuntu
$ sudo apt-get install build-essential cmake protobuf-compiler pkg-config libssl-dev
克隆此存储库,然后构建中继的发布版本
$ git clone -q https://git.sr.ht/\~gheartsfield/nostr-rs-relay
$ cd nostr-rs-relay
$ cargo build -q -r
中继的可执行文件现在位于 target/release/nostr-rs-relay
。为了启用日志记录来运行它,请使用 RUST_LOG
变量执行它
$ RUST_LOG=warn,nostr_rs_relay=info ./target/release/nostr-rs-relay
Dec 26 10:31:56.455 INFO nostr_rs_relay: Starting up from main
Dec 26 10:31:56.464 INFO nostr_rs_relay::server: listening on: 0.0.0.0:8080
Dec 26 10:31:56.466 INFO nostr_rs_relay::server: db writer created
Dec 26 10:31:56.466 INFO nostr_rs_relay::db: Built a connection pool "event writer" (min=1, max=2)
Dec 26 10:31:56.466 INFO nostr_rs_relay::db: opened database "./nostr.db" for writing
Dec 26 10:31:56.466 INFO nostr_rs_relay::schema: DB version = 11
Dec 26 10:31:56.467 INFO nostr_rs_relay::db: Built a connection pool "maintenance writer" (min=1, max=2)
Dec 26 10:31:56.467 INFO nostr_rs_relay::server: control message listener started
Dec 26 10:31:56.468 INFO nostr_rs_relay::db: Built a connection pool "client query" (min=4, max=8)
您现在有一个正在运行的中继,在端口 8080
上。使用 nostr
客户端或 websocat
连接并发送/查询事件。
配置
示例 config.toml
文件展示了中继可用的配置。此文件是可选的,但可以像这样挂载到 Docker 容器中
$ docker run -it -p 7000:8080 \
--mount src=$(pwd)/config.toml,target=/usr/src/app/config.toml,type=bind \
--mount src=$(pwd)/data,target=/usr/src/app/db,type=bind \
nostr-rs-relay
选项包括速率限制、事件大小限制和网络地址设置。
反向代理配置
有关将中继放在反向代理后面的示例(用于 TLS 终止、负载均衡和其他功能),请参阅 反向代理。
开发频道
有关开发讨论,请随时使用 sourcehut 邮件列表。或者,访问 Nostr Telegram 频道。
要在 nostr 本身上聊天关于 nostr-rs-relay
;访问我们在 anigma 或支持 NIP-28 聊天的另一个客户端上的频道
2ad246a094fee48c6e455dd13d759d5f41b5a233120f5719d81ebc1935075194
许可证
本项目采用 MIT 许可证。
外部文档和链接
依赖项
~85MB
~1.5M SLoC