Vlastní poštovní relé
Naposledy aktualizováno: 3. října 2026
Pošta Herkos cestuje v zapečetěných obálkách (NIP-59 gift wraps) a čeká na relé ve vašem seznamu relé pro soukromou poštu, dokud si ji vaše aplikace nevyzvedne. Většina veřejných relé vydá tyto obálky komukoli, kdo o ně požádá. Otevřít je nikdo nedokáže, ale kdokoli může spočítat, kdo dostává poštu a kdy, a relé je může smazat, kdykoli se mu zachce.
Vlastní relé, které se ptá, kdo čte (NIP-42), vydá vaše obálky vám a nikomu jinému a uchová je tak dlouho, jak sami určíte. Tato stránka vysvětluje, jak ho nastavit ve třech krocích, a k tomu noční zálohu. Zabere to asi patnáct minut, pokud už server máte.
Jaké relé použít
- září 2026 jsme spustili oba kandidáty a ověřili, co s poštou opravdu dělají, ne co slibují.
| nogringo/nostr-relay | HAVEN 1.2.2 | |
|---|---|---|
| Kdo může číst vaše obálky | Jen vy, po identifikaci | /chat: kdokoli z vaší sítě důvěry, po identifikaci. /inbox: kdokoli, bez identifikace |
| Kdo vám může doručit poštu | Jakýkoli odesílatel, který se identifikuje | Jen vaše síť důvěry |
| Mazání přijaté pošty | Ano | Ne |
| Rychlá resynchronizace (NIP-77) | Ano | Ne |
| Licence | MIT | MIT |
Jako schránku použijte nogringo/nostr-relay. Je to to, které dělá, co pošta potřebuje: napsat vám může kdokoli a číst můžete jen vy. HAVEN je dobrý nástroj na jiné věci (osobní outbox, média, soukromé poznámky), ale jako schránka by odmítal poštu od každého, koho nesledujete, včetně mostu, který přenáší běžný e-mail.
Co budete potřebovat
- Stroj, který je stále zapnutý a dostupný z internetu: malý VPS (asi 4–6 € měsíčně) nebo počítač doma.
- Doménu nebo subdoménu, která na něj ukazuje, například
relay.example.com. - Docker a reverzní proxy, která zajistí HTTPS. Příklady používají Caddy, který si certifikát obstará sám.
Krok 1: spusťte relé
git clone https://github.com/nogringo/nostr-relay
cd nostr-relay
cp .env.example .env
Upravte .env: dejte relé název (RELAY_NAME) a do RELAY_URLS nastavte jeho
veřejnou adresu, wss://relay.example.com.
Pak otevřete docker-compose.yml a změňte řádek s portem na
"127.0.0.1:3334:3334". Relé při kontrole, kdo se identifikuje, věří adrese,
kterou mu předá proxy, takže musí být dostupné jen přes
proxy. Spusťte ho:
docker compose up -d
Krok 2: předřaďte HTTPS
S Caddy je celá konfigurace (/etc/caddy/Caddyfile):
relay.example.com {
reverse_proxy 127.0.0.1:3334
}
Načtěte Caddy znovu (sudo systemctl reload caddy). Adresa
https://relay.example.com by teď měla v prohlížeči odpovídat.
Krok 3: řekněte to Herkosu
- V Herkosu otevřete Nastavení → Síť a servery → Vlastní relé a klepněte na
Zkontrolovat relé. Zadejte
wss://relay.example.com. - Herkos se připojí a vyzkouší ho: požádá o poštu někoho jiného a zanechá testovací obálku od cizího odesílatele (pak ji smaže). Měli byste vidět Vaši poštu si tu můžete přečíst jen vy a Přijímá poštu od jakéhokoli odesílatele.
- Klepněte na Nastavit jako první relé pro soukromé zprávy a nahoře na Uložit.
V seznamu ponechte i veřejné relé, jako druhé: když váš server nepoběží, pošta
bude mít pořád kde čekat. relay.damus.io je dobrá druhá volba, protože se
také ptá, kdo čte.
Krok 4: zálohujte každou noc
Herkos si uchovává vlastní kopii pošty, kterou vyzvedl, ale obálka, která dorazila, když byla aplikace zavřená, existuje jen na vašem serveru, dokud Herkos neotevřete. Noční kopie tuto mezeru pokryje a umožní vám server obnovit, pokud odejde disk nebo vám poskytovatel zruší účet.
Relé má všechno v jedné databázi LMDB uvnitř svazku Dockeru
nostr-relay_relay-db (název začíná složkou, do které jste klonovali; ověřte
ho příkazem docker volume ls). Soubor LMDB zkopírovaný ve chvíli, kdy do něj relé
zapisuje, nemusí jít otevřít, proto skript relé na těch pár sekund, které místní kopie
zabere, zastaví, znovu ho spustí a teprve pak kopii nahraje. Zatímco je zastavené,
čeká pošta na veřejném relé, které jste si v seznamu nechali jako druhé.
Kopie odchází ze serveru pomocí restic, který ji před odesláním zašifruje. Použijte místo u jiného poskytovatele, než má server: účet SFTP (storage box, počítač doma) nebo bucket kompatibilní s S3.
-
Nainstalujte nástroje a vytvořte repozitář. Heslo si uložte i do správce hesel: bez něj nelze kopie přečíst, a pokud je jen na serveru, zanikne spolu se serverem. Pro SFTP potřebuje root navíc klíč SSH, který záložní stroj přijme (
sudo ssh-keygen -t ed25519, pak tam přidejte/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' -
Uložte toto jako
/usr/local/bin/backup-relaya nastavte jako spustitelné (sudo chmod 700 /usr/local/bin/backup-relay). Pokud jste neklonovali do/root/nostr-relay, změňteRELAY_DIR. Uchovává posledních 14 dní, 8 týdnů a 12 měsíců: rok zpátky, při velikosti blízké velikosti databáze.#!/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 -
Jednou ho spusťte ručně (
sudo /usr/local/bin/backup-relay), pak ho naplánujte pomocísudo crontab -e. Druhý řádek každý měsíc načte zpět desetinu uložených dat, pokaždé jinou desetinu, aby se prokázalo, že kopie jdou pořád otevřít. Občas se podívejte do/var/log/backup-relay.log: řádek sFatalznamená, že kopie té noci selhala.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
Obnovení (nový server nebo po selhání disku): znovu nastavte relé
(kroky 1 až 3) a zopakujte body 1 a 2 tohoto kroku se stejným repozitářem,
ale místo vytvoření nového hesla zapište do /root/.restic-password heslo, které jste si uložili,
a vynechte restic init. Pak zkopírujte nejnovější zálohu do
svazku relé:
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
Jednou ročně proveďte toto obnovení na náhradním stroji a ověřte, že se relé spustí s vaší poštou: je to jediný test, který prověří celý řetězec, včetně hesla.
Dobré vědět
- Je to relé pro obecné použití. Kromě vaší pošty přijímá veřejné poznámky od kohokoli, takže by vám na server mohli ukládat věci i jiní lidé. Zatím nemá nastavení, kterým by je odmítlo.
- Pošta z běžného e-mailu přichází přes most, který se musí identifikovat, když se ho vaše relé zeptá. Pokud po změně přestane běžný e-mail chodit, bude ho dál přijímat veřejné relé, které jste si v seznamu nechali.
- Zálohujte data (krok 4). Obálky jsou ve svazku Dockeru
relay-dba pošta, kterou vaše aplikace ještě nevyzvedla, existuje jen tam. - Vaše IP adresa. Relé vidí adresu každé aplikace, která se k němu připojí, jako každé relé. Na vlastním serveru je vidíte jen vy.