Déploiement Fly.io
Objectif : OpenClaw Gateway (passerelle) exécuté sur une machine Fly.io avec stockage persistant, HTTPS automatique et accès Discord/canal.Ce dont vous avez besoin
- flyctl CLI installé
- Compte Fly.io (le niveau gratuit fonctionne)
- Authentification du modèle : clé API Anthropic (ou autres clés de fournisseur)
- Identifiants de canal : jeton de bot Discord, jeton Telegram, etc.
Parcours rapide pour débutants
- Cloner le dépôt → personnaliser
fly.toml - Créer l’application + le volume → définir les secrets
- Déployer avec
fly deploy - Se connecter en SSH pour créer la configuration ou utiliser l’interface de contrôle
1) Créer l’application Fly
lhr (Londres), iad (Virginie), sjc (San Jose).
2. Configurer fly.toml
Modifiezfly.toml pour correspondre au nom de votre application et à vos exigences.
Note de sécurité : La configuration par défaut expose une URL publique. Pour un déploiement renforcé sans IP publique, voir Déploiement privé ou utiliser fly.private.toml.
| Paramètre | Pourquoi |
|---|---|
--bind lan | Se lie à 0.0.0.0 afin que le proxy Fly puisse atteindre la passerelle |
--allow-unconfigured | Démarre sans fichier de configuration (vous en créerez un ensuite) |
internal_port = 3000 | Doit correspondre à --port 3000 (ou OPENCLAW_GATEWAY_PORT) pour les checks Fly |
memory = "2048mb" | 512 Mo est trop faible ; 2 Go recommandés |
OPENCLAW_STATE_DIR = "/data" | Persiste l’état sur le volume |
3. Définir les secrets
- Les liaisons non loopback (
--bind lan) nécessitentOPENCLAW_GATEWAY_TOKENpour la sécurité. - Traitez ces jetons comme des mots de passe.
- Privilégiez les variables d’environnement plutôt que le fichier de configuration pour toutes les clés API et les jetons. Cela évite d’exposer ou de journaliser accidentellement des secrets dans
openclaw.json.
4. Déployer
5. Créer le fichier de configuration
Connectez-vous en SSH à la machine pour créer une configuration appropriée :OPENCLAW_STATE_DIR=/data, le chemin de configuration est /data/openclaw.json.
Remarque : Le jeton Discord peut provenir de l’une des sources suivantes :
- Variable d’environnement :
DISCORD_BOT_TOKEN(recommandé pour les secrets) - Fichier de configuration :
channels.discord.token
DISCORD_BOT_TOKEN.
Redémarrez pour appliquer :
6. Accéder à la passerelle
Interface de contrôle
Ouvrez dans le navigateur :https://my-openclaw.fly.dev/
Collez votre jeton de passerelle (celui de OPENCLAW_GATEWAY_TOKEN) pour vous authentifier.
Journaux
Console SSH
Problemes courants
« App is not listening on expected address »
La passerelle se lie à127.0.0.1 au lieu de 0.0.0.0.
Correctif : Ajoutez --bind lan à votre commande de processus dans fly.toml.
Échecs des checks de santé / connexion refusée
Fly ne peut pas atteindre la passerelle sur le port configuré. Correctif : Assurez-vous queinternal_port correspond au port de la passerelle (définissez --port 3000 ou OPENCLAW_GATEWAY_PORT=3000).
OOM / Problèmes de mémoire
Le conteneur redémarre sans cesse ou est tué. Signes :SIGABRT, v8::internal::Runtime_AllocateInYoungGeneration ou redémarrages silencieux.
Correctif : Augmentez la mémoire dans fly.toml :
Problèmes de verrouillage de la passerelle
La passerelle refuse de démarrer avec des erreurs « already running ». Cela se produit lorsque le conteneur redémarre mais que le fichier de verrou PID persiste sur le volume. Correctif : Supprimez le fichier de verrouillage :/data/gateway.*.lock (pas dans un sous-répertoire).
La configuration n’est pas lue
Si vous utilisez--allow-unconfigured, la passerelle crée une configuration minimale. Votre configuration personnalisée à /data/openclaw.json doit être lue au redémarrage.
Vérifiez que la configuration existe :
Écriture de la configuration via SSH
La commandefly ssh console -C ne prend pas en charge la redirection du shell. Pour écrire un fichier de configuration :
fly sftp peut échouer si le fichier existe déjà. Supprimez-le d’abord :
L’état ne persiste pas
Si vous perdez des identifiants ou des sessions après un redémarrage, le répertoire d’état écrit dans le système de fichiers du conteneur. Correctif : Assurez-vous queOPENCLAW_STATE_DIR=/data est défini dans fly.toml et redéployez.
Mises à jour
Mise à jour de la commande de la machine
Si vous devez modifier la commande de démarrage sans redéploiement complet :fly deploy, la commande de la machine peut revenir à celle définie dans fly.toml. Si vous avez effectué des modifications manuelles, réappliquez-les après le déploiement.
Déploiement privé (renforcé)
Par défaut, Fly alloue des IP publiques, rendant votre passerelle accessible àhttps://your-app.fly.dev. C’est pratique, mais cela signifie que votre déploiement est découvrable par des scanners Internet (Shodan, Censys, etc.).
Pour un déploiement renforcé sans exposition publique, utilisez le modèle privé.
Quand utiliser le déploiement privé
- Vous effectuez uniquement des appels/messages sortants (pas de webhooks entrants)
- Vous utilisez des tunnels ngrok ou Tailscale pour les rappels de webhook
- Vous accédez à la passerelle via SSH, proxy ou WireGuard plutôt que via le navigateur
- Vous souhaitez que le déploiement soit caché des scanners Internet
Configuration
Utilisezfly.private.toml au lieu de la configuration standard :
fly ips list ne devrait afficher qu’une IP de type private :
Accéder à un déploiement privé
Comme il n’y a pas d’URL publique, utilisez l’une des méthodes suivantes : Option 1 : Proxy local (le plus simple)Webhooks avec déploiement privé
Si vous avez besoin de rappels de webhook (Twilio, Telnyx, etc.) sans exposition publique :- Tunnel ngrok — Exécutez ngrok dans le conteneur ou comme sidecar
- Tailscale Funnel — Exposez des chemins spécifiques via Tailscale
- Sortant uniquement — Certains fournisseurs (Twilio) fonctionnent très bien pour les appels sortants sans webhooks
webhookSecurity.allowedHosts sur le nom d’hôte public du tunnel afin que les en-têtes d’hôte transférés soient acceptés.
Avantages de sécurité
| Aspect | Public | Privé |
|---|---|---|
| Scanners Internet | Découvrable | Hidden |
| Attaques directes | Possibles | Bloquées |
| Accès à l’UI de contrôle | Navigateur | Proxy/VPN |
| Livraison des webhooks | Directe | Via un tunnel |
Remarques
- Fly.io utilise une architecture x86 (pas ARM)
- Le Dockerfile est compatible avec les deux architectures
- Pour l’onboarding WhatsApp/Telegram, utilisez
fly ssh console - Les données persistantes se trouvent sur le volume à
/data - Signal nécessite Java + signal-cli ; utilisez une image personnalisée et maintenez la mémoire à 2 Go+.
Coût
Avec la configuration recommandée (shared-cpu-2x, 2 Go de RAM) :
- ~10–15 $/mois selon l’utilisation
- Le niveau gratuit inclut une certaine allocation