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
- Mesin yang selalu menyala dan dapat dijangkau dari internet: VPS kecil (sekitar 4-6 € per bulan) atau komputer di rumah.
- Domain atau subdomain yang mengarah ke mesin itu, misalnya
relay.example.com. - Docker dan reverse proxy yang menyediakan HTTPS. Contoh-contoh di sini menggunakan Caddy, yang mendapatkan sertifikatnya sendiri.
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
- Di Herkos, buka Setelan → Jaringan & server → Relay Anda sendiri lalu ketuk
Periksa relay. Masukkan
wss://relay.example.com. - 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.
- 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.
-
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.pubdi 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' -
Simpan ini sebagai
/usr/local/bin/backup-relaydan jadikan dapat dieksekusi (sudo chmod 700 /usr/local/bin/backup-relay). UbahRELAY_DIRjika 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 -
Jalankan sekali secara manual (
sudo /usr/local/bin/backup-relay), lalu jadwalkan dengansudo 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 berisiFatalberarti 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
- Ini adalah relay serbaguna. Selain email Anda, relay ini menerima catatan publik dari siapa pun, sehingga orang lain dapat menyimpan sesuatu di server Anda. Relay ini belum memiliki setelan untuk menolaknya.
- Email dari email biasa tiba melalui jembatan, yang harus mengidentifikasi diri saat relay Anda memintanya. Jika email biasa berhenti masuk setelah perubahan ini, relay publik yang Anda simpan di daftar akan tetap menerimanya.
- Cadangkan datanya (langkah 4). Amplop-amplop disimpan di volume Docker
relay-db, dan email yang belum diambil aplikasi Anda hanya ada di sana. - Alamat IP Anda. Relay melihat alamat setiap aplikasi yang terhubung dengannya, seperti relay mana pun. Di server Anda sendiri, satu-satunya yang melihatnya adalah Anda.