• Stars
    star
    406
  • Rank 106,421 (Top 3 %)
  • Language
    Rust
  • License
    MIT License
  • Created almost 3 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Mirror of https://sr.ht/~gheartsfield/nostr-rs-relay/

nostr-rs-relay

This is a nostr relay, written in Rust. It currently supports the entire relay protocol, and persists data with SQLite. There is experimental support for Postgresql.

The project master repository is available on sourcehut, and is mirrored on GitHub.

builds.sr.ht status

Github CI

Features

NIPs with a relay-specific implementation are listed here.

Quick Start

The provided Dockerfile will compile and build the server application. Use a bind mount to store the SQLite database outside of the container image, and map the container's 8080 port to a host port (7000 in the example below).

The examples below start a rootless podman container, mapping a local data directory and config file.

$ 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)

Use a nostr client such as noscl to publish and query events.

$ noscl publish "hello world"
Sent to 'ws://localhost:8090'.
Seen it on 'ws://localhost:8090'.
$ noscl home
Text Note [81cf...2652] from 296a...9b92 5 seconds ago
  hello world

A pre-built container is also available on DockerHub: https://hub.docker.com/r/scsibug/nostr-rs-relay

Build and Run (without Docker)

Building nostr-rs-relay requires an installation of Cargo & Rust: https://www.rust-lang.org/tools/install

The following OS packages will be helpful; on Debian/Ubuntu:

$ sudo apt-get install build-essential cmake protobuf-compiler pkg-config libssl-dev

Clone this repository, and then build a release version of the relay:

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

The relay executable is now located in target/release/nostr-rs-relay. In order to run it with logging enabled, execute it with the RUST_LOG variable set:

$ 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)

You now have a running relay, on port 8080. Use a nostr client or websocat to connect and send/query for events.

Configuration

The sample config.toml file demonstrates the configuration available to the relay. This file is optional, but may be mounted into a docker container like so:

$ 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

Options include rate-limiting, event size limits, and network address settings.

Reverse Proxy Configuration

For examples of putting the relay behind a reverse proxy (for TLS termination, load balancing, and other features), see Reverse Proxy.

Dev Channel

For development discussions, please feel free to use the sourcehut mailing list. Or, drop by the Nostr Telegram Channel.

To chat about nostr-rs-relay on nostr itself; visit our channel on anigma or another client that supports NIP-28 chats:

  • 2ad246a094fee48c6e455dd13d759d5f41b5a233120f5719d81ebc1935075194

License

This project is MIT licensed.

External Documentation and Links

More Repositories

1

feedparser-clj

Atom/RSS Feed Parsing for Clojure
Clojure
102
star
2

hbeanstalk

haskell client for beanstalk message queue
Haskell
15
star
3

fermata

fake MTA for application testing
Scala
12
star
4

hS3

Haskell
9
star
5

7-databases

Ruby
8
star
6

tarski_logic

Solutions for Tarski's Introduction to Logic
TeX
5
star
7

btc-osx-wallet-backup

Automate swapping Bitcoin wallets around and backing up with Git
Perl
4
star
8

read52

Keep track of your 52-books-in-52-weeks goal
JavaScript
3
star
9

msp430_serial

Serial interface to MSP430 Launchpad
C
3
star
10

pairingplace.com

Pairing Place
Scala
3
star
11

nolly

Nostr Microblogging Platform
3
star
12

AppStoreSalesCharting

Example of using R to chart some Apple AppStore sales data.
R
3
star
13

Revelation

versioned migrations for arbitrary data stores
Java
2
star
14

kumquat

Location-based chat with Node.js/Redis
JavaScript
2
star
15

jenkins_census_analysis

Analysis of Jenkins census data
Haskell
2
star
16

osxstats2pulsar

Send OS X system statistics to Apache Pulsar
Python
2
star
17

dallas_open_data_vehicle

Dallas Open Data Hackathon for Vehicle Theft Data
1
star
18

scsibug.github.io

github pages
CSS
1
star
19

BayesianComputationWithR

Code from the book in the UseR! series
R
1
star
20

backup_inventory

Python
1
star
21

Fermata-Site

Website for Fermata project
JavaScript
1
star
22

fermata-compojure

fake MTA for application testing
Clojure
1
star
23

PlacesAndThings

experiments with HTML5 offline storage, client-side DB, and jquery mobile
JavaScript
1
star
24

jSigPad

Java library for creating PNGs from jQuery Signature Pad plugin
Java
1
star
25

minni

search engine and unfiltered playground
Scala
1
star
26

pictureframe

e-ink picture frame
C
1
star
27

class-central

Source code for class-central.com
PHP
1
star
28

jmx_discovery

Demo of local discovery and querying of JMX servers
Java
1
star
29

UserRegistrationSignature

testing sigpad library
1
star
30

blunderbore

Happstack beanstalk status webapp
JavaScript
1
star
31

scala-selenium-explore

Playing with Scala+Selenium+ScalaTest
Scala
1
star
32

tagexif

Collection of scripts to aid in tagging EXIF/XMP data on photos taken with analog cameras.
Python
1
star
33

FB_SemanticWebExporter

Export FOAF/SIOC linked data from Facebook
Python
1
star
34

SPARQLPad

JavaScript
1
star
35

vsmp

Very Slow Movie Player
Python
1
star