2026 OpenClaw sur Mac Mini loué : OPENCLAW_HOME multi-instance, isolation des ports passerelle et digest CI fusionné
« La doc multi-instance impose trois leviers : arbres OPENCLAW_HOME distincts, ports via OPENCLAW_GATEWAY_PORT ou --port, et un PATH launchd aligné sur SSH — sinon la seconde passerelle reste un mirage. »
Qui : prod et préprod sur un même Mac Mini loué. Problème : état partagé, EADDRINUSE, CI bruyante. Livrable : matrice, six étapes, sondes, digest webhook, dépannage ports ou PATH.
Voir installation, upgrade, heartbeat 7×24, hub OpenClaw. Achat sans compte obligatoire.
Trois freins lorsque deux passerelles partagent les mêmes hypothèses
- État disque partagé. Même
OPENCLAW_HOME⇒ verrous et caches concurrents ; symptômes aléatoires selon l’ordre de boot. - Ports. Port par défaut partagé ⇒
EADDRINUSEet bouclesKeepAlivecoûteuses. - PATH launchd. SSH voit
openclawvia npm global ; l’agent launchd hérite d’un PATH minimal et la passerelle ne démarre pas.
Matrice : faut-il scinder OPENCLAW_HOME sur un seul nœud RunMini
Souvent un seul Apple Silicon suffit : isolez par répertoires et ports, publiez la carte processus ↔ port pour le pare-feu, et gardez la même convention de nommage entre machines louées et postes de développement afin que les scripts d’astreinte retrouvent toujours le bon label launchd.
| Besoin | Un seul OPENCLAW_HOME | Deux homes et deux ports |
|---|---|---|
| Production seule, une passerelle | Exploitation simple : une plist, une ligne dans la carte des ports | Surdimensionné si vous ne répétez pas les migrations chaque semaine |
| Skills de préprod ou modèles canaries nocturnes | Risque élevé d’écraser jetons ou caches partagés | Recommandé : arbres miroirs, secrets distincts par répertoire |
| CI qui déclenche des dizaines d’événements légers par heure | Fatigue d’alerte même si les passerelles sont saines | Conserver deux passerelles si besoin, mais agréger le polling en un digest webhook |
Étapes reproductibles du plan de répertoires à la seconde passerelle
- Répertoires. Ex.
~/openclaw/prodet~/openclaw/staging; notez sauvegardes. - Gel prod. Journalisez
OPENCLAW_HOME,OPENCLAW_GATEWAY_PORT,openclaw doctor. - Seconde instance.
export OPENCLAW_HOME=~/openclaw/staging,openclaw onboard, puisOPENCLAW_GATEWAY_PORT=18790ouopenclaw gateway --port 18790(même entier). - Fumée.
lsof -nP -iTCP -sTCP:LISTEN, puis launchd pour survivre à la fin de SSH. - Santé. Sonde
curlpar port ; motifs dans heartbeat 7×24. - Digest CI. Script planifié : poll Actions ou GitLab planifié, agrège les échecs sur 5–15 min, un seul
POSTJSON.
launchd, launchctl et garde-fous PATH pour deux labels
Dupliquez la plist, changez Label, renseignez EnvironmentVariables (OPENCLAW_HOME, OPENCLAW_GATEWAY_PORT, PATH avec Homebrew, npm bin -g), RunAtLoad, journaux séparés ; bootout puis bootstrap, vérifiez launchctl print. Sur Linux avec systemd, reproduisez la même idée avec des unités distinctes et des directives Environment= explicites pour chaque instance.
<key>Label</key><string>com.exemple.openclaw.staging</string>
<key>EnvironmentVariables</key>
<dict>
<key>OPENCLAW_HOME</key><string>/Users/vous/openclaw/staging</string>
<key>OPENCLAW_GATEWAY_PORT</key><string>18790</string>
<key>PATH</key><string>/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin</string>
</dict>
<key>ProgramArguments</key>
<array>
<string>/opt/homebrew/bin/openclaw</string>
<string>gateway</string>
<string>--port</string>
<string>18790</string>
</array>
Sondes de santé et fusion des résumés issus du polling CI
Une sonde par port suffit pour détecter une passerelle muette après rotation de certificat. Côté CI, tamponnez les événements dans un fichier d’état local : à la clôture de la fenêtre de polling ou lorsque le nombre d’échecs dépasse un plafond, émettez un seul webhook plutôt qu’une rafale par workflow.
- Digest : dépôt, branche, jobs rouges, hash de log ; ciblez staging avant prod.
- Secrets étroits : voir repository_dispatch.
- Backoff et signature : reprenez les motifs du guide cron, fan-out et backoff si le réseau vers le webhook est capricieux.
Dépannage : conflits de ports et écarts de PATH
EADDRINUSE : lsof, plists en double, session tmux oubliée, ou un second import LaunchAgent qui relance la même commande. Commande introuvable : comparez PATH SSH et launchctl print, puis ajoutez le binaire absolu ou le répertoire npm global dans la plist ; en dernier recours, appelez openclaw via un wrapper shell qui exporte PATH avant la ligne gateway.
FAQ rapide
- Faut-il deux installations npm de la CLI
- Souvent non : un
openclawglobal suffit si plists pointent le même chemin ; l’isolement vient surtout du home et des ports. - Quels ports sur un Mac RunMini partagé
- Ports élevés documentés, ex. 18789 / 18790 ; pas d’écoute WAN sans TLS.
Repères : deux ports élevés réservés et documentés ; fenêtre de poll CI cinq à quinze minutes ; charge digest visée sous cinquante kilo-octets ; si KeepAlive martèle le disque, ajoutez un ThrottleInterval d’au moins trente secondes sur l’agent secondaire.
Synthèse. OPENCLAW_HOME séparés, ports OPENCLAW_GATEWAY_PORT / --port, PATH launchd, sondes, digest CI unique.
Runbook versionné après une nuit verte ; achat sans compte tant que la facturation reste découplée.