Déploiement Fly.io
Objectif : passerelle OpenClaw exécutée sur une machine Fly.io avec stockage persistant, HTTPS automatique et accès Discord/canaux.Ce dont vous avez besoin
- CLI flyctl installée
- Compte Fly.io (le niveau gratuit fonctionne)
- Authentification modèle : clé API pour le fournisseur de modèles choisi
- Identifiants de canaux : 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
Créer l’application Fly
lhr (Londres), iad (Virginie), sjc (San Jose).Configurer fly.toml
Modifiez Paramètres clés :
fly.toml pour qu’il corresponde au nom de votre application et à vos besoins.Remarque de sécurité : la configuration par défaut expose une URL publique. Pour un déploiement durci sans IP publique, consultez Déploiement privé ou utilisez fly.private.toml.| Paramètre | Pourquoi |
|---|---|
--bind lan | Lie à 0.0.0.0 pour que le proxy Fly puisse atteindre la passerelle |
--allow-unconfigured | Démarre sans fichier de configuration (vous en créerez un après) |
internal_port = 3000 | Doit correspondre à --port 3000 (ou OPENCLAW_GATEWAY_PORT) pour les vérifications de santé Fly |
memory = "2048mb" | 512 Mo est trop faible ; 2 Go recommandés |
OPENCLAW_STATE_DIR = "/data" | Persiste l’état sur le volume |
Définir les secrets
- Les liaisons non loopback (
--bind lan) nécessitent un chemin d’authentification de passerelle valide. Cet exemple Fly.io utiliseOPENCLAW_GATEWAY_TOKEN, maisgateway.auth.passwordou un déploiementtrusted-proxynon loopback correctement configuré satisfont également cette exigence. - Traitez ces jetons comme des mots de passe.
- Préférez les variables d’environnement au fichier de configuration pour toutes les clés API et tous les jetons. Cela garde les secrets hors de
openclaw.json, où ils pourraient être exposés ou journalisés accidentellement.
Déployer
Créer le fichier de configuration
Connectez-vous en SSH à la machine pour créer une configuration correcte :Créez le répertoire et le fichier de configuration :Remarque : avec
OPENCLAW_STATE_DIR=/data, le chemin de configuration est /data/openclaw.json.Remarque : le jeton Discord peut provenir de :- Variable d’environnement :
DISCORD_BOT_TOKEN(recommandé pour les secrets) - Fichier de configuration :
channels.discord.token
DISCORD_BOT_TOKEN.Redémarrez pour appliquer :Accéder à la passerelle
Interface de contrôle
Ouvrez dans le navigateur :https://my-openclaw.fly.dev/Authentifiez-vous avec le secret partagé configuré. Ce guide utilise le jeton de passerelle de OPENCLAW_GATEWAY_TOKEN ; si vous êtes passé à une auth par mot de passe, utilisez ce mot de passe à la place.Journaux
Console SSH
Dépannage
”App is not listening on expected address”
La passerelle est liée à127.0.0.1 au lieu de 0.0.0.0.
Correction : ajoutez --bind lan à votre commande de processus dans fly.toml.
Vérifications de santé en échec / connexion refusée
Fly ne peut pas atteindre la passerelle sur le port configuré. Correction : 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.
Correction : augmentez la mémoire dans fly.toml :
Problèmes de verrou de 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. Correction : supprimez le fichier de verrouillage :/data/gateway.*.lock (pas dans un sous-répertoire).
La configuration n’est pas lue
--allow-unconfigured ne fait que contourner le garde-fou de démarrage. Il ne crée ni ne répare /data/openclaw.json, donc assurez-vous que votre vraie configuration existe et inclut gateway.mode="local" lorsque vous souhaitez un démarrage normal de passerelle locale.
Vérifiez que la configuration existe :
Écriture de la configuration via SSH
La commandefly ssh console -C ne prend pas en charge la redirection 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 les profils d’authentification, l’état des canaux/fournisseurs ou les sessions après un redémarrage, le répertoire d’état écrit dans le système de fichiers du conteneur. Correction : 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 être réinitialisée à ce qui se trouve dans fly.toml. Si vous avez effectué des modifications manuelles, réappliquez-les après le déploiement.
Déploiement privé (durci)
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étectable par les scanners Internet (Shodan, Censys, etc.).
Pour un déploiement durci sans exposition publique, utilisez le modèle privé.
Quand utiliser un déploiement privé
- Vous effectuez uniquement des appels/messages sortants (pas de webhooks entrants)
- Vous utilisez des tunnels ngrok ou Tailscale pour les rappels webhook
- Vous accédez à la passerelle via SSH, proxy ou WireGuard plutôt que par le navigateur
- Vous souhaitez que le déploiement soit caché aux 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é
Puisqu’il n’y a pas d’URL publique, utilisez l’une de ces méthodes : Option 1 : proxy local (le plus simple)Webhooks avec déploiement privé
Si vous avez besoin de rappels webhook (Twilio, Telnyx, etc.) sans exposition publique :- Tunnel ngrok - Exécuter ngrok dans le conteneur ou en sidecar
- Tailscale Funnel - Exposer 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étectable | Caché |
| Attaques directes | Possibles | Bloquées |
| Accès à l’interface de contrôle | Navigateur | Proxy/VPN |
| Distribution de webhook | Directe | Via tunnel |
Remarques
- Fly.io utilise une architecture x86 (pas ARM)
- Le Dockerfile est compatible avec les deux architectures
- Pour l’intégration guidée WhatsApp/Telegram, utilisez
fly ssh console - Les données persistantes vivent sur le volume dans
/data - Signal nécessite Java + signal-cli ; utilisez une image personnalisée et gardez 2 Go+ de mémoire.
Coût
Avec la configuration recommandée (shared-cpu-2x, 2 Go de RAM) :
- ~10-15 $/mois selon l’usage
- Le niveau gratuit inclut une certaine allocation
Étapes suivantes
- Configurer les canaux de messagerie : Channels
- Configurer la passerelle : Configuration de la passerelle
- Garder OpenClaw à jour : Mise à jour