Auf Fly.io bereitstellen

nostrfy in wenigen Minuten auf Fly.io bereitstellen mit der fertigen Vorlage — Volumes, Machines, TLS-Terminierung und einfache Updates.

Was im Repo enthalten ist

DateiZweck
DockerfileContainer-Image — lädt das vorgefertigte Release-Binary aus den GitHub-Release-Assets (x86_64 / aarch64, je nach Build-Architektur) herunter und prüft seine sha256-Prüfsumme. Auf Fly findet keine Kompilierung statt
fly.tomlFly-App-Konfiguration: HTTP-Service auf Port 8080, Health-Checks, der /data-Volume-Mount, immer aktive Machines
deploy/nostrfy.container.tomlDie Relay-Konfiguration, eingebettet im Image unter /etc/nostrfy/nostrfy.toml

Voraussetzungen

  • Ein Fly.io-Konto
  • Die flyctl-CLI (fly version)
  • Angemeldet: fly auth login

Bereitstellung in vier Schritten

1. App anlegen (noch ohne Bereitstellung)

sh
cd /path/to/nostrfy
fly launch --no-deploy --name <your-app-name> --region <region>
  • <your-app-name> muss auf Fly eindeutig sein (wird Teil der Relay-URL: wss://<your-app-name>.fly.dev)
  • <region>: z. B. nrt (Tokio), fra, iad, sjc — wählen Sie die Region in der Nähe Ihrer Nutzer
  • Dies kann die fly.toml-Werte der Vorlage (App-Name, Region) überschreiben — das ist in Ordnung

2. Persistentes Volume erstellen

Die LMDB-Datenbank liegt auf einem Fly-Volume, gemountet unter /data:

sh
fly volumes create data --size 1 --region <region>

1 GB reicht zum Start (die Datenbank wächst mit der Nutzung). Sie können später vergrößern oder gleich ein größeres Volume erstellen.

3. Relay konfigurieren

Bearbeiten Sie deploy/nostrfy.container.toml vor der Bereitstellung:

toml
[relay]
name = "My Relay"                              # in Clients via NIP-11 angezeigt
description = "A friendly relay for everyone"
private_key = "..."                            # erforderlich für NIP-29-Gruppen
public_url = "wss://<your-app-name>.fly.dev"   # erforderlich für NIP-42/62/98
  • private_key: lokal mit nostrfy genkey (gegen eine temporäre Konfiguration) erzeugen und einfügen, oder mit einem beliebigen Nostr-Tool erzeugen
  • public_url muss mit Ihrem App-Namen übereinstimmen — ohne sie funktionieren NIP-42 AUTH, NIP-62 vanish und die NIP-86-Verwaltungs-API nicht
  • Alles andere kann auf den Standardwerten bleiben

4. Bereitstellen

sh
fly deploy

Fly baut das Image (wenige Minuten — der Binary-Download ist schnell, das Image ist klein), erstellt eine Machine und führt den Health-Check gegen /health aus.

Überprüfen

sh
# Log-Zeile: "relay listening on ws://0.0.0.0:8080"
fly logs

# NIP-11-Informationsdokument über die öffentliche Adresse
curl https://<your-app-name>.fly.dev/

# Ihren Nostr-Client auf wss://<your-app-name>.fly.dev zeigen

Skalierung und Updates

  • Relay aktualisieren: deploy/nostrfy.container.toml bearbeiten und erneut fly deploy — das Image lädt immer das neueste GitHub-Release-Binary, ein Update ist also ein einfaches erneutes Bereitstellen
  • Version pinnen: docker build --build-arg NOSTRFY_VERSION=v0.1.16 ... oder das ARG im Dockerfile ändern
  • Skalieren: Standard ist eine einzelne Machine. fly machines clone <id> erstellt eine zweite Machine; beide teilen sich das Volume (Fly-Volumes unterstützen mehrere Machines in derselben Region)
  • Metriken: Fly sammelt den /metrics-Endpunkt (siehe [metrics] in fly.toml) und zeigt ihn im Fly-Dashboard unter Metrics

Konfiguration anpassen

Das Image liest /etc/nostrfy/nostrfy.toml, eingebettet aus deploy/nostrfy.container.toml. Zwei Möglichkeiten zur Anpassung:

  1. deploy/nostrfy.container.toml im Repository bearbeiten und erneut bereitstellen (am einfachsten)
  2. Eigene Konfiguration mounten: einen Fork des Images bauen, der Ihre Konfigurationsdatei über /etc/nostrfy/nostrfy.toml kopiert

Jede Option ist in der Konfigurationsreferenz dokumentiert.

Hinweise

  • Immer aktiv per Design: auto_stop_machines = false in fly.toml — ein Relay darf im Leerlauf nie gestoppt werden
  • Der Container führt das Relay im Vordergrundmodus aus (nostrfy start --foreground); Logs gehen nach stdout/stderr und werden von Fly gesammelt
  • TLS wird von Fly terminiert; das Relay selbst liefert plain WebSocket auf Port 8080
  • Blossom-Media-Host: um auch den Blossom-Server zu betreiben, setzen Sie blossom.host = "media.example.com" in der Konfiguration, fügen Sie media.example.com als zusätzlichen Hostnamen derselben Fly-App hinzu (fly.toml [[services]] http_options.allowed_http_hostnames oder fly hostnames), und fügen Sie das media.-TLS-Zertifikat im Fly-Dashboard hinzu — das Relay trennt die Hosts intern (wie server.api_host)
TLS wird von Fly terminiert
Das Relay selbst liefert plain WebSocket auf Port 8080.