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.
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.
- Surveiller l’état du conteneur mais ignorer la readiness :
runningsans écoute sur18789ni 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. - Copier les chiffres mémoire du portable vers les SKU cloud : rebuild d’image, installations de dépendances et jobs
pnpmponctuels dépassent le régime de chat stable. Si lalimitmémoire ne suit que le RSS au repos du gateway, le premiercompose pullqui 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. - Utiliser
latestpour é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.
| Besoin | Conteneur unique ad hoc | Compose + Mac cloud | Notes |
|---|---|---|---|
| Readiness documentée | Curls manuels | healthcheck et depends_on ordonnés | Les sondes doivent prouver la readiness applicative, pas seulement du TCP nu |
| Séparer mémoire build vs runtime | Une limite pour tout | Profils ou services séparés avec plafonds build plus hauts | Réduit Exit 137 pendant les upgrades |
| Upgrades auditables | latest flottant | tag@digest immuable et changelog | Rollback : changer de tag et restaurer le tar |
| Surface de sécurité | Mounts et scope bridge oubliés | Réseau et read-only dans Git | À coupler avec le durcissement jetons et sandbox |
3. Sept étapes : baseline au rollback
- Geler la baseline : versions mineures Docker Engine et Compose, marge RAM, emplacement des couches par rapport au volume racine ; ajouter
df -hen annexe du wiki interne. - Le plus petit
compose.yaml: politiquerestart, chemins hôtes explicites pour les volumes, alignement uid pour que l’utilisateur gateway ne combatte pas en bouclePermission denied. - Écrire des healthchecks : la sonde doit prouver la readiness du gateway, pas seulement du TCP ouvert.
intervalau-delà du P95 de cold start,start_periodgénéreux lors du premier timing d’une image majeure. - 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.
- Sauvegarde pré-upgrade :
tardu fichier d’environnement, du répertoire de config monté, et capturedocker image ls --digestsdans le même ticket. L’automatisation bat la mémoire. - Chemin d’upgrade :
docker compose pullpuisup -davec ticket ouvert ; si le smoke échoue, repointer vers le tag immuable précédent dans un seul change set et restaurer le tar. Garderdocker compose psà côté d’un curl ou probe CLI sur18789. - 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.
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.