Distribuire su Fly.io
Distribuisci nostrfy su Fly.io in pochi minuti con il modello pronto — volumi, macchine, terminazione TLS e aggiornamenti semplici.
Cosa include il repository
| File | Scopo |
|---|---|
Dockerfile | Immagine container — scarica il binario di release precompilato dagli asset di release su GitHub (x86_64 / aarch64, scelti in base all’architettura di build) e ne verifica il checksum sha256. Nessuna compilazione avviene su Fly |
fly.toml | Configurazione dell’app Fly: servizio HTTP sulla porta 8080, controllo dello stato, mount del volume /data, macchine sempre attive |
deploy/nostrfy.container.toml | La configurazione del relay integrata nell’immagine in /etc/nostrfy/nostrfy.toml |
Prerequisiti
- Un account Fly.io
- La CLI flyctl (
fly version) - Accesso effettuato:
fly auth login
Distribuzione in quattro passaggi
1. Crea l’app (senza ancora distribuire)
sh
cd /path/to/nostrfy
fly launch --no-deploy --name <your-app-name> --region <region><your-app-name>deve essere univoco su Fly (diventa parte dell’URL del relay:wss://<your-app-name>.fly.dev)<region>: es.nrt(Tokyo),fra,iad,sjc— scegli la regione più vicina ai tuoi utenti- Questo comando potrebbe sovrascrivere i valori di
fly.tomldel modello (nome app, regione) — va bene così
2. Crea il volume persistente
Il database LMDB risiede su un volume Fly montato in /data:
sh
fly volumes create data --size 1 --region <region>1 GB basta per iniziare (il database cresce con l’uso). Puoi ridimensionare dopo, o creare fin dall’inizio un volume più grande.
3. Configura il relay
Modifica deploy/nostrfy.container.toml prima di distribuire:
toml
[relay]
name = "My Relay" # mostrato nei client tramite NIP-11
description = "A friendly relay for everyone"
private_key = "..." # obbligatorio per i gruppi NIP-29
public_url = "wss://<your-app-name>.fly.dev" # obbligatorio per NIP-42/62/98private_key: genera localmente connostrfy genkey(con una config temporanea) e incolla la chiave, oppure generane una con un qualsiasi strumento Nostrpublic_urldeve corrispondere al nome della tua app — senza di essa, NIP-42 AUTH, NIP-62 vanish e l’API di gestione NIP-86 non funzioneranno- Tutto il resto può restare ai valori predefiniti
4. Distribuisci
sh
fly deployFly compila l’immagine (pochi minuti — il download del binario è veloce, l’immagine è piccola), crea una macchina ed esegue il controllo dello stato contro /health.
Verifica
sh
# riga di log: "relay listening on ws://0.0.0.0:8080"
fly logs
# Documento informativo NIP-11 sull'indirizzo pubblico
curl https://<your-app-name>.fly.dev/
# punta il tuo client Nostr su wss://<your-app-name>.fly.devScalabilità e aggiornamenti
- Aggiorna il relay: modifica
deploy/nostrfy.container.tomled esegui di nuovofly deploy— l’immagine scarica sempre l'ultimo binario di release GitHub, quindi aggiornare è una semplice ridistribuzione - Blocca una versione:
docker build --build-arg NOSTRFY_VERSION=v0.1.16 ...oppure cambia l'ARGnel Dockerfile - Scala: il relay è una singola macchina per impostazione predefinita.
fly machines clone <id>crea una seconda macchina; entrambe condividono il volume (i volumi Fly supportano più macchine nella stessa regione) - Metriche: Fly raccoglie l’endpoint
/metrics(vedi[metrics]infly.toml) e lo mostra nella dashboard Fly sotto Metrics
Personalizzare la configurazione
L’immagine legge /etc/nostrfy/nostrfy.toml, integrato da deploy/nostrfy.container.toml. Due modi per personalizzare:
- Modifica
deploy/nostrfy.container.tomlnel repository e distribuisci di nuovo (il modo più semplice) - Monta la tua config: compila un fork dell’immagine che copia il tuo file di config sopra
/etc/nostrfy/nostrfy.toml
Ogni opzione è documentata nel riferimento di configurazione.
Note
- Sempre attivo per scelta progettuale:
auto_stop_machines = falseinfly.toml— un relay non deve mai essere fermato durante i periodi di inattività - Il container esegue il relay in modalità foreground (
nostrfy start --foreground); i log vanno su stdout/stderr e sono raccolti da Fly - TLS è terminato da Fly; il relay serve WebSocket in chiaro sulla porta 8080
- Host multimediale Blossom: per servire anche il server Blossom, imposta
blossom.host = "media.example.com"nella config, aggiungimedia.example.comcome hostname aggiuntivo della stessa app Fly (fly.toml [[services]] http_options.allowed_http_hostnamesoppurefly hostnames), e aggiungi il certificato TLS dimedia.nella dashboard Fly — il relay separa gli host internamente (comeserver.api_host)