3 个不稳定版本
0.8.12 | 2023 年 8 月 11 日 |
---|---|
0.8.11 | 2023 年 8 月 5 日 |
0.7.2 | 2022 年 11 月 19 日 |
#679 在 网络编程
26 每月下载量
390KB
8K SLoC
nostr-rs-relay
这是一个用 Rust 编写的 nostr 网关。它目前支持整个网关协议,并使用 SQLite 持久化数据。对 Postgresql 有实验性支持。
项目主仓库可在 sourcehut 上找到,并在 GitHub 上镜像。
功能
NIPs 列出了特定于网关的实现。
- NIP-01: 基本协议流程描述
- 核心事件模型
- 隐藏旧元数据事件
- Id/Author 前缀搜索
- NIP-02: 联系列表和昵称
- NIP-03: 事件 OpenTimestamps 认证
- 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)
使用 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