Настройка Nostr Relay с Nostream на Ubuntu
Оглавление
- Почему стоит выбрать Nostream
- Требования и предварительная подготовка
- Установка Docker и Docker Compose
- Установка Nostream
- Настройка обратного прокси Nginx и SSL
- Подключение клиентов Gossip и Amethyst
- Проверка и тестирование работоспособности
- Безопасность и эксплуатация
- Устранение неполадок
- Контрольный список развертывания
Почему стоит выбрать Nostream
Nostream — лёгкий relay для протокола Nostr, написанный на TypeScript. Он позволяет вам контролировать свои данные и управлять поведением узла в сети Nostr. Поддержка Docker обеспечивает удобное развёртывание и изоляцию сервисов. Кратко:
- Приватность и контроль данных: вы управляете хранилищем и конфигурацией.
- Простота развёртывания: готовые скрипты и Docker-контейнеры.
- Совместимость: работает с популярными клиентами Nostr, такими как Gossip и Amethyst.
Важно: Nostr — это децентрализованный протокол для обмена короткими сообщениями и событиями. Relay принимает и ретранслирует зашифрованные события между клиентами.
Требования и предварительная подготовка
Коротко о требованиях:
- VPS с Ubuntu (рекомендуется 8 ГБ RAM и больше). В production можно использовать 2 CPU/8GB минимум. Это оценка, зависящая от нагрузки.
- Домен с A-записью на IP сервера и корректной PTR-записью для обратного разрешения.
- Рабочая пара ключей Nostr для администратора (pubkey/privkey).
- Пользователь с sudo.
Рекомендации перед началом:
- Забекапьте важные данные и конфигурации.
- Откройте порты в брандмауэре: 80 и 443 для HTTP/HTTPS, при необходимости 8008 для внутреннего доступа.
- Настройте мониторинг и алерты для дискового пространства и использования CPU.
Установка Docker и Docker Compose
- Импортируйте GPG-ключ Docker и создайте каталог для ключей:
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg- Создайте файл репозитория Docker:
sudo nano /etc/apt/sources.list.d/docker.listВставьте в него:
deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu jammy stable- Обновите систему и установите пакеты:
sudo apt update && sudo apt upgrade -y
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin docker-buildx-plugin nginx git nodejs npm- Добавьте текущего пользователя в группу docker (замените myuser на ваше имя пользователя):
sudo usermod -aG docker myuserПримечание: для применения группы выйдите и войдите снова в сеанс SSH или выполните newgrp docker.
Установка Nostream
- Клонируйте репозиторий и перейдите в папку:
git clone https://github.com/Cameri/nostream.git && cd nostream- Запустите скрипт bootstrap для сборки и запуска контейнеров Docker:
./scripts/startДождитесь появления логотипа «nostream» в выводе контейнера, затем нажмите Ctrl+C, чтобы прервать показ логов.

- Откройте файл конфигурации и отредактируйте параметры:
nano ./.nostr/settings.yamlОбновите значения:
- relay_url: укажите домен вашего инстанса, например nostr.example.com
- name: удобное имя вашего релея
- pubkey: публичный ключ администратора (ваш основной nostr pubkey)
- contact: рабочий email для обратной связи



- Отредактируйте docker-compose.yml и задайте секрет окружения:
nano ./docker-compose.ymlВ разделе environment замените значение SECRET на случайную строку:
SECRET: your_random_secret_hereГенерация случайной строки 64 символа:
cat /dev/urandom | tr -dc 'A-Za-z0-9' | fold -w 64 | head -n 1- Перезапустите сервис:
./scripts/startНастройка обратного прокси Nginx и SSL
Для публичного доступа используйте Nginx как обратный прокси, маршрутизирующий WebSocket и HTTP трафик к контейнерам.
- Создайте конфигурацию сайта:
sudo nano /etc/nginx/sites-available/nostreamПример конфигурации (замените nostr.myvpsserver.top на ваш домен):
server {
server_name nostr.myvpsserver.top;
location / {
proxy_pass http://127.0.0.1:8008;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
}
}- Активируйте сайт и проверьте конфигурацию:
sudo ln -s /etc/nginx/sites-available/nostream /etc/nginx/sites-enabled/nostream
sudo nginx -t
sudo systemctl restart nginx- Установка certbot и получение SSL:
sudo snap install core
sudo snap install certbot --classic
sudo certbot register --agree-tos -m you@your-email.invalid
sudo certbot --nginx -d nostr.myvpsserver.topПосле успешного запроса сертификата сайт должен быть доступен по HTTPS и WebSocket через wss://.

Важно: при работе с WebSocket убедитесь, что Nginx правильно проксирует заголовки Upgrade и Connection.
Подключение к Gossip
- Откройте Gossip и выберите в боковом меню “Relays”.

- Нажмите Add Relay.
- Введите адрес вашего релея с префиксом wss://, например wss://nostr.example.com.

Нажмите Check, затем Configure. Включите Read и Write для отправки и получения сообщений.
Включите Inbox, Outbox и Advertise при необходимости для взаимодействия с другими релеями.

- Отправьте тестовую заметку (note) в Gossip, чтобы проверить ретрансляцию.
Подключение к Amethyst
- В Amethyst кликните по иконке пользователя в левом верхнем углу.

- Выберите Relays в боковой панели.

- Нажмите Add a Relay и введите адрес релея без протокола, например nostr.example.com.

- Нажмите Add и отправьте тестовую заметку, чтобы убедиться в работоспособности.

Проверка и тестирование работоспособности
Критерии приёмки для минимально рабочей установки:
- HTTPS доступ к домену и валидный сертификат.
- WebSocket соединение устанавливается (wss://).
- Клиент может отправлять и получать заметки через релей.
- Логи контейнеров не содержат критических ошибок при старте.
Тесты и приёмо-испытания:
- Отправьте note из Gossip и убедитесь, что оно появляется в Amethyst.
- Проверьте заголовки в HTTP-response от Nginx на предмет Upgrade и Connection.
- Сделайте curl-запрос к HTTP endpoint для проверки доступности (если доступен API).
Пример базовой проверки WebSocket из терминала:
# с использованием websocat (установите предварительно):
websocat wss://nostr.myvpsserver.topБезопасность и эксплуатация
Рекомендации по безопасности:
- Храните приватный ключ администратора отдельно, используйте менеджер секретов.
- Ограничьте доступ к SSH с помощью ключей и двухфакторной аутентификации.
- Периодически выполнять обновления образов Docker и операционной системы.
- Настройте ротацию логов и дисковую квоту для контейнеров.
Жёсткая настройка Nginx и Docker:
- Используйте fail2ban или аналог для защиты от bruteforce.
- Запуск контейнеров с минимальными привилегиями, не используйте –privileged.
- Ограничьте ресурсы Docker через limits в docker-compose (cpu, memory).
Мониторинг и бэкап:
- Настройте прометей/графану или простой мониторинг использования CPU/памяти.
- Делайте резервные копии конфигураций и важных данных (settings.yaml, docker-compose.yml).
Устранение неполадок
Сценарии и решения:
- Проблема: Nginx не проксирует WebSocket. Решение: проверьте proxy_set_header Upgrade и Connection, убедитесь, что nginx перезапущен.
- Проблема: Сертификат certbot не может получить challenge. Решение: проверьте A-запись DNS и доступ к порту 80.
- Проблема: Клиенты не видят релей. Решение: проверьте лог контейнера nostream (
docker logs) и проверьте настройки relay_url и pubkey в settings.yaml.
Полезные команды для диагностики:
sudo journalctl -u nginx -f
sudo docker ps
sudo docker logs -f nostream
sudo nginx -tКонтрольный список развертывания
Роль: администратор сервера
- Домен и DNS: A и PTR записи настроены
- Установлен Docker и зависимости
- Клонирован nostream и запущен ./scripts/start
- Настроен settings.yaml (relay_url, name, pubkey, contact)
- Задан SECRET в docker-compose.yml
- Настроен Nginx и сертификат SSL через certbot
- Подключены клиенты Gossip и Amethyst и выполнены тесты
- Настроены бэкапы и мониторинг
Частые ошибки и когда развёртывание не подходит
Когда собственный релей не лучший выбор:
- Если у вас очень низкая доступность канала или частые перезапуски VPS — релей будет ненадёжен.
- Если вы не готовы обслуживать обновления и безопасность — лучше использовать доверенные публичные релею.
- При ограниченном бюджете на трафик и хранение данных публичные решения могут быть экономичнее.
Короткая методология эксплуатации
- Подготовка: домен, DNS, ключи.
- Развёртывание: Docker, Nostream, Nginx.
- Защита: SSL, firewall, SSH.
- Тестирование: клиенты и логирование.
- Эксплуатация: мониторинг, обновления, бэкап.
Краткая справка по терминологии
- Relay: сервер, принимающий и ретранслирующий события Nostr.
- Pod: Docker контейнер или сервис.
- wss://: WebSocket over TLS — защищённый канал для передачи событий.
Заключение
Развёртывание собственного Nostr Relay даёт контроль над вашими данными и гибкость в настройке. Nostream упрощает процесс благодаря Docker-ориентированной архитектуре. Следуйте приведённым шагам, проверьте работу клиентов и настройте базовую безопасность перед долгосрочной эксплуатацией.
Кредиты изображения: Paulina Chmolowska via Unsplash. Все изменения и скриншоты подготовлены Ramces Red.

Похожие материалы
Как установить CentOS на рабочий стол
Обзор нового Bing с ChatGPT
Google Watchlist: как следить за фильмами и сериалами
Как отменить событие в Google Календаре
Как снизить высокий пинг в Windows 10