La teva pròpia bústia: un relay
Última actualització: 3 d'octubre de 2026
El correu de Herkos viatja en sobres segellats (gift wraps NIP-59) i espera als relays de la teva llista de relays DM fins que la teva aplicació el recull. La majoria de relays públics lliuren aquests sobres a qualsevol que els demani. Ningú no els pot obrir, però qualsevol pot comptar qui rep correu i quan, i el relay els pot esborrar quan vulgui.
Un relay propi que pregunta qui llegeix (NIP-42) et dona els sobres a tu i a ningú més, i els guarda tant de temps com decideixis. Aquesta pàgina explica com muntar-ne un en tres passos, més una còpia de seguretat cada nit. Calen uns quinze minuts si ja tens un servidor.
Quin relay cal fer servir
Vam posar en marxa tots dos candidats el 24 de setembre de 2026 i vam comprovar què fan realment amb el correu, no què anuncien.
| nogringo/nostr-relay | HAVEN 1.2.2 | |
|---|---|---|
| Qui pot llegir els teus sobres | Només tu, després d'identificar-te | /chat: qualsevol de la teva xarxa de confiança, després d'identificar-se. /inbox: qualsevol, sense identificar-se |
| Qui et pot lliurar correu | Qualsevol remitent que s'identifiqui | Només la teva xarxa de confiança |
| Esborrar el correu que has rebut | Sí | No |
| Resincronització ràpida (NIP-77) | Sí | No |
| Llicència | MIT | MIT |
Fes servir nogringo/nostr-relay com a bústia. És el que fa el que el correu necessita: qualsevol et pot escriure, i només tu pots llegir. HAVEN és una bona eina per a altres coses (una safata de sortida personal, multimèdia, notes privades), però com a bústia rebutjaria el correu de qualsevol que no segueixis, inclòs el bridge que porta el correu tradicional.
Què et cal
- Una màquina sempre engegada i accessible des d'internet: un VPS petit (uns 4-6 € al mes) o un ordinador a casa.
- Un domini o subdomini que hi apunti, per exemple
relay.example.com. - Docker i un proxy invers que ofereixi HTTPS. Els exemples fan servir Caddy, que obté el certificat pel seu compte.
Pas 1: posa en marxa el relay
git clone https://github.com/nogringo/nostr-relay
cd nostr-relay
cp .env.example .env
Edita .env: dona un nom al relay (RELAY_NAME) i posa a RELAY_URLS la seva
adreça pública, wss://relay.example.com.
Després obre docker-compose.yml i canvia la línia del port per
"127.0.0.1:3334:3334". El relay es refia de l'adreça que li passa el proxy
quan comprova qui s'identifica, així que només ha de ser accessible a través del
proxy. Engega'l:
docker compose up -d
Pas 2: posa-hi HTTPS al davant
Amb Caddy, tota la configuració (/etc/caddy/Caddyfile) és:
relay.example.com {
reverse_proxy 127.0.0.1:3334
}
Recarrega Caddy (sudo systemctl reload caddy). Si obres
https://relay.example.com en un navegador, ara hauria de respondre.
Pas 3: digues-ho a Herkos
- A Herkos, obre Ajustos → Xarxa i servidors → El teu relay personal i toca
Comprova un relay. Escriu
wss://relay.example.com. - Herkos s'hi connecta i el prova: demana el correu d'una altra persona i hi deixa un sobre de prova d'un desconegut (que després esborra). Hauries de veure Només tu pots llegir aquí el teu correu i Accepta correu de qualsevol remitent.
- Toca Posa'l com a primer relay DM, i Desa a dalt de tot.
Mantén també un relay públic a la llista, en segon lloc: si el teu servidor cau, el correu
continua tenint on esperar. relay.damus.io és una bona segona opció, perquè
també pregunta qui llegeix.
Pas 4: fes-ne una còpia de seguretat cada nit
Herkos guarda la seva pròpia còpia del correu que ha recollit, però un sobre que ha arribat mentre l'aplicació estava tancada només existeix al teu servidor fins que obres Herkos. Una còpia cada nit cobreix aquest buit, i et permet refer el servidor si el disc mor o el proveïdor et tanca el compte.
El relay ho guarda tot en una sola base de dades LMDB dins del volum de Docker
nostr-relay_relay-db (el nom comença amb la carpeta on l'has clonat; comprova-ho
amb docker volume ls). Un fitxer LMDB copiat mentre el relay hi escriu
pot no obrir-se, així que l'script atura el relay els pocs segons que triga una còpia local,
el torna a engegar, i només llavors puja la còpia. Mentre està aturat,
el correu espera al relay públic que has deixat en segon lloc a la llista.
La còpia surt del servidor amb restic, que la xifra abans que surti. Fes servir un lloc d'un proveïdor diferent del del servidor: un compte SFTP (una storage box, un ordinador a casa) o un bucket compatible amb S3.
-
Instal·la les eines i crea el repositori. Guarda la contrasenya també al teu gestor de contrasenyes: sense ella les còpies no es poden llegir, i si només viu al servidor, mor amb el servidor. Per a SFTP, root també necessita una clau SSH que la màquina de còpies accepti (
sudo ssh-keygen -t ed25519, i després afegeix-hi/root/.ssh/id_ed25519.pub).sudo apt install restic rsync sudo sh -c 'openssl rand -base64 32 > /root/.restic-password' sudo sh -c 'cat > /root/.restic-env' <<'END' export RESTIC_REPOSITORY=sftp:backup@backup.example.com:/relay export RESTIC_PASSWORD_FILE=/root/.restic-password END sudo chmod 600 /root/.restic-password /root/.restic-env sudo sh -c '. /root/.restic-env && restic init' -
Desa això com a
/usr/local/bin/backup-relayi fes-lo executable (sudo chmod 700 /usr/local/bin/backup-relay). CanviaRELAY_DIRsi no l'has clonat a/root/nostr-relay. Conserva els últims 14 dies, 8 setmanes i 12 mesos: un any enrere, amb una mida propera a la de la base de dades.#!/bin/sh set -eu . /root/.restic-env RELAY_DIR=/root/nostr-relay COPY=/var/backups/relay-db VOLUME=$(docker volume inspect --format '{{ .Mountpoint }}' nostr-relay_relay-db) mkdir -p "$COPY" cd "$RELAY_DIR" docker compose stop relay trap 'docker compose start relay' EXIT rsync -a --delete "$VOLUME/" "$COPY/" docker compose start relay trap - EXIT restic backup "$COPY" --tag relay restic forget --tag relay --keep-daily 14 --keep-weekly 8 --keep-monthly 12 --prune -
Executa'l una vegada a mà (
sudo /usr/local/bin/backup-relay) i després programa'l ambsudo crontab -e. La segona línia torna a llegir una desena part de les dades guardades cada mes, una desena diferent cada vegada, per demostrar que les còpies encara es poden obrir. Mira de tant en tant/var/log/backup-relay.log: una línia ambFatalvol dir que la còpia d'aquella nit ha fallat.15 4 * * * /usr/local/bin/backup-relay >> /var/log/backup-relay.log 2>&1 45 5 1 * * . /root/.restic-env && restic check --read-data-subset=10% >> /var/log/backup-relay.log 2>&1
Per restaurar (un servidor nou, o després d'una avaria del disc): torna a muntar el relay
(passos 1 a 3) i repeteix els punts 1 i 2 d'aquest pas amb el mateix repositori,
però escriu la contrasenya que vas guardar a /root/.restic-password en lloc de
crear-ne una de nova, i salta't restic init. Després copia l'última còpia al
volum del relay:
sudo sh -c '. /root/.restic-env && restic restore latest --tag relay --target /'
cd /root/nostr-relay && sudo docker compose stop relay
sudo rsync -a --delete /var/backups/relay-db/ "$(sudo docker volume inspect --format '{{ .Mountpoint }}' nostr-relay_relay-db)/"
sudo docker compose start relay
Un cop l'any, fes aquesta restauració en una màquina de recanvi i comprova que el relay arrenca amb el teu correu a dins: és l'única prova que demostra tota la cadena, contrasenya inclosa.
Bo de saber
- És un relay d'ús general. A més del teu correu accepta notes públiques de qualsevol, de manera que altres persones podrien guardar coses al teu servidor. Encara no té cap opció per rebutjar-les.
- El correu tradicional arriba a través d'un bridge, que s'ha d'identificar quan el teu relay ho demana. Si després del canvi deixa d'arribar-te correu tradicional, el relay públic que has mantingut a la llista el continuarà rebent.
- Fes còpia de seguretat de les dades (pas 4). Els sobres viuen al volum de Docker
relay-db, i el correu que la teva aplicació encara no ha recollit només existeix allà. - La teva adreça IP. El relay veu l'adreça de cada aplicació que s'hi connecta, com qualsevol relay. Al teu propi servidor, l'únic que les veu ets tu.