Herkos

Relay kotak surat Anda sendiri

Terakhir diperbarui: 3 Oktober 2026

Email Herkos dikirim sebagai amplop tersegel (gift wrap NIP-59) dan menunggu di relay dalam daftar relay DM Anda sampai aplikasi Anda mengambilnya. Sebagian besar relay publik menyerahkan amplop-amplop itu kepada siapa pun yang memintanya. Tidak ada yang dapat membukanya, tetapi siapa pun dapat menghitung siapa yang menerima email dan kapan, dan relay dapat menghapusnya kapan pun ia mau.

Relay milik Anda sendiri yang menanyakan siapa yang membaca (NIP-42) menyerahkan amplop Anda hanya kepada Anda dan tidak kepada orang lain, serta menyimpannya selama yang Anda tentukan. Halaman ini menjelaskan cara menyiapkannya dalam tiga langkah, ditambah pencadangan setiap malam. Prosesnya memakan waktu sekitar lima belas menit jika Anda sudah memiliki server.

Relay mana yang digunakan

Kami menjalankan kedua kandidat pada 24 September 2026 dan memeriksa apa yang sebenarnya mereka lakukan terhadap email, bukan apa yang mereka iklankan.

nogringo/nostr-relay HAVEN 1.2.2
Siapa yang dapat membaca amplop Anda Hanya Anda, setelah mengidentifikasi diri /chat: siapa pun dalam jaringan kepercayaan (web of trust) Anda, setelah mengidentifikasi diri. /inbox: siapa pun, tanpa identifikasi
Siapa yang dapat mengirim email kepada Anda Pengirim mana pun yang mengidentifikasi diri Hanya jaringan kepercayaan Anda
Menghapus email yang Anda terima Ya Tidak
Sinkronisasi ulang cepat (NIP-77) Ya Tidak
Lisensi MIT MIT

Gunakan nogringo/nostr-relay sebagai kotak surat Anda. Relay inilah yang melakukan apa yang dibutuhkan email: siapa pun dapat menulis kepada Anda, dan hanya Anda yang dapat membaca. HAVEN adalah alat yang bagus untuk keperluan lain (outbox pribadi, media, catatan pribadi), tetapi sebagai kotak surat, HAVEN akan menolak email dari siapa pun yang tidak Anda ikuti, termasuk jembatan yang membawa email biasa.

Yang Anda butuhkan

Langkah 1: jalankan relay

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

Edit .env: beri nama relay (RELAY_NAME) dan atur RELAY_URLS ke alamat publiknya, wss://relay.example.com.

Kemudian buka docker-compose.yml dan ubah baris port menjadi "127.0.0.1:3334:3334". Relay memercayai alamat yang diteruskan proxy kepadanya saat memeriksa siapa yang sedang mengidentifikasi diri, jadi relay hanya boleh dapat dijangkau melalui proxy. Jalankan relay:

docker compose up -d

Langkah 2: pasang HTTPS di depannya

Dengan Caddy, seluruh konfigurasinya (/etc/caddy/Caddyfile) adalah:

relay.example.com {
    reverse_proxy 127.0.0.1:3334
}

Muat ulang Caddy (sudo systemctl reload caddy). Membuka https://relay.example.com di browser sekarang seharusnya mendapat jawaban.

Langkah 3: beri tahu Herkos

  1. Di Herkos, buka Setelan → Jaringan & server → Relay Anda sendiri lalu ketuk Periksa relay. Masukkan wss://relay.example.com.
  2. Herkos terhubung dan mengujinya: Herkos meminta email milik orang lain, dan meninggalkan amplop uji dari orang asing (lalu menghapusnya). Anda seharusnya melihat Hanya Anda yang dapat membaca email Anda di sini dan Menerima email dari pengirim mana pun.
  3. Ketuk Jadikan relay DM pertama Anda, lalu Simpan di bagian atas.

Tetap simpan juga sebuah relay publik di daftar, di urutan kedua: jika server Anda mati, email tetap punya tempat untuk menunggu. relay.damus.io adalah pilihan kedua yang baik, karena relay ini juga menanyakan siapa yang membaca.

Langkah 4: cadangkan setiap malam

Herkos menyimpan salinannya sendiri dari email yang telah diambilnya, tetapi amplop yang tiba saat aplikasi Anda tertutup hanya ada di server Anda sampai Anda membuka Herkos. Salinan setiap malam menutup celah itu, dan memungkinkan Anda membangun ulang server jika disknya rusak atau penyedia menutup akun Anda.

Relay menyimpan semuanya dalam satu basis data LMDB di dalam volume Docker nostr-relay_relay-db (namanya diawali dengan nama folder tempat Anda melakukan clone; periksa dengan docker volume ls). File LMDB yang disalin saat relay sedang menulis ke dalamnya mungkin tidak dapat dibuka, jadi skrip menghentikan relay selama beberapa detik yang dibutuhkan untuk salinan lokal, menjalankannya kembali, dan baru setelah itu mengunggah salinannya. Selama relay berhenti, email menunggu di relay publik yang Anda simpan di urutan kedua dalam daftar Anda.

Salinan dikirim keluar dari server dengan restic, yang mengenkripsinya sebelum keluar. Gunakan tempat di penyedia yang berbeda dari server: akun SFTP (storage box, komputer di rumah) atau bucket yang kompatibel dengan S3.

  1. Instal alat-alatnya dan buat repositori. Simpan juga kata sandinya di pengelola kata sandi Anda: tanpanya salinan tidak dapat dibaca, dan jika kata sandi itu hanya ada di server, kata sandi itu ikut hilang bersama server. Untuk SFTP, root juga memerlukan kunci SSH yang diterima oleh mesin cadangan (sudo ssh-keygen -t ed25519, lalu tambahkan /root/.ssh/id_ed25519.pub di sana).

    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. Simpan ini sebagai /usr/local/bin/backup-relay dan jadikan dapat dieksekusi (sudo chmod 700 /usr/local/bin/backup-relay). Ubah RELAY_DIR jika Anda tidak melakukan clone ke /root/nostr-relay. Skrip ini menyimpan 14 hari, 8 minggu, dan 12 bulan terakhir: mundur hingga satu tahun, dengan ukuran yang mendekati ukuran basis data.

    #!/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. Jalankan sekali secara manual (sudo /usr/local/bin/backup-relay), lalu jadwalkan dengan sudo crontab -e. Baris kedua membaca kembali sepersepuluh dari data yang tersimpan setiap bulan, sepersepuluh yang berbeda setiap kali, untuk membuktikan bahwa salinan masih dapat dibuka. Sesekali lihat /var/log/backup-relay.log: baris yang berisi Fatal berarti salinan malam itu gagal.

    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
    

Untuk memulihkan (server baru, atau setelah disk rusak): siapkan kembali relay (langkah 1 sampai 3) dan ulangi poin 1 dan 2 dari langkah ini dengan repositori yang sama, tetapi tulis kata sandi yang Anda simpan ke dalam /root/.restic-password alih-alih membuat yang baru, dan lewati restic init. Kemudian salin cadangan terbaru ke volume 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

Setahun sekali, lakukan pemulihan ini di mesin cadangan dan periksa bahwa relay berjalan dengan email Anda di dalamnya: itulah satu-satunya pengujian yang membuktikan seluruh rantai, termasuk kata sandinya.

Perlu diketahui