Herkos

Kendi posta kutusu aktarıcınız

Son güncelleme: 3 Ekim 2026

Herkos postası mühürlü zarflar (NIP-59 gift wrap) olarak yolculuk eder ve uygulamanız onu alana kadar DM aktarıcı listenizdeki aktarıcılarda (relay) bekler. Herkese açık aktarıcıların çoğu bu zarfları soran herkese verir. Kimse onları açamaz, ama herkes kimin ne zaman posta aldığını sayabilir ve aktarıcı onları istediği zaman silebilir.

Kimin okuduğunu soran (NIP-42) kendinize ait bir aktarıcı, zarflarınızı size ve başka hiç kimseye vermez ve onları sizin karar verdiğiniz süre boyunca saklar. Bu sayfa, birini üç adımda, artı her gece alınan bir yedekle nasıl kuracağınızı anlatır. Zaten bir sunucunuz varsa yaklaşık on beş dakika sürer.

Hangi aktarıcıyı kullanmalı

Her iki adayı 24 Eylül 2026'da çalıştırdık ve reklamlarında ne dediklerini değil, postayla gerçekte ne yaptıklarını denetledik.

nogringo/nostr-relay HAVEN 1.2.2
Zarflarınızı kim okuyabilir Yalnızca siz, kimliğinizi doğruladıktan sonra /chat: güven ağınızdaki herkes, kimliğini doğruladıktan sonra. /inbox: herkes, hiçbir kimlik doğrulaması olmadan
Size kim posta teslim edebilir Kimliğini doğrulayan her gönderici Yalnızca güven ağınız
Aldığınız postayı silme Evet Hayır
Hızlı yeniden eşitleme (NIP-77) Evet Hayır
Lisans MIT MIT

Posta kutunuz olarak nogringo/nostr-relay kullanın. Postanın gerektirdiğini yapan odur: herkes size yazabilir ve yalnızca siz okuyabilirsiniz. HAVEN başka işler için (kişisel giden kutusu, medya, özel notlar) iyi bir araçtır, ama bir posta kutusu olarak takip etmediğiniz herkesten, sıradan e-postayı taşıyan köprü dâhil, gelen postayı geri çevirirdi.

Neye ihtiyacınız var

Adım 1: aktarıcıyı çalıştırın

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

.env dosyasını düzenleyin: aktarıcıya bir ad verin (RELAY_NAME) ve RELAY_URLS değerini herkese açık adresi olan wss://relay.example.com olarak ayarlayın.

Ardından docker-compose.yml dosyasını açın ve port satırını "127.0.0.1:3334:3334" olarak değiştirin. Aktarıcı, kimin kimlik doğruladığını denetlerken vekil sunucunun kendisine ilettiği adrese güvenir; bu yüzden yalnızca vekil sunucu üzerinden erişilebilir olmalıdır. Başlatın:

docker compose up -d

Adım 2: önüne HTTPS koyun

Caddy ile tüm yapılandırma (/etc/caddy/Caddyfile) şudur:

relay.example.com {
    reverse_proxy 127.0.0.1:3334
}

Caddy'yi yeniden yükleyin (sudo systemctl reload caddy). Artık bir tarayıcıda https://relay.example.com açıldığında yanıt vermelidir.

Adım 3: Herkos'a söyleyin

  1. Herkos'ta Ayarlar → Ağ ve sunucular → Kendi relay'in bölümünü açın ve Relay kontrol et'e dokunun. wss://relay.example.com girin.
  2. Herkos bağlanır ve onu dener: başka birinin postasını ister ve bir yabancıdan bir deneme zarfı bırakır (sonra onu siler). Buradaki postanı yalnızca sen okuyabilirsin ve Her göndericiden posta kabul eder ifadelerini görmelisiniz.
  3. İlk DM relay'in yap'a ve en üstteki Kaydet'e dokunun.

Listede ikinci sırada herkese açık bir aktarıcı da tutun: sunucunuz çökerse postanın yine bekleyeceği bir yer olur. relay.damus.io iyi bir ikinci seçenektir, çünkü o da kimin okuduğunu sorar.

Adım 4: her gece yedekleyin

Herkos topladığı postanın kendi kopyasını tutar, ama uygulamanız kapalıyken gelen bir zarf, siz Herkos'u açana kadar yalnızca sunucunuzda bulunur. Gecelik bir kopya bu boşluğu kapatır ve disk bozulursa ya da sağlayıcı hesabınızı kapatırsa sunucuyu yeniden kurmanızı sağlar.

Aktarıcı her şeyi nostr-relay_relay-db Docker biriminin içindeki tek bir LMDB veritabanında tutar (ad, klonladığınız klasörün adıyla başlar; docker volume ls ile denetleyin). Aktarıcı ona yazarken kopyalanan bir LMDB dosyası açılmayabilir; bu yüzden betik, yerel bir kopyanın sürdüğü birkaç saniye için aktarıcıyı durdurur, yeniden başlatır ve ancak ondan sonra kopyayı yükler. Durduğu sürece posta, listenizde ikinci sırada tuttuğunuz herkese açık aktarıcıda bekler.

Kopya sunucudan restic ile çıkar; restic onu ayrılmadan önce şifreler. Sunucudan farklı bir sağlayıcıdaki bir yer kullanın: bir SFTP hesabı (bir depolama kutusu, evde bir bilgisayar) veya S3 uyumlu bir bucket.

  1. Araçları kurun ve depoyu oluşturun. Parolayı parola yöneticinizde de saklayın: o olmadan kopyalar okunamaz ve yalnızca sunucuda yaşıyorsa sunucuyla birlikte ölür. SFTP için root kullanıcısının yedekleme makinesinin kabul ettiği bir SSH anahtarına da ihtiyacı vardır (sudo ssh-keygen -t ed25519, ardından /root/.ssh/id_ed25519.pub dosyasını oraya ekleyin).

    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. Bunu /usr/local/bin/backup-relay olarak kaydedin ve çalıştırılabilir yapın (sudo chmod 700 /usr/local/bin/backup-relay). /root/nostr-relay içine klonlamadıysanız RELAY_DIR değerini değiştirin. Son 14 günü, 8 haftayı ve 12 ayı tutar: veritabanınınkine yakın bir boyutta, bir yıl geriye.

    #!/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. Bir kez elle çalıştırın (sudo /usr/local/bin/backup-relay), ardından sudo crontab -e ile zamanlayın. İkinci satır her ay saklanan verinin onda birini, her seferinde farklı bir onda birini geri okuyarak kopyaların hâlâ açılabildiğini kanıtlar. Arada bir /var/log/backup-relay.log dosyasına bakın: Fatal içeren bir satır, o gecenin kopyasının başarısız olduğu anlamına gelir.

    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
    

Geri yüklemek için (yeni bir sunucu ya da bir disk arızasından sonra): aktarıcıyı yeniden kurun (1'den 3'e kadar adımlar) ve bu adımın 1. ve 2. maddelerini aynı depoyla tekrarlayın, ancak yeni bir parola oluşturmak yerine sakladığınız parolayı /root/.restic-password içine yazın ve restic init adımını atlayın. Ardından en son yedeği aktarıcının birimine kopyalayın:

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

Yılda bir kez bu geri yüklemeyi yedek bir makinede yapın ve aktarıcının postanızla birlikte başladığını denetleyin: parola dâhil tüm zinciri kanıtlayan tek deneme budur.

Bilmekte yarar var