Skip to main content

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

  1. Cloner le dépôt → personnaliser fly.toml
  2. Créer l’application + le volume → définir les secrets
  3. Déployer avec fly deploy
  4. Se connecter en SSH pour créer la configuration ou utiliser l’interface de contrôle

1) Créer l’application Fly

Astuce : Choisissez une région proche de vous. Options courantes : lhr (Londres), iad (Virginie), sjc (San Jose).

2. Configurer fly.toml

Modifiez fly.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ètres clés :

3. Définir les secrets

Notes :
  • Les liaisons non loopback (--bind lan) nécessitent OPENCLAW_GATEWAY_TOKEN pour 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

Le premier déploiement construit l’image Docker (~2–3 minutes). Les déploiements suivants sont plus rapides. Après le déploiement, vérifiez :
Vous devriez voir :

5. Créer le fichier de configuration

Connectez-vous en SSH à la machine pour créer une configuration appropriée :
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 l’une des sources suivantes :
  • Variable d’environnement : DISCORD_BOT_TOKEN (recommandé pour les secrets)
  • Fichier de configuration : channels.discord.token
Si vous utilisez une variable d’environnement, inutile d’ajouter le jeton à la configuration. La passerelle lit automatiquement DISCORD_BOT_TOKEN. Redémarrez pour appliquer :

6. Accéder à la passerelle

Interface de contrôle

Ouvrez dans le navigateur :
Ou visitez 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 que internal_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 :
Ou mettez à jour une machine existante :
Remarque : 512 Mo est trop faible. 1 Go peut fonctionner mais peut provoquer des OOM sous charge ou avec des journaux verbeux. 2 Go est recommandé.

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 :
Le fichier de verrouillage se trouve à /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 commande fly ssh console -C ne prend pas en charge la redirection du shell. Pour écrire un fichier de configuration :
Remarque : 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 que OPENCLAW_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 :
Remarque : Après 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

Utilisez fly.private.toml au lieu de la configuration standard :
Ou convertissez un déploiement existant :
Après cela, 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)
Option 2 : VPN WireGuard
Option 3 : SSH uniquement

Webhooks avec déploiement privé

Si vous avez besoin de rappels de webhook (Twilio, Telnyx, etc.) sans exposition publique :
  1. Tunnel ngrok — Exécutez ngrok dans le conteneur ou comme sidecar
  2. Tailscale Funnel — Exposez des chemins spécifiques via Tailscale
  3. Sortant uniquement — Certains fournisseurs (Twilio) fonctionnent très bien pour les appels sortants sans webhooks
Exemple de configuration d’appel vocal avec ngrok :
Le tunnel ngrok s’exécute dans le conteneur et fournit une URL de webhook publique sans exposer l’application Fly elle-même. Définissez 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é

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
Voir les tarifs Fly.io pour plus de détails.