Развёртывание на Fly.io
Разверните nostrfy на Fly.io за несколько минут с помощью готового шаблона — тома, машины, TLS-терминация и простые обновления.
Что входит в репозиторий
| Файл | Назначение |
|---|---|
Dockerfile | Образ контейнера — скачивает готовый бинарник релиза из GitHub release assets (x86_64 / aarch64, выбирается архитектурой сборки) и проверяет его sha256-контрольную сумму. Компиляция на Fly не выполняется |
fly.toml | Конфигурация приложения Fly: HTTP-сервис на порту 8080, проверки работоспособности, монтирование тома /data, всегда включённые машины |
deploy/nostrfy.container.toml | Конфигурация релея, встроенная в образ по пути /etc/nostrfy/nostrfy.toml |
Предварительные требования
- Аккаунт Fly.io
- CLI flyctl (
fly version) - Выполнен вход:
fly auth login
Развёртывание в четыре шага
1. Создайте приложение (пока без развёртывания)
sh
cd /path/to/nostrfy
fly launch --no-deploy --name <your-app-name> --region <region><your-app-name>должен быть уникальным на Fly (он станет частью URL релея:wss://<your-app-name>.fly.dev)<region>: напримерnrt(Токио),fra,iad,sjc— выберите регион, ближайший к вашим пользователям- Это может перезаписать значения
fly.tomlиз шаблона (имя приложения, регион) — это нормально
2. Создайте постоянный том
База данных LMDB находится на томе Fly, смонтированном в /data:
sh
fly volumes create data --size 1 --region <region>Для начала достаточно 1 ГБ (база растёт по мере использования). Позже можно изменить размер или сразу создать том большего размера.
3. Настройте релей
Отредактируйте deploy/nostrfy.container.toml перед развёртыванием:
toml
[relay]
name = "My Relay" # показывается в клиентах через NIP-11
description = "A friendly relay for everyone"
private_key = "..." # обязательно для групп NIP-29
public_url = "wss://<your-app-name>.fly.dev" # обязательно для NIP-42/62/98private_key: сгенерируйте локально командойnostrfy genkey(с временной конфигурацией) и вставьте ключ, либо сгенерируйте любым Nostr-инструментомpublic_urlобязан совпадать с именем приложения — без него не будут работать NIP-42 AUTH, NIP-62 vanish и NIP-86 management API- Всё остальное можно оставить по умолчанию
4. Развёртывание
sh
fly deployFly собирает образ (несколько минут — скачивание бинарника быстрое, образ небольшой), создаёт машину и выполняет проверку работоспособности к /health.
Проверка
sh
# строка в журнале: "relay listening on ws://0.0.0.0:8080"
fly logs
# документ информации NIP-11 по публичному адресу
curl https://<your-app-name>.fly.dev/
# направьте ваш Nostr-клиент на wss://<your-app-name>.fly.devМасштабирование и обновления
- Обновление релея: отредактируйте
deploy/nostrfy.container.tomlи снова выполнитеfly deploy— образ всегда скачивает последний бинарник релиза GitHub, поэтому обновление — это простое повторное развёртывание - Фиксация версии:
docker build --build-arg NOSTRFY_VERSION=v0.1.16 ...или изменитеARGв Dockerfile - Масштаб: по умолчанию релей — одна машина.
fly machines clone <id>создаёт вторую машину; обе используют общий том (тома Fly поддерживают несколько машин в одном регионе) - Метрики: Fly собирает конечную точку
/metrics(см.[metrics]вfly.toml) и показывает её в дашборде Fly в разделе Metrics
Настройка конфигурации
Образ читает /etc/nostrfy/nostrfy.toml, встроенный из deploy/nostrfy.container.toml. Два способа настройки:
- Отредактируйте
deploy/nostrfy.container.tomlв репозитории и повторно разверните (проще всего) - Подключите свой файл конфигурации: соберите форк образа, копирующий ваш файл конфигурации поверх
/etc/nostrfy/nostrfy.toml
Все опции описаны в справочнике по конфигурации.
Примечания
- Всегда включён по дизайну:
auto_stop_machines = falseвfly.toml— релей никогда не должен останавливаться в простое - Контейнер запускает релей в режиме переднего плана (
nostrfy start --foreground); журналы идут в stdout/stderr и собираются Fly - TLS терминируется на Fly; сам релей отдаёт обычный WebSocket на порту 8080
- Хост медиа Blossom: чтобы отдавать и сервер Blossom, задайте
blossom.host = "media.example.com"в конфигурации, добавьтеmedia.example.comкак дополнительное имя хоста того же приложения Fly (fly.toml [[services]] http_options.allowed_http_hostnamesилиfly hostnames), и добавьте TLS-сертификатmedia.в дашборде Fly — релей разделяет хосты внутри (какserver.api_host)