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

FileScopo
DockerfileImmagine 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.tomlConfigurazione dell’app Fly: servizio HTTP sulla porta 8080, controllo dello stato, mount del volume /data, macchine sempre attive
deploy/nostrfy.container.tomlLa 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.toml del 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/98
  • private_key: genera localmente con nostrfy genkey (con una config temporanea) e incolla la chiave, oppure generane una con un qualsiasi strumento Nostr
  • public_url deve 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 deploy

Fly 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.dev

Scalabilità e aggiornamenti

  • Aggiorna il relay: modifica deploy/nostrfy.container.toml ed esegui di nuovo fly 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'ARG nel 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] in fly.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:

  1. Modifica deploy/nostrfy.container.toml nel repository e distribuisci di nuovo (il modo più semplice)
  2. 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 = false in fly.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, aggiungi media.example.com come hostname aggiuntivo della stessa app Fly (fly.toml [[services]] http_options.allowed_http_hostnames oppure fly hostnames), e aggiungi il certificato TLS di media. nella dashboard Fly — il relay separa gli host internamente (come server.api_host)
TLS è terminato da Fly
Il relay serve WebSocket in chiaro sulla porta 8080.