mem_limit · première passe WASM · allowedOrigins · appairage compose exec · modèle compose
Après avoir suivi le tutoriel docker compose, sur un petit VPS on voit souvent trois symptômes : sortie immédiate 137, 18789 sans réponse longtemps, Control UI en non-loopback ou erreurs liées à l’en-tête Host. Cet article commence par une liste actionnable sur free -h, mem_limit et une fenêtre de 3 à 7 minutes pour la première compilation WASM, puis un tableau symptôme → preuve dans docker logs → action pour Exit 137, droits de volumes et montages incohérents ; ensuite une grille 127.0.0.1, allowedOrigins et reverse proxy pour les erreurs d’UI ; enfin un runbook en six étapes pour l’appairage dans le conteneur et dix vérifications avant mise en ligne. À lire avec OpenClaw v2026.4 – installation et durcissement Docker, installation Gateway et checklist doctor et dépannage d’exécution en trois blocs pour passer de « le conteneur démarre » à « stable sans surveillance permanente ».
Au premier démarrage du Gateway OpenClaw dans le conteneur, CPU élevé mais port tardif correspond souvent à la phase WASM, pas à un interblocage. Comme dans l’article v2026.4 : si la mémoire disponible sur l’hôte et mem_limit sont trop justes, l’OOM Linux donne Exit 137, parfois sans message applicatif clair dans les journaux.
Hôte : exécuter free -h ; un tampon durable nettement inférieur à environ 1,5 à 2 Gio augmente le risque 137 ; sans swap, encore plus.
Compose : définir mem_limit: 2g ou plus et éviter la concurrence mémoire avec d’autres services lourds sur la même machine.
Première fenêtre : après un démarrage à froid, attendre 3 à 7 minutes avant de conclure à l’échec ; docker logs -f pour voir si la chaîne de compilation continue.
Sonde de santé : healthcheck.start_period au moins 360 s pour que compose ne tue pas avant la fin du WASM.
Éviter les faux positifs : ne pas enchaîner les docker compose restart dans cette fenêtre ; chaque redémarrage relance le pic à froid.
Ces cinq points en page un du runbook « OpenClaw sur VPS » réduisent les tickets du type « j’ai suivi le tutoriel, ça ne monte pas ». Dépannage Gateway plus détaillé : article d’exécution.
Le tableau suit d’abord la preuve, puis l’action, pour ramener les tickets de « la passerelle semble cassée » vers des champs reproductibles. Avec la checklist doctor, on peut référencer les lignes dans le modèle de ticket.
| Symptôme | docker logs / hôte | Action prioritaire |
|---|---|---|
| Sortie 137 immédiate | dmesg avec OOM ; ou journal qui s’arrête | Augmenter mem_limit ou la taille d’instance ; réduire la concurrence |
| Permission denied sur workspace | Répertoire monté en root, utilisateur node dans le conteneur sans écriture | chown vers l’UID du conteneur ou aligner user: sur le volume |
| Config ignorée | Deux chemins vers .openclaw entre hôte et compose | Un seul bind ; avant redémarrage docker compose config |
| DNS intermittent | curl dans le conteneur vers l’endpoint modèle en timeout | Vérifier dns Docker et la résolution sur l’hôte selon l’article long |
| Redémarrages sans nouveau journal | Sonde de santé trop courte | Assouplir start_period et retries |
Un diagnostic Docker efficace suppose que le 137 soit d’abord établi comme OOM, et non deviné comme un bug applicatif.
Si vous combinez le Gateway avec un nœud Mac distant toujours joignable, séparez la ligne d’acceptation « ressources conteneur » (compose, journaux) de celle « SLA du nœud » (région, fenêtres de maintenance).
Exposer 18789 sur Internet depuis le VPS est une erreur fréquente. L’article d’installation recommande le conteneur en loopback uniquement, TLS terminé par Caddy ou Nginx sur 443. Une erreur non-loopback dans la Control UI signifie que l’origine du navigateur et les origines autorisées par la passerelle divergent, pas que « Docker est cassé ».
| Scénario | Écoute / proxy | Orientation config |
|---|---|---|
| Debug par tunnel SSH local | 127.0.0.1:18789 | allowedOrigins inclut http://127.0.0.1:18789 |
| Accès HTTPS en production | Proxy vers amont loopback | allowedOrigins liste https://votre-domaine ; éviter le repli Host si possible |
| Laboratoire temporaire | HTTP sur IP interne | Lister explicitement les origines IP ; CIDR restreint ; retirer après maintenance |
| « Voir l’UI vite » en dépannage | Conserver TLS en périphérie | Repli Host documenté seulement en connaissance du risque ; revenir en arrière ensuite |
{
"gateway": {
"mode": "local",
"controlUi": {
"allowedOrigins": ["https://openclaw.example.com"]
}
}
}
Remarque : après modification de openclaw.json, vérifier si docker compose restart tombe dans la fenêtre WASM initiale et n’ajoute pas de confusion avec la section 2.
Pour openclaw dans le conteneur, HOME et le volume de configuration doivent correspondre au processus en cours, sinon « approuvé sur l’hôte, en attente dans le conteneur ». Le nom de service utilisé ici est openclaw ; remplacez par le vôtre dans compose.
Nom du service : docker compose ps pour identifier le conteneur Gateway.
Même environnement : docker compose exec openclaw sh -lc 'pwd; echo $HOME; ls -la ~/.openclaw | head'
Demandes en attente : docker compose exec openclaw openclaw devices list
Copier l’ID de demande : depuis l’UI ou les logs, puis openclaw devices approve <id>.
Visibilité de la clé API : si No API key found for provider, vérifier que .env est injecté par compose dans le conteneur, pas seulement dans le profil shell de l’hôte.
Champs ticket : chemin compose, tag d’image, extrait openclaw.json, commande approve pour réutilisation.
Attention : exécuter openclaw devices approve sur l’hôte alors que la configuration n’est montée que dans le conteneur produit un faux négatif.
Trois intervalles de vérification typiques : remplissez-les avec les métriques réelles de votre hôte et ajoutez-les au README pour éviter les pièges répétés.
| N° | Avant mise en ligne | Critère de réussite |
|---|---|---|
| 01 | ports uniquement sur 127.0.0.1 | 18789 non joignable depuis Internet |
| 02 | env_file et chemins de secrets alignés | Clé fournisseur lisible dans le conteneur |
| 03 | mem_limit et stratégie swap documentées | Test de charge sans 137 |
| 04 | healthcheck.start_period ≥ 360s | Pas de tempête de redémarrages dans la première fenêtre |
| 05 | openclaw.json gateway.mode à local | Clés invalides supprimées |
| 06 | TLS et HSTS au proxy | Pas d’avertissement de contenu mixte |
| 07 | allowedOrigins couvre les origines réelles | Pas d’erreur non-loopback dans la Control UI |
| 08 | Appairage validé dans le conteneur | devices list vide ou tout approuvé |
| 09 | Sauvegarde du chemin .openclaw et du numéro de version | Récupération sur une page de runbook |
| 10 | Aligné avec la doc canaux | Callbacks IM ou webhook joignables |
services:
openclaw:
image: ghcr.io/openclaw/openclaw:latest
restart: unless-stopped
mem_limit: 2g
ports:
- "127.0.0.1:18789:18789"
volumes:
- ${HOME}/.openclaw:/home/node/.openclaw
env_file:
- .env
healthcheck:
test: ["CMD", "curl", "-f", "http://127.0.0.1:18789/health"]
interval: 60s
timeout: 15s
retries: 5
start_period: 360s
Faire tourner le Gateway en continu sur un portable subit veille, capot fermé et montée instable ; le seul accès résidentiel offre rarement un SLA mesurable. Un Mac mini cloud facturé à l’usage convient mieux aux flux hybrides OpenClaw sur VPS avec besoins graphiques ou Xcode.
Piège courant : utiliser 0.0.0.0:18789 pour « déboguer vite » ; sur un VPS public, c’est exposer la surface de contrôle aux scanners.
Pour un gateway Docker stable et les étapes lourdes sur un macOS contractuel, l’achat et la synchronisation multi-sites coûtent souvent plus que la location. Pour des nœuds vérifiables 7×24 et des tailles flexibles, la location Mac mini cloud VpsMesh est souvent préférable : dessinez la séparation VPS OpenClaw et Mac distant dédié, puis validez la capacité avec les tarifs de location et la page de commande, plus simple à contractualiser que des engagements oraux.
Commencer par dmesg sur l’hôte et mem_limit pour l’OOM ; prévoir la fenêtre de première compilation WASM. Croiser avec l’article OpenClaw v2026.4.
Lister l’origine HTTPS réelle dans gateway.controlUi.allowedOrigins de openclaw.json et vérifier que le proxy ne transmet pas un mauvais Host vers l’amont. Parcours complet : checklist d’installation Gateway.
Utiliser docker compose exec avec le même utilisateur et les mêmes montages que le Gateway, puis openclaw devices list. Sinon dépannage d’exécution en trois blocs. Capacité : tarifs de location, commander ; connectivité : centre d’aide.