Public cible : développeurs et petites équipes qui auto-hébergent OpenClaw sur un Mac distant pour le pré-tirage et la CI. Mots-clés : OpenClaw, passerelle, Mac distant, contrôle de santé, LaunchAgent. HowTo : variables, liaison, script, launchd, journaux, FAQ. Durcissement : sécurité passerelle. Pull CI : ClawHub.

Écosystème 2026 : trois risques récurrents des passerelles auto-hébergées

Trois risques dominent en 2025-2026. Liaison : 0.0.0.0 sans proxy ni filtre expose la passerelle ; préférez 127.0.0.1 plus SSH ou VPN. Jetons : jamais dans l'historique, plist world-readable ni logs CI ; fichier 600 et EnvironmentVariables launchd, rotation aux départs. Mises à jour : évitez le mode « toujours latest » à chaque boot ; épinglez semver, planifiez les montées, lancez openclaw doctor avant de réactiver le pré-tirage.

Décision Choix orienté production Quand cela fait mal
Adresse d'écoute 127.0.0.1 + entrée maîtrisée Les scans réseau et la force brute ciblent vite les écouteurs 0.0.0.0 ouverts
Stockage du jeton Compte de service + fichier d'environnement verrouillé Shells partagés, journaux verbeux et copies de plist exposent le bearer
Cadence de mise à jour Hebdomadaire ou promotion pilotée par CI Latest à chaque boot surprend l'automatisation et les dépendances

Prérequis et variables d'environnement

Épinglez Node 22+, CLI OpenClaw, compte service sur hôtes partagés. Exportez OPENCLAW_GATEWAY_TOKEN, hôte et port selon votre binaire. Chemins workspace stables pour MCP en absolu. Avec proxy, fixez HTTPS_PROXY et NO_PROXY pour que la sonde de santé (CI ou autre user) ne fluctue pas.

Liste minimale pour le runbook interne
  • Version Node figée dans .node-version ou la configuration nvm du compte service.
  • Fichier de jeton en mode 600, propriétaire identique à l'utilisateur du LaunchAgent.
  • Répertoire de journaux ~/Library/Logs/OpenClaw/ créé avant le premier chargement.
  • Chemin du point de santé documenté (par exemple /health ou /v1/status selon votre build).

Démarrage de la passerelle et stratégie de liaison

Boot manuel d'abord : lsof sur le port, curl avec Authorization: Bearer, MCP OK, puis launchd. Sur le même Mac distant que la CI, enchaînez le pré-tirage sur une sonde verte pour ne pas marteler les registres quand la passerelle est down — lien direct avec les nœuds dédiés MacPull.

  1. Arrêter tout processus résiduel sur le même port pour éviter les conflits silencieux.
  2. Exporter les mêmes variables que celles qui seront injectées dans le plist.
  3. Lancer la commande documentée de la passerelle OpenClaw et noter les chemins stdout/stderr.
  4. Valider une requête authentifiée réussie puis une réponse 401 volontaire sans en-tête.
  5. Consigner semver, horodatage et auteur dans le journal de changement interne.

Modèle de script de contrôle et installation LaunchAgent

LaunchAgent dans ~/Library/LaunchAgents/ : RunAtLoad, KeepAlive + ThrottleInterval ~30s, StandardOutPath / StandardErrorPath sous ~/Library/Logs/. Chargez avec launchctl bootstrap gui/$UID (ou load sur ancien macOS). Sonde : StartInterval ou SSH depuis CI ; curl + code HTTP et JSON ok si présent ; exit ≠ 0 pour alerte.

#!/bin/bash
set -euo pipefail
# Modèle de contrôle — renseigner HOST, PORT, TOKEN, HEALTH_PATH selon votre déploiement
HOST="${OPENCLAW_GATEWAY_HOST:-127.0.0.1}"
PORT="${OPENCLAW_GATEWAY_PORT:-18789}"
TOKEN="${OPENCLAW_GATEWAY_TOKEN:?définir le jeton}"
HEALTH_PATH="${OPENCLAW_HEALTH_PATH:-/health}"
CODE=$(curl -s -o /tmp/oc_health.json -w "%{http_code}" \
  -H "Authorization: Bearer ${TOKEN}" \
  "http://${HOST}:${PORT}${HEALTH_PATH}")
test "$CODE" = "200" || { echo "santé HTTP $CODE"; exit 1; }
if grep -q '"ok"' /tmp/oc_health.json 2>/dev/null; then
  grep -q '"ok":true' /tmp/oc_health.json || exit 1
fi
exit 0

Adaptez le JSON ou gardez HTTP 200 + latence. Alerte tôt pour éviter les embouteillages de pré-tirage (voir le guide ClawHub lié en tête d'article).

Journaux et liste de contrôle minimale pour le dépannage

Échec : StandardErrorPath, logs app, espace disque, lsof post-reboot, reboot manuel avant de blâmer l'amont. Jeton CI à jour, puis openclaw doctor ou status. Ce parcours reste court et actionnable pour une équipe réduite.

Ordre de triage recommandé
  • 1. Dernières lignes stderr du daemon et corrélation horaire avec la sonde.
  • 2. Port occupé ou processus zombie via lsof et état launchctl list.
  • 3. Identité du jeton et correspondance avec les clients CI et scripts SSH.
  • 4. Espace disque et permissions sur le répertoire de travail de la passerelle.

FAQ : erreurs fréquentes

Port déjà utilisé (EADDRINUSE)

lsof -i :PORT, unload du plist doublon, kill PID orphelins, un seul reload.

Santé OK en local, KO en CI

DNS/proxy/cert différents : curl -v côté runner vs admin ; alignez NO_PROXY.

Permission refusée (logs / workspace)

Confidentialité macOS ou chown incorrect après copie de plist ; évitez Full Disk Access sauf besoin prouvé.

Synthèse et passage à l'achat

En résumé : liaison serrée, jetons en 600, mises à jour semver, LaunchAgent avec logs, santé qui bloque le pré-tirage si la passerelle tombe — moins de rafales inutiles sur Git/npm. Un Mac distant dédié amortit ce modèle.

Acheter sans compte : tarifs, achat, aide, blog.

Mac distant dédié pour OpenClaw et pré-tirage CI

Passezelle stable, SSD libre et SSH fiable : consultez tarifs, achat et aide sans connexion préalable.