Déployer sur Fly.io
Déployez nostrfy sur Fly.io en quelques minutes avec le modèle prêt à l’emploi — volumes, machines, terminaison TLS et mises à jour simples.
Contenu du dépôt
| Fichier | Rôle |
|---|---|
Dockerfile | Image conteneur — télécharge le binaire de release précompilé depuis les assets GitHub (x86_64 / aarch64, selon l’architecture de build) et vérifie sa somme sha256. Aucune compilation n’a lieu sur Fly |
fly.toml | Configuration de l’app Fly : service HTTP sur le port 8080, contrôles de santé, montage du volume /data, machines toujours actives |
deploy/nostrfy.container.toml | La configuration du relais intégrée à l’image sous /etc/nostrfy/nostrfy.toml |
Prérequis
- Un compte Fly.io
- La CLI flyctl (
fly version) - Connecté :
fly auth login
Déploiement en quatre étapes
1. Créer l’app (sans déployer pour l’instant)
sh
cd /path/to/nostrfy
fly launch --no-deploy --name <your-app-name> --region <region><your-app-name>doit être unique sur Fly (il fait partie de l’URL du relais :wss://<your-app-name>.fly.dev)<region>: p. ex.nrt(Tokyo),fra,iad,sjc— choisissez la région la plus proche de vos utilisateurs- Cela peut écraser les valeurs
fly.tomldu modèle (nom d’app, région) — ce n’est pas grave
2. Créer le volume persistant
La base LMDB réside sur un volume Fly monté sur /data :
sh
fly volumes create data --size 1 --region <region>1 Go suffit pour commencer (la base grandit avec l’usage). Vous pouvez redimensionner plus tard, ou créer dès le départ un volume plus grand.
3. Configurer le relais
Modifiez deploy/nostrfy.container.toml avant de déployer :
toml
[relay]
name = "My Relay" # affiché dans les clients via NIP-11
description = "A friendly relay for everyone"
private_key = "..." # requis pour les groupes NIP-29
public_url = "wss://<your-app-name>.fly.dev" # requis pour NIP-42/62/98private_key: générez localement avecnostrfy genkey(avec une config temporaire) et collez la clé, ou générez-en une avec n’importe quel outil Nostrpublic_urldoit correspondre à votre nom d’app — sans elle, NIP-42 AUTH, NIP-62 vanish et l’API de gestion NIP-86 ne fonctionneront pas- Tout le reste peut rester par défaut
4. Déployer
sh
fly deployFly construit l’image (quelques minutes — le téléchargement du binaire est rapide, l’image est petite), crée une machine et exécute le contrôle de santé contre /health.
Vérifier
sh
# ligne de journal : "relay listening on ws://0.0.0.0:8080"
fly logs
# document d’information NIP-11 via l’adresse publique
curl https://<your-app-name>.fly.dev/
# pointez votre client Nostr vers wss://<your-app-name>.fly.devMise à l’échelle et mises à jour
- Mettre à jour le relais : modifiez
deploy/nostrfy.container.tomlet relancezfly deploy— l’image télécharge toujours le dernier binaire de release GitHub, une mise à jour est donc un simple redéploiement - Épingler une version :
docker build --build-arg NOSTRFY_VERSION=v0.1.16 ...ou modifiez l'ARGdans le Dockerfile - Mise à l’échelle : le relais est une machine unique par défaut.
fly machines clone <id>crée une seconde machine ; les deux partagent le volume (les volumes Fly supportent plusieurs machines dans la même région) - Métriques : Fly collecte l’endpoint
/metrics(voir[metrics]dansfly.toml) et l’affiche dans le tableau de bord Fly sous Metrics
Personnaliser la configuration
L’image lit /etc/nostrfy/nostrfy.toml, intégré depuis deploy/nostrfy.container.toml. Deux façons de personnaliser :
- Modifiez
deploy/nostrfy.container.tomldans le dépôt et redéployez (le plus simple) - Montez votre propre config : construisez un fork de l’image qui copie votre fichier de config par-dessus
/etc/nostrfy/nostrfy.toml
Chaque option est documentée dans la référence de configuration.
Remarques
- Toujours actif par conception :
auto_stop_machines = falsedansfly.toml— un relais ne doit jamais être arrêté pendant les périodes d’inactivité - Le conteneur exécute le relais en mode avant-plan (
nostrfy start --foreground) ; les logs vont vers stdout/stderr et sont collectés par Fly - TLS est terminé par Fly ; le relais lui-même sert du WebSocket en clair sur le port 8080
- Hôte média Blossom : pour servir aussi le serveur Blossom, définissez
blossom.host = "media.example.com"dans la config, ajoutezmedia.example.comcomme nom d’hôte supplémentaire de la même app Fly (fly.toml [[services]] http_options.allowed_http_hostnamesoufly hostnames), et ajoutez le certificat TLSmedia.dans le tableau de bord Fly — le relais sépare les hôtes en interne (commeserver.api_host)