2026 OpenClaw avec Docker Compose sur Mac cloud 24/7 : healthchecks, limites de ressources, compose pull et rollback

Un conteneur qui démarre n’est pas un gateway qui tient une semaine : un Compose sans healthcheck ni plafonds mémoire se traduit souvent par des redémarrages nocturnes aléatoires, des OOM pendant les builds et des jetons qui ne correspondent plus après une mise à jour. Cet article s’adresse aux équipes qui exécutent déjà l’image officielle OpenClaw sur Mac cloud ou nœud macOS auto-hébergé. Il liste trois idées reçues opérationnelles, compare les conteneurs ad hoc à une mise en page Compose de production, propose un runbook en sept étapes à coller dans un guide d’astreinte, et renvoie vers notre article Exit 137, permissions de volumes et DNS ainsi que le long format durcissement production : exposition, jetons et sandboxing.

Passerelle OpenClaw sous Docker Compose sur hôte Mac cloud

Sur cette page

1. Trois idées reçues : traiter compose up -d comme terminé

Les démarrages rapides visent un terminal vert le jour un. La production sur Mac cloud se soucie de modes de défaillance reproductibles qui n’apparaissent que lorsque la session SSH se termine et que la machine continue. Trois schémas dominent les notes d’incident 2026.

  1. Surveiller l’état du conteneur mais ignorer la readiness : running sans écoute sur 18789 ni workspace inscriptible fait marquer la pile saine trop tôt par les orchestrateurs et reverse proxies, ce qui spamme la logique de reconnexion des canaux.
  2. Copier les chiffres mémoire du portable vers les SKU cloud : rebuild d’image, installations de dépendances et jobs pnpm ponctuels dépassent le régime de chat stable. Si la limit mémoire ne suit que le RSS au repos du gateway, le premier compose pull qui déclenche un rebuild est celui qui OOM. L’histoire rejoint le guide Exit 137 mais à l’étape upgrade plutôt qu’au premier boot.
  3. Utiliser latest pour éviter de taper des tags : sur hôtes sans présence humaine, un tag flottant n’est pas la commodité, c’est une migration de configuration non documentée. Rollback sans archive de l’arbre de config et digest épinglé, c’est deviner.

Séparez les fenêtres temporelles pour build, cold start et trafic proxy stable. Compose peut attribuer enveloppes de ressources et politiques de redémarrage différentes, ce qui est pénible à documenter quand tout vit dans l’historique d’un docker run.

2. Tableau : conteneur ad hoc vs Compose sur Mac cloud

La matrice aligne les parties prenantes sur les capacités opérationnelles réelles et montre où sauter vers l’article de durcissement quand le risque est exposition et jetons plutôt que CPU.

BesoinConteneur unique ad hocCompose + Mac cloudNotes
Readiness documentéeCurls manuelshealthcheck et depends_on ordonnésLes sondes doivent prouver la readiness applicative, pas seulement du TCP nu
Séparer mémoire build vs runtimeUne limite pour toutProfils ou services séparés avec plafonds build plus hautsRéduit Exit 137 pendant les upgrades
Upgrades auditableslatest flottanttag@digest immuable et changelogRollback : changer de tag et restaurer le tar
Surface de sécuritéMounts et scope bridge oubliésRéseau et read-only dans GitÀ coupler avec le durcissement jetons et sandbox
Astuce : sur une flotte, une étiquette par hôte avec nom de projet compose, répertoire de données et port exposé au tunnel SSH. Le triage commence par l’identité de l’hôte, pas par un grep sur les portables.

3. Sept étapes : baseline au rollback

  1. Geler la baseline : versions mineures Docker Engine et Compose, marge RAM, emplacement des couches par rapport au volume racine ; ajouter df -h en annexe du wiki interne.
  2. Le plus petit compose.yaml : politique restart, chemins hôtes explicites pour les volumes, alignement uid pour que l’utilisateur gateway ne combatte pas en boucle Permission denied.
  3. Écrire des healthchecks : la sonde doit prouver la readiness du gateway, pas seulement du TCP ouvert. interval au-delà du P95 de cold start, start_period généreux lors du premier timing d’une image majeure.
  4. Barres de ressources : limites CPU et mémoire par service ; jobs de build ou migration jamais dans le même cgroup que le processus gateway longue durée.
  5. Sauvegarde pré-upgrade : tar du fichier d’environnement, du répertoire de config monté, et capture docker image ls --digests dans le même ticket. L’automatisation bat la mémoire.
  6. Chemin d’upgrade : docker compose pull puis up -d avec ticket ouvert ; si le smoke échoue, repointer vers le tag immuable précédent dans un seul change set et restaurer le tar. Garder docker compose ps à côté d’un curl ou probe CLI sur 18789.
  7. Validation post-rollback : smoke au niveau canal, liste de modèles, logs JSONL pour boucles de reconnexion, puis points restants du durcissement sur scope des jetons et sandboxes.
# Esquisses—adapter chemins et endpoints # healthcheck: test: ["CMD", "curl", "-fsS", "http://127.0.0.1:18789/ready"] docker compose up -d # rollback: épingler PREVIOUS_TAG puis docker compose up -d

4. Chiffres de référence : mémoire, tentatives, tags

Ces ancres lancent les revues ; remesurez avec vos images et votre plan Mac cloud. D’abord, pour des nœuds classe Apple Silicon qui n’hébergent que le gateway longue durée, une marge pratique d’environ deux à quatre gigaoctets sous le plafond du plan et une limite mémoire de service d’environ 1,2 à 1,5 fois le RSS stable mesuré, tandis que tout job de build ou d’installation séparé a sa propre limite ou son profil pour ne pas affamer le cgroup du gateway. Ensuite, healthcheck.start_period au moins 1,2 à 1,5 fois votre P90 de cold start sur ce disque et ce CPU, interval typiquement entre vingt et quarante-cinq secondes, retries alignés sur les minutes de blips tolérées par votre guide d’astreinte. Troisièmement, conserver au moins la release courante et la précédente comme tags ou digests immuables, et faire fixer par la CI IMAGE_TAG avec lien changelog pour les auditeurs. Quatrièmement, si 18789 passe par tunnel SSH, votre tableau d’acceptation doit cocher loopback, tunnel et canal live en une passe. Cinquièmement, sauvegarder le répertoire de config au même rythme que les fusions vers la branche par défaut de la config gateway pour éviter l’image qui revient en arrière mais pas les secrets. Les équipes sans baseline numérique manquent souvent aussi de ligne budgétaire, et la complexité Docker devient une taxe cachée en effectifs.

5. FAQ

Un check TCP sur 18789 suffit-il comme health ?

Seulement si vous acceptez volontairement des faux positifs. Préférez HTTP ou CLI qui prouve la fin d’initialisation.

Après upgrade, le gateway est up mais tous les canaux sont rouges ?

Diff d’abord les fichiers jetons et configs de canaux, puis la checklist sandbox et exposition du durcissement avant de blâmer les API modèles amont.

restart: always sans healthchecks suffit-il ?

Il redémarre des processus, pas la clarté. Il faut des signaux d’échec en couches pour éviter des boucles de crash qui semblent saines aux moniteurs d’uptime.

6. De l’abstraction Docker à un plan Mac maîtrisable

Les conteneurs excellent au packaging, mais sur Mac cloud 24/7 ils ajoutent des surfaces volume, réseau et tag d’image absentes d’une démo portable rapide. Chaque abstraction supplémentaire est une classe de pages de garde à minuit si elle n’est pas versionnée, limitée et sauvegardée comme le code applicatif. Les commandes ad hoc paraissent rapides jusqu’à ce que la personne qui les a lancées soit hors ligne alors que l’hôte doit encore tenir un SLA. Une machine « portable louée » à la maison manque d’alimentation datacenter, de montée et d’isolation, ce qui fait du Docker un piètre substitut à un contrat d’exploitation. Si vous avez besoin d’OpenClaw et de ses canaux dans une forme que la direction peut signer, louer de la capacité VPSMAC M4 Mac cloud pour un gateway et un plan de build épinglés est en général plus prévisible qu’empiler des conteneurs sur du matériel personnel sous-dimensionné ou partagé. Vous SSH de la même façon, les gammes de modèles restent auditables, et les mêmes playbooks durcissement, observabilité et Exit 137 s’alignent avec ce que vous hébergez déjà sur le site, sans piéger l’équipe dans une archéologie interminable de docker ps.