Herkos

Saját postafiók-relé

Utolsó frissítés: 2026. október 3.

A Herkos-levelek lezárt borítékokban utaznak (NIP-59 gift wrap), és az Ön magánlevél-relélistáján szereplő reléken várakoznak, amíg az alkalmazása le nem tölti őket. A legtöbb nyilvános relé bárkinek kiadja ezeket a borítékokat, aki kéri. Felnyitni senki sem tudja őket, de bárki megszámolhatja, ki kap levelet és mikor, a relé pedig bármikor törölheti őket, amikor csak akarja.

Egy saját relé, amely megkérdezi, ki olvas (NIP-42), a borítékait csak Önnek adja ki, senki másnak, és addig őrzi őket, ameddig Ön dönt. Ez az oldal elmagyarázza, hogyan állíthat be egyet három lépésben, valamint egy éjszakai biztonsági mentést. Ha már van szervere, körülbelül tizenöt percet vesz igénybe.

Melyik relét használja?

  1. szeptember 24-én mindkét jelöltet futtattuk, és megnéztük, mit csinálnak ténylegesen a levelekkel, nem azt, amit hirdetnek.
nogringo/nostr-relay HAVEN 1.2.2
Ki olvashatja a borítékait Csak Ön, azonosítás után /chat: bárki a bizalmi hálójából, azonosítás után. /inbox: bárki, azonosítás nélkül
Ki kézbesíthet Önnek levelet Bármely feladó, aki azonosítja magát Csak a bizalmi hálója
Kapott levelek törlése Igen Nem
Gyors újraszinkronizálás (NIP-77) Igen Nem
Licenc MIT MIT

Postafióknak a nogringo/nostr-relay relét használja. Ez az, amelyik azt teszi, amire a levelezésnek szüksége van: bárki írhat Önnek, és csak Ön olvashatja. A HAVEN jó eszköz más célokra (személyes kimenő postafiók, média, privát jegyzetek), de postafiókként visszautasítaná a leveleket mindenkitől, akit nem követ, beleértve a hidat is, amely a hagyományos e-maileket hozza.

Amire szüksége lesz

1. lépés: a relé elindítása

git clone https://github.com/nogringo/nostr-relay
cd nostr-relay
cp .env.example .env

Szerkessze a .env fájlt: adjon nevet a relének (RELAY_NAME), és a RELAY_URLS értékét állítsa a nyilvános címére: wss://relay.example.com.

Ezután nyissa meg a docker-compose.yml fájlt, és a port sorát módosítsa erre: "127.0.0.1:3334:3334". A relé annak a címnek hisz, amelyet a proxy továbbít neki, amikor ellenőrzi, ki azonosítja magát, ezért csak a proxyn keresztül szabad elérhetőnek lennie. Indítsa el:

docker compose up -d

2. lépés: HTTPS a relé elé

A Caddy esetében a teljes konfiguráció (/etc/caddy/Caddyfile) ennyi:

relay.example.com {
    reverse_proxy 127.0.0.1:3334
}

Töltse újra a Caddyt (sudo systemctl reload caddy). Ha most böngészőben megnyitja a https://relay.example.com címet, válaszolnia kell.

3. lépés: a Herkos beállítása

  1. A Herkosban nyissa meg a Beállítások → Hálózat és szerverek → Saját relé menüpontot, és koppintson a Relé ellenőrzése gombra. Adja meg: wss://relay.example.com.
  2. A Herkos csatlakozik, és kipróbálja: elkéri valaki más leveleit, és hagy egy próbaborítékot egy idegentől (majd törli). Ezt kell látnia: Itt csak Ön olvashatja a leveleit és Bármely feladótól elfogad leveleket.
  3. Koppintson a Legyen ez az első magánlevél-relé gombra, majd felül a Mentés gombra.

Tartson a listában egy nyilvános relét is, második helyen: ha a szervere leáll, a levelek akkor is várakozhatnak valahol. A relay.damus.io jó második választás, mert az is megkérdezi, ki olvas.

4. lépés: biztonsági mentés minden éjjel

A Herkos megőrzi a saját másolatát a már letöltött levelekről, de egy boríték, amely akkor érkezett, amikor az alkalmazása be volt zárva, csak a szerverén létezik, amíg meg nem nyitja a Herkost. Egy éjszakai másolat lefedi ezt a rést, és lehetővé teszi a szerver újraépítését, ha a lemez tönkremegy, vagy a szolgáltató megszünteti a fiókját.

A relé mindent egyetlen LMDB-adatbázisban tárol, a nostr-relay_relay-db Docker-köteten belül (a név annak a mappának a nevével kezdődik, amelybe klónozott; ellenőrizze a docker volume ls paranccsal). Egy LMDB-fájl, amelyet akkor másolnak, amikor a relé éppen ír bele, lehet, hogy nem nyitható meg, ezért a szkript arra a néhány másodpercre leállítja a relét, amíg egy helyi másolat elkészül, újraindítja, és csak ezután tölti fel a másolatot. Amíg le van állítva, a levelek azon a nyilvános relén várakoznak, amelyet a listája második helyén tartott meg.

A másolat a restic segítségével kerül le a szerverről, amely titkosítja, mielőtt elhagyná a gépet. Olyan helyet használjon, amely a szervertől eltérő szolgáltatónál van: egy SFTP-fiókot (tárhelydobozt, otthoni számítógépet) vagy egy S3-kompatibilis tárolót (bucketet).

  1. Telepítse az eszközöket, és hozza létre a tárolót. A jelszót a jelszókezelőjében is tartsa meg: nélküle a másolatok nem olvashatók, és ha csak a szerveren van, a szerverrel együtt elvész. SFTP esetén a rootnak egy olyan SSH-kulcs is kell, amelyet a mentési gép elfogad (sudo ssh-keygen -t ed25519, majd adja hozzá ott a /root/.ssh/id_ed25519.pub kulcsot).

    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. Mentse ezt /usr/local/bin/backup-relay néven, és tegye futtathatóvá (sudo chmod 700 /usr/local/bin/backup-relay). Módosítsa a RELAY_DIR értékét, ha nem a /root/nostr-relay mappába klónozott. A szkript megőrzi az utolsó 14 napot, 8 hetet és 12 hónapot: egy évre visszamenőleg, nagyjából az adatbázis méretével megegyező helyen.

    #!/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. Futtassa le egyszer kézzel (sudo /usr/local/bin/backup-relay), majd ütemezze a sudo crontab -e paranccsal. A második sor havonta visszaolvassa a tárolt adatok egytizedét, minden alkalommal egy másik tizedét, hogy bizonyítsa: a másolatok továbbra is megnyithatók. Időnként nézzen bele a /var/log/backup-relay.log fájlba: egy Fatal szót tartalmazó sor azt jelenti, hogy az aznap éjjeli másolat nem sikerült.

    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
    

Visszaállítás (új szerver vagy lemezhiba után): állítsa be újra a relét (1–3. lépés), és ismételje meg ennek a lépésnek az 1. és 2. pontját ugyanazzal a tárolóval, de új jelszó létrehozása helyett a mentett jelszót írja a /root/.restic-password fájlba, és hagyja ki a restic init parancsot. Ezután másolja a legutóbbi mentést a relé kötetébe:

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

Évente egyszer végezze el ezt a visszaállítást egy tartalék gépen, és ellenőrizze, hogy a relé elindul-e a leveleivel együtt: ez az egyetlen próba, amely a teljes láncot igazolja, a jelszót is beleértve.

Jó tudni