Собственное почтовое реле
Последнее обновление: 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 — хороший инструмент для других задач (личный outbox, медиафайлы, личные заметки), но как почтовый ящик он отвергал бы почту от всех, на кого вы не подписаны, включая мост, который доставляет обычную электронную почту.
Что понадобится
- Машина, которая всегда включена и доступна из интернета: небольшой 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-адрес. Реле видит адрес каждого приложения, которое к нему подключается, как и любое реле. На вашем собственном сервере их видите только вы.