#relay-server #nostr #server #gnostr #git #sqlite

bin+lib gnostr-relay

gnostr:git+nostr 协议中继

3 个版本

0.0.4 2024 年 7 月 18 日
0.0.3 2024 年 5 月 16 日
0.0.2 2024 年 1 月 28 日

470网络编程

Download history 94/week @ 2024-05-07 193/week @ 2024-05-14 13/week @ 2024-05-21 3/week @ 2024-06-11 8/week @ 2024-07-02 103/week @ 2024-07-16 21/week @ 2024-07-23 12/week @ 2024-07-30

136 每月下载

MIT 许可证

570KB
8K SLoC

nostr-rs-relay

这是一个用 Rust 编写的 nostr 中继。它目前支持完整的 relay 协议,并使用 SQLite 持久化数据。实验性支持 Postgresql。

项目主仓库可在 sourcehut 上找到,并在 GitHub 上镜像。

builds.sr.ht status

Github CI

功能

NIPs 列出了具有特定中继实现的 NIP。

快速入门

提供的 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)

使用类似于 nosclnostr 客户端来发布和查询事件。

$ 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