Знакомство с nostrfy
Что такое nostrfy, что он умеет из коробки и какие идеи лежат в основе универсального движка Nostr-релея на Rust.
nostrfy — сервер релея для протокола Nostr. Он хранит события (посты, реакции, профили…), отправленные клиентами, и доставляет их в ответ на запросы по подпискам.
Ключевые возможности
- Простой и стабильный — написан на Rust; один бинарник делает всё.
- Быстрое хранилище и поиск — база LMDB с индексом полнотекстового поиска (NIP-50).
- Широкая поддержка NIP — реализовано 36 NIP плюс файловый сервер Blossom: удаление, proof-of-work, делегирование, группы, поиск и API управления.
- Прост в эксплуатации — режим демона, ротация логов, горячая перезагрузка конфигурации (SIGHUP), живая статистика, REST API и метрики Prometheus.
- Лёгкая миграция — одна команда импортирует существующую strfry базы данных: dry-run, объединение настроек и безопасные повторные запуски (руководство по миграции).
Что вы получаете из коробки
Один бинарник nostrfy на одном порту предоставляет:
- WebSocket-релей и информационный документ NIP-11.
- Доступный только для чтения REST API, расположенный по адресу
/api/v1/...— отдельный поток чтения гарантирует, что REST-трафик никогда не задержит WebSocket-подписчиков. - файловый сервер Blossom (размещение медиа) на отдельном домене.
- RPC управления NIP-86, проверка работоспособности и метрики Prometheus
/metrics.
Потребление ресурсов
Проверено, что nostrfy работает на 0.25 vCPU / 512 MB VPS. Карта памяти LMDB — разреженная виртуальная резервация на 1 TiB, физический диск растёт только с реальными данными, а память процесса остаётся стабильной: релей с базой 252 MB занимал 7.9 MB приватного RSS.
Быстрое знакомство
Три команды — установка, инициализация и запуск:
sh
curl -fsSL https://raw.githubusercontent.com/iqbqioza/nostrfy/main/install.sh | sh
nostrfy --config nostrfy.toml init
nostrfy --config nostrfy.toml startЗатем убедитесь, что релей запущен:
sh
curl http://127.0.0.1:8080/healthИ получите его документ NIP-11:
sh
curl -H "Accept: application/nostr+json" http://127.0.0.1:8080/