Herkos

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

  1. 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

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

  1. V Herkosu otevřete Nastavení → Síť a servery → Vlastní relé a klepněte na Zkontrolovat relé. Zadejte wss://relay.example.com.
  2. 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.
  3. 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.

  1. 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'
    
  2. Uložte toto jako /usr/local/bin/backup-relay a nastavte jako spustitelné (sudo chmod 700 /usr/local/bin/backup-relay). Pokud jste neklonovali do /root/nostr-relay, změňte RELAY_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
    
  3. 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 s Fatal znamená, ž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