Herkos

Releul dvs. propriu drept căsuță poștală

Ultima actualizare: 3 octombrie 2026

Corespondența Herkos circulă în plicuri sigilate (gift wraps NIP-59) și așteaptă pe releele din lista dvs. de relee pentru mesaje private până când aplicația o preia. Majoritatea releelor publice predau aceste plicuri oricui le cere. Nimeni nu le poate deschide, dar oricine poate număra cine primește corespondență și când, iar releul le poate șterge oricând dorește.

Un releu propriu care întreabă cine citește (NIP-42) vă dă plicurile doar dvs. și nimănui altcuiva și le păstrează cât timp decideți dvs. Această pagină explică cum să configurați unul în trei pași, plus o copie de rezervă în fiecare noapte. Durează aproximativ cincisprezece minute dacă aveți deja un server.

Ce releu să folosiți

Am rulat ambii candidați pe 24 septembrie 2026 și am verificat ce fac de fapt cu corespondența, nu ce declară.

nogringo/nostr-relay HAVEN 1.2.2
Cine vă poate citi plicurile Doar dvs., după identificare /chat: oricine din rețeaua dvs. de încredere, după identificare. /inbox: oricine, fără identificare
Cine vă poate livra corespondență Orice expeditor care se identifică Doar rețeaua dvs. de încredere
Ștergerea corespondenței primite Da Nu
Resincronizare rapidă (NIP-77) Da Nu
Licență MIT MIT

Folosiți nogringo/nostr-relay drept căsuță poștală. Este cel care face ce îi trebuie corespondenței: oricine vă poate scrie și doar dvs. puteți citi. HAVEN este un instrument bun pentru alte lucruri (o căsuță de ieșire personală, fișiere media, notițe private), dar drept căsuță poștală ar respinge corespondența de la oricine nu urmăriți, inclusiv de la puntea care aduce e-mailul obișnuit.

De ce aveți nevoie

Pasul 1: rulați releul

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

Editați .env: dați-i releului un nume (RELAY_NAME) și setați RELAY_URLS la adresa sa publică, wss://relay.example.com.

Apoi deschideți docker-compose.yml și schimbați linia portului în "127.0.0.1:3334:3334". Releul are încredere în adresa pe care i-o transmite proxy-ul atunci când verifică cine se identifică, așa că trebuie să fie accesibil doar prin proxy. Porniți-l:

docker compose up -d

Pasul 2: puneți HTTPS în față

Cu Caddy, întreaga configurație (/etc/caddy/Caddyfile) este:

relay.example.com {
    reverse_proxy 127.0.0.1:3334
}

Reîncărcați Caddy (sudo systemctl reload caddy). Deschiderea https://relay.example.com într-un browser ar trebui acum să primească un răspuns.

Pasul 3: anunțați Herkos

  1. În Herkos, deschideți Setări → Rețea și servere → Releul dvs. propriu și atingeți Verifică un releu. Introduceți wss://relay.example.com.
  2. Herkos se conectează și îl testează: cere corespondența altcuiva și lasă un plic de test de la un necunoscut (apoi îl șterge). Ar trebui să vedeți Doar dvs. vă puteți citi corespondența aici și Acceptă corespondență de la orice expeditor.
  3. Atingeți Fă-l primul releu pentru mesaje private, apoi Salvează în partea de sus.

Păstrați în listă și un releu public, pe locul al doilea: dacă serverul dvs. este căzut, corespondența are totuși unde să aștepte. relay.damus.io este o a doua opțiune bună, pentru că și el întreabă cine citește.

Pasul 4: faceți o copie de rezervă în fiecare noapte

Herkos își păstrează propria copie a corespondenței pe care a preluat-o, dar un plic care a sosit cât timp aplicația era închisă există doar pe serverul dvs. până când deschideți Herkos. O copie în fiecare noapte acoperă acest gol și vă permite să refaceți serverul dacă se defectează discul sau furnizorul vă închide contul.

Releul păstrează totul într-o singură bază de date LMDB în volumul Docker nostr-relay_relay-db (numele începe cu dosarul în care ați clonat; verificați-l cu docker volume ls). Un fișier LMDB copiat în timp ce releul scrie în el s-ar putea să nu se deschidă, așa că scriptul oprește releul pentru cele câteva secunde cât durează o copie locală, îl repornește și abia apoi încarcă copia. Cât timp este oprit, corespondența așteaptă pe releul public pe care l-ați păstrat al doilea în listă.

Copia pleacă de pe server cu restic, care o criptează înainte să plece. Folosiți un loc la un alt furnizor decât cel al serverului: un cont SFTP (un storage box, un computer acasă) sau un bucket compatibil S3.

  1. Instalați instrumentele și creați depozitul. Păstrați parola și în managerul de parole: fără ea copiile nu pot fi citite, iar dacă există doar pe server, moare odată cu serverul. Pentru SFTP, root are nevoie și de o cheie SSH pe care mașina de backup o acceptă (sudo ssh-keygen -t ed25519, apoi adăugați /root/.ssh/id_ed25519.pub acolo).

    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. Salvați acest script ca /usr/local/bin/backup-relay și faceți-l executabil (sudo chmod 700 /usr/local/bin/backup-relay). Schimbați RELAY_DIR dacă nu ați clonat în /root/nostr-relay. Păstrează ultimele 14 zile, 8 săptămâni și 12 luni: un an în urmă, cu o dimensiune apropiată de cea a bazei de date.

    #!/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. Rulați-l o dată manual (sudo /usr/local/bin/backup-relay), apoi programați-l cu sudo crontab -e. A doua linie recitește lunar o zecime din datele stocate, de fiecare dată o altă zecime, ca să dovedească faptul că copiile pot fi încă deschise. Aruncați din când în când o privire în /var/log/backup-relay.log: o linie cu Fatal înseamnă că, în acea noapte, copia a eșuat.

    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
    

Pentru restabilire (un server nou sau după o defecțiune a discului): configurați din nou releul (pașii 1-3) și repetați punctele 1 și 2 ale acestui pas cu același depozit, dar scrieți parola salvată în /root/.restic-password în loc să creați una nouă și săriți peste restic init. Apoi copiați cea mai recentă copie de rezervă în volumul releului:

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

O dată pe an, faceți această restabilire pe o mașină de rezervă și verificați că releul pornește cu corespondența dvs. în el: este singurul test care dovedește că întregul lanț funcționează, inclusiv parola.

Bine de știut