Власний поштовий релей
Останнє оновлення: 3 жовтня 2026 року
Пошта Herkos подорожує в запечатаних конвертах (NIP-59 gift wrap) і чекає на релеях із вашого списку релеїв DM, доки ваш застосунок її не забере. Більшість публічних релеїв віддають ці конверти будь-кому, хто попросить. Ніхто не може їх відкрити, але будь-хто може порахувати, хто отримує пошту і коли, а релей може видалити їх, коли забажає.
Власний релей, який питає, хто читає (NIP-42), віддає ваші конверти вам і нікому іншому та зберігає їх стільки, скільки вирішите ви. Ця сторінка пояснює, як налаштувати такий релей у три кроки, плюс щонічне резервне копіювання. Це займає близько п'ятнадцяти хвилин, якщо у вас уже є сервер.
Який релей обрати
24 вересня 2026 року ми запустили обидва кандидати й перевірили, що вони насправді роблять із поштою, а не що вони рекламують.
| nogringo/nostr-relay | HAVEN 1.2.2 | |
|---|---|---|
| Хто може читати ваші конверти | Лише ви, після ідентифікації | /chat: будь-хто з вашої мережі довіри, після ідентифікації. /inbox: будь-хто, без ідентифікації |
| Хто може доставляти вам пошту | Будь-який відправник, що ідентифікується | Лише ваша мережа довіри |
| Видалення отриманої пошти | Так | Ні |
| Швидка ресинхронізація (NIP-77) | Так | Ні |
| Ліцензія | MIT | MIT |
Використовуйте nogringo/nostr-relay як свою поштову скриньку. Саме він робить те, що потрібно пошті: будь-хто може вам написати, і лише ви можете читати. HAVEN — хороший інструмент для інших речей (особиста вихідна скринька, медіа, приватні нотатки), але як поштова скринька він відхилятиме пошту від усіх, на кого ви не підписані, включно з мостом, що переносить звичайну електронну пошту.
Що вам знадобиться
- Машина, яка завжди ввімкнена й доступна з інтернету: невеликий VPS (близько 4-6 € на місяць) або домашній комп'ютер.
- Домен або піддомен, що вказує на неї, наприклад
relay.example.com. - Docker і зворотний проксі, який забезпечує HTTPS. У прикладах використано Caddy, який сам отримує сертифікат.
Крок 1: запустіть релей
git clone https://github.com/nogringo/nostr-relay
cd nostr-relay
cp .env.example .env
Відредагуйте .env: дайте релею назву (RELAY_NAME) і задайте в RELAY_URLS його
публічну адресу, wss://relay.example.com.
Потім відкрийте docker-compose.yml і змініть рядок порту на
"127.0.0.1:3334:3334". Перевіряючи, хто ідентифікується, релей довіряє адресі, яку
йому пересилає проксі, тож він має бути доступний лише через
проксі. Запустіть його:
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
- У Herkos відкрийте Налаштування → Мережа та сервери → Власний релей і торкніться
Перевірити релей. Введіть
wss://relay.example.com. - Herkos під'єднується й випробовує його: просить чужу пошту і залишає тестовий конверт від незнайомця (потім видаляє його). Ви маєте побачити Лише ви можете читати тут свою пошту і Приймає пошту від будь-якого відправника.
- Торкніться Зробити першим релеєм DM, а потім Зберегти вгорі.
Залиште в списку також публічний релей, другим: якщо ваш сервер не працює, пошті
все одно буде де чекати. relay.damus.io — хороший другий варіант, бо він
теж питає, хто читає.
Крок 4: робіть резервну копію щоночі
Herkos зберігає власну копію пошти, яку вже забрав, але конверт, що надійшов, поки ваш застосунок був закритий, існує лише на вашому сервері, доки ви не відкриєте Herkos. Щонічна копія закриває цю прогалину й дає змогу відновити сервер, якщо диск вийде з ладу або провайдер закриє ваш обліковий запис.
Релей зберігає все в одній базі даних LMDB усередині тому Docker
nostr-relay_relay-db (назва починається з теки, в яку ви клонували; перевірте
її командою docker volume ls). Файл LMDB, скопійований під час запису релеєм,
може не відкритися, тож скрипт зупиняє релей на ті кілька секунд, які триває локальне
копіювання, знову запускає його і лише тоді вивантажує копію. Поки релей зупинено,
пошта чекає на публічному релеї, який ви залишили другим у списку.
Копія залишає сервер за допомогою restic, який шифрує її перед відправленням. Використовуйте місце в іншого провайдера, ніж сервер: обліковий запис SFTP (storage box, домашній комп'ютер) або S3-сумісний бакет.
-
Встановіть інструменти й створіть репозиторій. Збережіть пароль також у своєму менеджері паролів: без нього копії неможливо прочитати, а якщо він зберігається лише на сервері, то загине разом із сервером. Для 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' -
Збережіть це як
/usr/local/bin/backup-relayі зробіть виконуваним (sudo chmod 700 /usr/local/bin/backup-relay). ЗмінітьRELAY_DIR, якщо ви клонували не в/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 -
Запустіть його один раз вручну (
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
Щоб відновити (новий сервер або після збою диска): знову налаштуйте релей
(кроки 1–3) і повторіть пункти 1 і 2 цього кроку з тим самим репозиторієм,
але запишіть збережений пароль у /root/.restic-password замість того, щоб
створювати новий, і пропустіть restic init. Потім скопіюйте останню резервну копію в
том релея:
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
Раз на рік виконуйте це відновлення на запасній машині й перевіряйте, що релей запускається з вашою поштою: це єдина перевірка, яка доводить, що працює весь ланцюжок, включно з паролем.
Варто знати
- Це релей загального призначення. Окрім вашої пошти, він приймає публічні нотатки від будь-кого, тож інші люди можуть зберігати щось на вашому сервері. Налаштування, щоб їх відхиляти, у нього поки немає.
- Звичайна електронна пошта надходить через міст, який має ідентифікуватися, коли ваш релей про це просить. Якщо після зміни звичайна пошта перестане надходити, публічний релей, який ви залишили в списку, однаково її отримуватиме.
- Робіть резервні копії даних (крок 4). Конверти зберігаються в томі Docker
relay-db, і пошта, яку ваш застосунок ще не забрав, існує лише там. - Ваша IP-адреса. Релей бачить адресу кожного застосунку, що до нього під'єднується, як і будь-який релей. На вашому власному сервері їх бачите лише ви.