Uw eigen postbusrelay
Laatst bijgewerkt: 3 oktober 2026
Herkos-e-mail reist als verzegelde enveloppen (NIP-59 gift wraps) en wacht op de relays in uw lijst met DM-relays tot uw app hem ophaalt. De meeste openbare relays geven die enveloppen aan iedereen die erom vraagt. Niemand kan ze openen, maar iedereen kan tellen wie e-mail ontvangt en wanneer, en het relay kan ze verwijderen wanneer het wil.
Een eigen relay dat vraagt wie er leest (NIP-42) geeft uw enveloppen aan u en aan niemand anders, en bewaart ze zo lang als u beslist. Deze pagina legt uit hoe u er in drie stappen een opzet, plus een nachtelijke back-up. Het kost ongeveer een kwartier als u al een server hebt.
Welk relay te gebruiken
We hebben beide kandidaten op 24 september 2026 gedraaid en gecontroleerd wat ze werkelijk met e-mail doen, niet wat ze beloven.
| nogringo/nostr-relay | HAVEN 1.2.2 | |
|---|---|---|
| Wie uw enveloppen kan lezen | Alleen u, na identificatie | /chat: iedereen in uw web of trust, na identificatie. /inbox: iedereen, zonder identificatie |
| Wie u e-mail kan bezorgen | Elke afzender die zich identificeert | Alleen uw web of trust |
| Ontvangen e-mail verwijderen | Ja | Nee |
| Snelle hersynchronisatie (NIP-77) | Ja | Nee |
| Licentie | MIT | MIT |
Gebruik nogringo/nostr-relay als uw postbus. Dat is het relay dat doet wat e-mail nodig heeft: iedereen kan u schrijven, en alleen u kunt lezen. HAVEN is een goed hulpmiddel voor andere dingen (een persoonlijke outbox, media, privénotities), maar als postbus zou het e-mail weigeren van iedereen die u niet volgt, inclusief de bridge die gewone e-mail doorgeeft.
Wat u nodig hebt
- Een machine die altijd aan staat en vanaf internet bereikbaar is: een kleine VPS (ongeveer 4-6 € per maand) of een computer thuis.
- Een domein of subdomein dat ernaar verwijst, bijvoorbeeld
relay.example.com. - Docker en een reverse proxy die HTTPS levert. De voorbeelden gebruiken Caddy, dat het certificaat zelf regelt.
Stap 1: het relay starten
git clone https://github.com/nogringo/nostr-relay
cd nostr-relay
cp .env.example .env
Bewerk .env: geef het relay een naam (RELAY_NAME) en zet RELAY_URLS op
zijn openbare adres, wss://relay.example.com.
Open daarna docker-compose.yml en wijzig de poortregel in
"127.0.0.1:3334:3334". Het relay vertrouwt het adres dat de proxy doorgeeft
wanneer het controleert wie zich identificeert, dus het mag alleen via de proxy
bereikbaar zijn. Start het:
docker compose up -d
Stap 2: HTTPS ervoor zetten
Met Caddy is de hele configuratie (/etc/caddy/Caddyfile):
relay.example.com {
reverse_proxy 127.0.0.1:3334
}
Herlaad Caddy (sudo systemctl reload caddy). Als u nu
https://relay.example.com in een browser opent, hoort er antwoord te komen.
Stap 3: Herkos inlichten
- Open in Herkos Instellingen → Netwerk en servers → Je eigen relay en tik
op Relay controleren. Voer
wss://relay.example.comin. - Herkos maakt verbinding en test het: het vraagt om de e-mail van iemand anders, en het laat een testenveloppe van een onbekende achter (en verwijdert die daarna). U zou Alleen jij kunt hier je e-mail lezen en Accepteert e-mail van elke afzender moeten zien.
- Tik op Maak er je eerste DM-relay van, en bovenaan op Opslaan.
Houd ook een openbaar relay in de lijst, op de tweede plaats: als uw server
uitvalt, kan e-mail nog ergens wachten. relay.damus.io is een goede tweede
keuze, omdat het ook vraagt wie er leest.
Stap 4: elke nacht een back-up maken
Herkos bewaart zelf een kopie van de e-mail die het heeft opgehaald, maar een envelop die binnenkwam terwijl uw app gesloten was, bestaat alleen op uw server tot u Herkos opent. Een nachtelijke kopie dicht dat gat, en daarmee kunt u de server opnieuw opbouwen als de schijf het begeeft of de provider uw account opheft.
Het relay bewaart alles in één LMDB-database binnen het Docker-volume
nostr-relay_relay-db (de naam begint met de map waarin u hebt gekloond;
controleer het met docker volume ls). Een LMDB-bestand dat wordt gekopieerd
terwijl het relay erin schrijft, gaat mogelijk niet meer open, dus het script
stopt het relay voor de paar seconden die een lokale kopie kost, start het
opnieuw en uploadt pas daarna de kopie. Zolang het gestopt is, wacht e-mail op
het openbare relay dat u op de tweede plaats in uw lijst hebt gehouden.
De kopie verlaat de server met restic, dat hem versleutelt voordat hij vertrekt. Gebruik een plek bij een andere provider dan de server: een SFTP-account (een storage box, een computer thuis) of een S3-compatibele bucket.
-
Installeer de tools en maak de repository aan. Bewaar het wachtwoord ook in uw wachtwoordmanager: zonder dat zijn de kopieën niet te lezen, en als het alleen op de server staat, gaat het met de server verloren. Voor SFTP heeft root ook een SSH-sleutel nodig die de back-upmachine accepteert (
sudo ssh-keygen -t ed25519, en voeg daar dan/root/.ssh/id_ed25519.pubtoe).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' -
Sla dit op als
/usr/local/bin/backup-relayen maak het uitvoerbaar (sudo chmod 700 /usr/local/bin/backup-relay). WijzigRELAY_DIRals u niet in/root/nostr-relayhebt gekloond. Het bewaart de laatste 14 dagen, 8 weken en 12 maanden: een jaar terug, met een omvang die dicht bij die van de database ligt.#!/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 -
Voer het één keer met de hand uit (
sudo /usr/local/bin/backup-relay) en plan het daarna in metsudo crontab -e. De tweede regel leest elke maand een tiende van de opgeslagen gegevens terug, telkens een ander tiende, om te bewijzen dat de kopieën nog te openen zijn. Kijk af en toe in/var/log/backup-relay.log: een regel metFatalbetekent dat de kopie van die nacht is mislukt.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
Terugzetten (een nieuwe server, of na een schijfdefect): zet het relay
opnieuw op (stap 1 tot 3) en herhaal punt 1 en 2 van deze stap met dezelfde
repository, maar schrijf het wachtwoord dat u hebt bewaard in
/root/.restic-password in plaats van een nieuw aan te maken, en sla
restic init over. Kopieer daarna de nieuwste back-up naar het volume van het
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
Doe dit terugzetten één keer per jaar op een reservemachine en controleer dat het relay start met uw e-mail erin: het is de enige test die de hele keten bewijst, wachtwoord inbegrepen.
Goed om te weten
- Het is een relay voor algemeen gebruik. Naast uw e-mail accepteert het openbare notities van iedereen, dus anderen zouden dingen op uw server kunnen opslaan. Er is nog geen instelling om die te weigeren.
- E-mail van gewone e-mailadressen komt binnen via een bridge, die zich moet identificeren wanneer uw relay daarom vraagt. Komt er na de overstap geen gewone e-mail meer binnen, dan ontvangt het openbare relay dat u in de lijst hebt gehouden die nog steeds.
- Maak een back-up van de gegevens (stap 4). De enveloppen staan in het
Docker-volume
relay-db, en e-mail die uw app nog niet heeft opgehaald, bestaat alleen daar. - Uw IP-adres. Het relay ziet het adres van elke app die ermee verbinding maakt, zoals elk relay. Op uw eigen server bent u de enige die ze ziet.