Ditt eget brevlådsrelä
Senast uppdaterad: 3 oktober 2026
Post i Herkos färdas som förseglade kuvert (NIP-59 gift wraps) och väntar på reläerna i din lista över DM-reläer tills din app hämtar den. De flesta offentliga reläer lämnar ut kuverten till vem som helst som frågar. Ingen kan öppna dem, men vem som helst kan räkna vem som får post och när, och reläet kan radera dem när det vill.
Ett eget relä som frågar vem som läser (NIP-42) lämnar ut dina kuvert till dig och ingen annan, och behåller dem så länge du bestämmer. Den här sidan förklarar hur du sätter upp ett i tre steg, plus en säkerhetskopiering varje natt. Det tar ungefär en kvart om du redan har en server.
Vilket relä du ska använda
Vi körde båda kandidaterna den 24 september 2026 och kontrollerade vad de faktiskt gör med post, inte vad de utlovar.
| nogringo/nostr-relay | HAVEN 1.2.2 | |
|---|---|---|
| Vem som kan läsa dina kuvert | Bara du, efter identifiering | /chat: alla i ditt förtroendenätverk, efter identifiering. /inbox: vem som helst, utan identifiering |
| Vem som kan leverera post till dig | Alla avsändare som identifierar sig | Bara ditt förtroendenätverk |
| Radera mottagen post | Ja | Nej |
| Snabb omsynkronisering (NIP-77) | Ja | Nej |
| Licens | MIT | MIT |
Använd nogringo/nostr-relay som din brevlåda. Det är det relä som klarar det som post kräver: vem som helst kan skriva till dig, och bara du kan läsa. HAVEN är ett bra verktyg för annat (en personlig utkorg, media, privata anteckningar), men som brevlåda skulle det avvisa post från alla du inte följer, även bryggan som för vidare vanlig e-post.
Vad du behöver
- En dator som alltid är påslagen och nåbar från internet: en liten VPS (cirka 4–6 € i månaden) eller en dator hemma.
- En domän eller underdomän som pekar på den, till exempel
relay.example.com. - Docker och en omvänd proxy som tillhandahåller HTTPS. Exemplen använder Caddy, som skaffar certifikatet på egen hand.
Steg 1: kör reläet
git clone https://github.com/nogringo/nostr-relay
cd nostr-relay
cp .env.example .env
Redigera .env: ge reläet ett namn (RELAY_NAME) och sätt RELAY_URLS till
dess offentliga adress, wss://relay.example.com.
Öppna sedan docker-compose.yml och ändra portraden till
"127.0.0.1:3334:3334". Reläet litar på adressen som proxyn vidarebefordrar
när det kontrollerar vem som identifierar sig, så det får bara vara nåbart via
proxyn. Starta det:
docker compose up -d
Steg 2: lägg HTTPS framför
Med Caddy är hela konfigurationen (/etc/caddy/Caddyfile):
relay.example.com {
reverse_proxy 127.0.0.1:3334
}
Läs in Caddy på nytt (sudo systemctl reload caddy). Om du öppnar
https://relay.example.com i en webbläsare ska du nu få svar.
Steg 3: berätta för Herkos
- Öppna Inställningar → Nätverk och servrar → Ditt eget relä i Herkos och
tryck på Kontrollera ett relä. Ange
wss://relay.example.com. - Herkos ansluter och provar reläet: appen ber om någon annans post och lämnar ett testkuvert från en främling (som sedan raderas). Du ska se Bara du kan läsa din post här och Tar emot post från alla avsändare.
- Tryck på Gör det till ditt första DM-relä, och på Spara högst upp.
Behåll också ett offentligt relä i listan, på andra plats: om din server ligger
nere har posten ändå någonstans att vänta. relay.damus.io är ett bra andraval,
eftersom det också frågar vem som läser.
Steg 4: säkerhetskopiera varje natt
Herkos behåller en egen kopia av den post appen har hämtat, men ett kuvert som kom medan appen var stängd finns bara på din server tills du öppnar Herkos. En kopia varje natt täcker den luckan, och den låter dig bygga upp servern igen om disken går sönder eller leverantören stänger ditt konto.
Reläet lagrar allt i en enda LMDB-databas i Docker-volymen
nostr-relay_relay-db (namnet börjar med mappen du klonade till; kontrollera
det med docker volume ls). En LMDB-fil som kopieras medan reläet skriver till
den kanske inte går att öppna, så skriptet stoppar reläet under de få sekunder
en lokal kopia tar, startar det igen och laddar först därefter upp kopian.
Medan reläet är stoppat väntar posten på det offentliga relä som du behöll på
andra plats i listan.
Kopian lämnar servern med restic, som krypterar den innan den skickas. Använd en plats hos en annan leverantör än servern: ett SFTP-konto (en lagringsbox, en dator hemma) eller en S3-kompatibel bucket.
-
Installera verktygen och skapa arkivet. Spara lösenordet i din lösenordshanterare också: utan det går kopiorna inte att läsa, och om det bara finns på servern försvinner det med servern. För SFTP behöver root dessutom en SSH-nyckel som backupdatorn godtar (
sudo ssh-keygen -t ed25519, lägg sedan till/root/.ssh/id_ed25519.pubdär).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' -
Spara detta som
/usr/local/bin/backup-relayoch gör det körbart (sudo chmod 700 /usr/local/bin/backup-relay). ÄndraRELAY_DIRom du inte klonade till/root/nostr-relay. Skriptet behåller de senaste 14 dagarna, 8 veckorna och 12 månaderna: ett år bakåt, i en storlek nära databasens.#!/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 -
Kör det en gång för hand (
sudo /usr/local/bin/backup-relay) och schemalägg det sedan medsudo crontab -e. Den andra raden läser tillbaka en tiondel av de lagrade data varje månad, en ny tiondel varje gång, för att bevisa att kopiorna fortfarande går att öppna. Titta i/var/log/backup-relay.logdå och då: en rad medFatalbetyder att nattens kopia misslyckades.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
Så återställer du (en ny server, eller efter ett diskfel): sätt upp reläet
igen (steg 1 till 3) och upprepa punkt 1 och 2 i det här steget med samma arkiv,
men skriv in lösenordet du sparade i /root/.restic-password i stället för att
skapa ett nytt, och hoppa över restic init. Kopiera sedan den senaste
säkerhetskopian till reläets volym:
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
En gång om året bör du göra den här återställningen på en reservdator och kontrollera att reläet startar med din post i: det är det enda testet som bevisar hela kedjan, lösenordet inräknat.
Bra att veta
- Det är ett allmänt relä. Utöver din post tar det emot offentliga anteckningar från vem som helst, så andra kan lagra saker på din server. Det finns ännu ingen inställning för att avvisa dem.
- Post från vanlig e-post kommer via en brygga, som måste identifiera sig när ditt relä frågar. Om vanlig e-post slutar komma fram efter bytet tar det offentliga relä som du behöll i listan fortfarande emot den.
- Säkerhetskopiera data (steg 4). Kuverten finns i Docker-volymen
relay-db, och post som din app inte har hämtat än finns bara där. - Din IP-adress. Reläet ser adressen för varje app som ansluter till det, som alla reläer gör. På din egen server är det bara du som ser dem.