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
| Datei | Zweck |
|---|---|
Dockerfile | Container-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.toml | Fly-App-Konfiguration: HTTP-Service auf Port 8080, Health-Checks, der /data-Volume-Mount, immer aktive Machines |
deploy/nostrfy.container.toml | Die 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/98private_key: lokal mitnostrfy genkey(gegen eine temporäre Konfiguration) erzeugen und einfügen, oder mit einem beliebigen Nostr-Tool erzeugenpublic_urlmuss 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 deployFly 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 zeigenSkalierung und Updates
- Relay aktualisieren:
deploy/nostrfy.container.tomlbearbeiten und erneutfly 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 dasARGim 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]infly.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:
deploy/nostrfy.container.tomlim Repository bearbeiten und erneut bereitstellen (am einfachsten)- Eigene Konfiguration mounten: einen Fork des Images bauen, der Ihre Konfigurationsdatei über
/etc/nostrfy/nostrfy.tomlkopiert
Jede Option ist in der Konfigurationsreferenz dokumentiert.
Hinweise
- Immer aktiv per Design:
auto_stop_machines = falseinfly.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 Siemedia.example.comals zusätzlichen Hostnamen derselben Fly-App hinzu (fly.toml [[services]] http_options.allowed_http_hostnamesoderfly hostnames), und fügen Sie dasmedia.-TLS-Zertifikat im Fly-Dashboard hinzu — das Relay trennt die Hosts intern (wieserver.api_host)