Relé Nostr

Un relé de nostr escrit en Rust amb suport per a tot el protocol de relés i persistència de dades utilitzant SQLite.

Nostr Relé

Preparacions

Instal·leu dependències

Aquestes són dependències de construcció (es pot eliminar després de la instal·lació, si voleu)

$SU apk add --virtual .build-deps cargo cargo-auditable clang-dev cmake git \
    make pkgconf protobuf-c-compiler sqlite-dev

Aquestes són dependències en temps d’execució

$SU apk add sqlite

Creeu l’usuari/grup nostr

$SU addgroup -S nostr
$SU adduser \
    -S \
    -D \
    -H \
    -h /dev/null \
    -s /sbin/nologin \
    -G nostr \
    -g nostr \
    nostr

Afegiu també l’usuari satoshi al grup nostr

$SU adduser satoshi nostr && exec su -l satoshi

Instal·lació

Clona el codi font

Obtenim l’última versió del codi font de nostr-rs-relay, el compilem en un binari executable i l’instal·lem.

  • Baixeu el codi font de la darrera versió de nostr-rs-relay. Podeu consultar la pàgina de llançament per veure si hi ha disponible una versió més recent. Tanmateix, és possible que altres versions no s’hagin provat correctament amb la resta de la configuració de Microbolt.
cd /tmp
VERSION=0.9.0
git clone --branch $VERSION https://git.sr.ht/~gheartsfield/nostr-rs-relay && cd nostr-rs-relay

Configurar, compilar i instal·lar

  • Ara compileu el codi font en un binari executable i instal·leu-lo.
cargo auditable build \
    --bin nostr-rs-relay \
    --release \
    --locked \
    --jobs "$(nproc)"
$SU install -m 0755 -o root -g root -t /usr/bin ./target/release/nostr-rs-relay
$SU install -D -m 0660 -o nostr -g nostr ./config.toml /etc/nostr-rs-relay/config.toml

”Strip” els binaris instal·lats

$SU strip /usr/bin/nostr-rs-relay

Neteja

cd
rm -rf /tmp/nostr-rs-relay
$SU apk del .build-deps

Configuració

  • Modifiqueu el fitxer de configuració amb el contingut següent
$SU $EDITOR /etc/nostr-rs-relay/config.toml
/etc/nostr-rs-relay/config.toml
[...]
#relay_url = "wss://nostr.example.com/"
[...]
name = "Microbolt Nostr Relay"
[...]
description = "A Nostr Relay running on Microbolt"
[...]
address = "127.0.0.1"
[...]
port = 8880
[...]

Inici automàtic a l’arrencada

Nostr Relay s’ha d’iniciar automàticament a l’arrencada del sistema.

  • Creeu la unitat nostr-rs-relay init.d i copieu/enganxeu la configuració següent
$SU $EDITOR /etc/init.d/nostr-rs-relay
/etc/init.d/nostr-rs-relay
#!/sbin/openrc-run
 
: ${NOSTR_RELAY_CONFIGFILE:=/etc/nostr-rs-relay/config.toml}
: ${NOSTR_RELAY_DATADIR:=/var/lib/nostr-rs-relay}
: ${NOSTR_RELAY_LOGDIR:=/var/log/nostr-rs-relay}
: ${NOSTR_RELAY_USER:=nostr}
: ${NOSTR_RELAY_GROUP:=nostr}
: ${NOSTR_RELAY_BIN:=/usr/bin/nostr-rs-relay}
: ${NOSTR_RELAY_RUST_LOG:=info,nostr_rs_relay=info}
: ${NOSTR_RELAY_OPTS=${NOSTR_RELAY_OPTS}}
: ${NOSTR_RELAY_SIGTERM_TIMEOUT:=600}
 
NOSTR_RELAY_PIDDIR="/run/nostr-rs-relay"
 
required_files="${NOSTR_RELAY_CONFIGFILE}"
pidfile="${NOSTR_RELAY_PIDDIR}/${SVCNAME}.pid"
retry="${NOSTR_RELAY_SIGTERM_TIMEOUT}"
 
name="Nostr Relay"
description="A Rust implementation of Nostr relay"
 
command="${NOSTR_RELAY_BIN}"
command_args="--db ${NOSTR_RELAY_DATADIR}
              --config ${NOSTR_RELAY_CONFIGFILE}
              ${NOSTR_RELAY_OPTS}"
command_user="${NOSTR_RELAY_USER}:${NOSTR_RELAY_GROUP}"
command_background="true"
 
start_stop_daemon_args="--env RUST_LOG=${NOSTR_RELAY_RUST_LOG}
                        --stdout ${NOSTR_RELAY_LOGDIR}/debug.log
                        --stderr ${NOSTR_RELAY_LOGDIR}/debug.log"
 
depend() {
    need net
    after logger firewall
}
 
start_pre() {
    checkpath --file      --mode 0660 --owner "${command_user}" "${NOSTR_RELAY_CONFIGFILE}"
    checkpath --directory --mode 0750 --owner "${command_user}" "${NOSTR_RELAY_DATADIR}"
    checkpath --directory --mode 0755 --owner "${command_user}" "${NOSTR_RELAY_LOGDIR}"
    checkpath --directory --mode 0755 --owner "${command_user}" "${NOSTR_RELAY_PIDDIR}"
}
 
stop() {
    ebegin "Stopping ${SVCNAME}"
    pkill -TERM -P "$(cat ${pidfile})" > /dev/null 2>&1
    start-stop-daemon \
        --stop \
        --pidfile="${pidfile}" \
        --retry="${NOSTR_RELAY_SIGTERM_TIMEOUT}" \
        --exec="${NOSTR_RELAY_BIN}"
    eend $?
}
  • Habilita el permís d’execució
$SU chmod +x /etc/init.d/nostr-rs-relay

Habilita logrotate

  • Introduïu la configuració següent completa. Guardar i sortir
/etc/logrotate.d/nostr-rs-relay
/var/log/nostr-rs-relay/*.log {
    weekly
    missingok
    rotate 104
    compress
    delaycompress
    notifempty
    create 0640 nostr nostr
    sharedscripts
    postrotate
        kill -HUP `cat /run/nostr-rs-relay/nostr-rs-relay.pid`
    endscript
}
  • Prova
$SU logrotate /etc/logrotate.d/nostr-rs-relay --debug

Activa i inicia Nostr relay

$SU rc-update add nostr-rs-relay
$SU rc-service nostr-rs-relay start
  • Comproveu el registre per veure la sortida del relé Nostr. Sortiu amb Ctrl-C
tail -f /var/log/nostr-rs-relay/debug.log
  • Assegureu-vos que el servei estigui funcionant i escoltant al port predeterminat 8880
$SU netstat -lntup | grep LISTEN | grep nostr
output
tcp        0      0 0.0.0.0:8880            0.0.0.0:*               LISTEN      7030/nostr-rs-relay

Per al futur: actualització de Nostr relay

Torneu a seguir la pàgina Relé Nostr substituint el valor de la variable d’entorn VERSION=x.xx per l’últim si encara no s’ha modificat en aquesta guia.

  • Actualitzeu la configuració del relé Nostr si cal (vegeu les notes de la versió)
$SU $EDITOR /etc/nostr-rs-relay/config.toml
  • Reinicieu el servei per aplicar els canvis
$SU rc-service nostr-rs-relay restart