3 个不稳定版本

0.8.12 2023 年 8 月 11 日
0.8.11 2023 年 8 月 5 日
0.7.2 2022 年 11 月 19 日

#679网络编程

26 每月下载量

MIT 许可证

390KB
8K SLoC

nostr-rs-relay

这是一个用 Rust 编写的 nostr 网关。它目前支持整个网关协议,并使用 SQLite 持久化数据。对 Postgresql 有实验性支持。

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

builds.sr.ht status

Github CI

功能

NIPs 列出了特定于网关的实现。

快速开始

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

使用 nostr 客户端,例如 noscl 来发布和查询事件。

$ 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

构建和运行(不使用 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

克隆此存储库,然后构建 relay 的发布版本

$ git clone -q https://git.sr.ht/\~gheartsfield/nostr-rs-relay
$ cd nostr-rs-relay
$ cargo build -q -r

现在 relay 可执行文件位于 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)

现在您已经运行了一个 relay,在端口 8080。使用 nostr 客户端或 websocat 连接并发送/查询事件。

配置

以下示例 config.toml 文件演示了 relay 可用的配置。此文件是可选的,但可以像这样挂载到 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

选项包括速率限制、事件大小限制和网络地址设置。

反向代理配置

有关将 relay 放在反向代理后的示例(用于 TLS 终止、负载均衡等功能),请参阅 反向代理

开发频道

有关开发讨论,请随时使用 sourcehut 邮件列表。或者,访问 Nostr Telegram 频道

要在 nostr 上讨论 nostr-rs-relay;请访问我们在 anigma 或支持 NIP-28 会话的另一个客户端的频道

  • 2ad246a094fee48c6e455dd13d759d5f41b5a233120f5719d81ebc1935075194

许可证

本项目采用 MIT 许可证。

依赖项

~85MB
~1.5M SLoC