Herkos

Το δικό σας relay γραμματοκιβωτίου

Τελευταία ενημέρωση: 3 Οκτωβρίου 2026

Η αλληλογραφία του Herkos ταξιδεύει σε σφραγισμένους φακέλους (gift wraps NIP-59) και περιμένει στα relay της λίστας relay ιδιωτικών μηνυμάτων σας μέχρι να την παραλάβει η εφαρμογή σας. Τα περισσότερα δημόσια relay δίνουν αυτούς τους φακέλους σε όποιον τους ζητήσει. Κανείς δεν μπορεί να τους ανοίξει, αλλά οποιοσδήποτε μπορεί να μετρήσει ποιος λαμβάνει αλληλογραφία και πότε, και το relay μπορεί να τους διαγράψει όποτε θέλει.

Ένα δικό σας relay που ρωτά ποιος διαβάζει (NIP-42) δίνει τους φακέλους σας σε εσάς και σε κανέναν άλλον, και τους κρατά για όσο αποφασίσετε. Αυτή η σελίδα εξηγεί πώς να το στήσετε σε τρία βήματα, συν ένα νυχτερινό αντίγραφο ασφαλείας. Χρειάζεται περίπου δεκαπέντε λεπτά αν έχετε ήδη διακομιστή.

Ποιο relay να χρησιμοποιήσετε

Εκτελέσαμε και τους δύο υποψηφίους στις 24 Σεπτεμβρίου 2026 και ελέγξαμε τι κάνουν πραγματικά με την αλληλογραφία, όχι τι διαφημίζουν.

nogringo/nostr-relay HAVEN 1.2.2
Ποιος μπορεί να διαβάσει τους φακέλους σας Μόνο εσείς, αφού ταυτοποιηθείτε /chat: οποιοσδήποτε στο δίκτυο εμπιστοσύνης σας, αφού ταυτοποιηθεί. /inbox: οποιοσδήποτε, χωρίς ταυτοποίηση
Ποιος μπορεί να σας παραδώσει αλληλογραφία Κάθε αποστολέας που ταυτοποιείται Μόνο το δίκτυο εμπιστοσύνης σας
Διαγραφή αλληλογραφίας που λάβατε Ναι Όχι
Γρήγορος επανασυγχρονισμός (NIP-77) Ναι Όχι
Άδεια MIT MIT

Χρησιμοποιήστε το nogringo/nostr-relay ως γραμματοκιβώτιο. Είναι αυτό που κάνει ό,τι χρειάζεται η αλληλογραφία: οποιοσδήποτε μπορεί να σας γράψει, και μόνο εσείς μπορείτε να διαβάσετε. Το HAVEN είναι καλό εργαλείο για άλλα πράγματα (προσωπικά εξερχόμενα, πολυμέσα, ιδιωτικές σημειώσεις), αλλά ως γραμματοκιβώτιο θα απέρριπτε αλληλογραφία από όποιον δεν ακολουθείτε, συμπεριλαμβανομένης της γέφυρας που μεταφέρει το συνηθισμένο email.

Τι χρειάζεστε

Βήμα 1: εκτελέστε το relay

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

Επεξεργαστείτε το .env: δώστε ένα όνομα στο relay (RELAY_NAME) και ορίστε το RELAY_URLS στη δημόσια διεύθυνσή του, wss://relay.example.com.

Έπειτα ανοίξτε το docker-compose.yml και αλλάξτε τη γραμμή της θύρας σε "127.0.0.1:3334:3334". Το relay εμπιστεύεται τη διεύθυνση που του προωθεί ο proxy όταν ελέγχει ποιος ταυτοποιείται, οπότε πρέπει να είναι προσβάσιμο μόνο μέσω του proxy. Εκκινήστε το:

docker compose up -d

Βήμα 2: βάλτε HTTPS μπροστά

Με το Caddy, ολόκληρη η ρύθμιση (/etc/caddy/Caddyfile) είναι:

relay.example.com {
    reverse_proxy 127.0.0.1:3334
}

Επαναφορτώστε το Caddy (sudo systemctl reload caddy). Αν ανοίξετε το https://relay.example.com σε ένα πρόγραμμα περιήγησης, θα πρέπει πλέον να απαντά.

Βήμα 3: ενημερώστε το Herkos

  1. Στο Herkos, ανοίξτε Ρυθμίσεις → Δίκτυο και διακομιστές → Το δικό σας relay και πατήστε Έλεγχος relay. Εισαγάγετε wss://relay.example.com.
  2. Το Herkos συνδέεται και το δοκιμάζει: ζητά την αλληλογραφία κάποιου άλλου και αφήνει έναν δοκιμαστικό φάκελο από έναν άγνωστο (τον οποίο μετά διαγράφει). Θα πρέπει να δείτε Μόνο εσείς μπορείτε να διαβάσετε την αλληλογραφία σας εδώ και Δέχεται αλληλογραφία από οποιονδήποτε αποστολέα.
  3. Πατήστε Ορισμός ως πρώτου relay ιδιωτικών μηνυμάτων και Αποθήκευση στο πάνω μέρος.

Κρατήστε επίσης ένα δημόσιο relay στη λίστα, δεύτερο: αν ο διακομιστής σας είναι εκτός λειτουργίας, η αλληλογραφία έχει πάλι κάπου να περιμένει. Το relay.damus.io είναι καλή δεύτερη επιλογή, γιατί κι αυτό ρωτά ποιος διαβάζει.

Βήμα 4: αντίγραφο ασφαλείας κάθε νύχτα

Το Herkos κρατά το δικό του αντίγραφο της αλληλογραφίας που έχει παραλάβει, αλλά ένας φάκελος που έφτασε ενώ η εφαρμογή σας ήταν κλειστή υπάρχει μόνο στον διακομιστή σας μέχρι να ανοίξετε το Herkos. Ένα νυχτερινό αντίγραφο καλύπτει αυτό το κενό και σας επιτρέπει να ξαναστήσετε τον διακομιστή αν πεθάνει ο δίσκος ή αν ο πάροχος κλείσει τον λογαριασμό σας.

Το relay κρατά τα πάντα σε μία βάση δεδομένων LMDB μέσα στον τόμο Docker nostr-relay_relay-db (το όνομα ξεκινά με τον φάκελο στον οποίο κάνατε clone· ελέγξτε το με docker volume ls). Ένα αρχείο LMDB που αντιγράφεται ενώ το relay γράφει σε αυτό μπορεί να μην ανοίγει, οπότε το σενάριο σταματά το relay για τα λίγα δευτερόλεπτα που διαρκεί ένα τοπικό αντίγραφο, το ξεκινά ξανά και μόνο τότε μεταφορτώνει το αντίγραφο. Όσο είναι σταματημένο, η αλληλογραφία περιμένει στο δημόσιο relay που κρατήσατε δεύτερο στη λίστα σας.

Το αντίγραφο φεύγει από τον διακομιστή με το restic, που το κρυπτογραφεί πριν φύγει. Χρησιμοποιήστε ένα μέρος σε διαφορετικό πάροχο από τον διακομιστή: έναν λογαριασμό SFTP (ένα storage box, έναν υπολογιστή στο σπίτι) ή έναν κάδο συμβατό με S3.

  1. Εγκαταστήστε τα εργαλεία και δημιουργήστε το αποθετήριο. Κρατήστε τον κωδικό πρόσβασης και στον διαχειριστή κωδικών πρόσβασης: χωρίς αυτόν τα αντίγραφα δεν μπορούν να διαβαστούν, και αν υπάρχει μόνο στον διακομιστή, χάνεται μαζί με τον διακομιστή. Για SFTP, ο root χρειάζεται επίσης ένα κλειδί SSH που να δέχεται το μηχάνημα των αντιγράφων ασφαλείας (sudo ssh-keygen -t ed25519, και μετά προσθέστε εκεί το /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. Αποθηκεύστε αυτό ως /usr/local/bin/backup-relay και κάντε το εκτελέσιμο (sudo chmod 700 /usr/local/bin/backup-relay). Αλλάξτε το RELAY_DIR αν δεν κάνατε clone στο /root/nostr-relay. Κρατά τις τελευταίες 14 ημέρες, 8 εβδομάδες και 12 μήνες: έναν χρόνο πίσω, με μέγεθος κοντά σε αυτό της βάσης δεδομένων.

    #!/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. Εκτελέστε το μία φορά χειροκίνητα (sudo /usr/local/bin/backup-relay) και μετά προγραμματίστε το με sudo crontab -e. Η δεύτερη γραμμή διαβάζει ξανά το ένα δέκατο των αποθηκευμένων δεδομένων κάθε μήνα, κάθε φορά διαφορετικό δέκατο, για να αποδείξει ότι τα αντίγραφα ανοίγουν ακόμη. Ρίχνετε πού και πού μια ματιά στο /var/log/backup-relay.log: μια γραμμή με Fatal σημαίνει ότι το αντίγραφο εκείνης της νύχτας απέτυχε.

    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
    

Για επαναφορά (νέος διακομιστής ή μετά από βλάβη δίσκου): στήστε ξανά το relay (βήματα 1 έως 3) και επαναλάβετε τα σημεία 1 και 2 αυτού του βήματος με το ίδιο αποθετήριο, αλλά γράψτε τον κωδικό πρόσβασης που φυλάξατε στο /root/.restic-password αντί να δημιουργήσετε νέο, και παραλείψτε το restic init. Έπειτα αντιγράψτε το πιο πρόσφατο αντίγραφο ασφαλείας στον τόμο του 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

Μία φορά τον χρόνο, κάντε αυτή την επαναφορά σε ένα εφεδρικό μηχάνημα και ελέγξτε ότι το relay ξεκινά με την αλληλογραφία σας μέσα: είναι η μόνη δοκιμή που αποδεικνύει ολόκληρη την αλυσίδα, μαζί με τον κωδικό πρόσβασης.

Καλό να ξέρετε