Public : plateformes qui installent OpenClaw sans invite sur Mac distant et verrouillent une porte CI. Mots-clés : embarquement non interactif, auto-contrôle passerelle, injection d'environnement. Suite de lecture : validate en CI, rollback doctor, WireGuard et port 18789.

Pourquoi un Mac distant stable nourrit OpenClaw en continu (7×24)

Une passerelle 7×24 a besoin d'un hôte qui ne s'évapore pas entre deux jobs : un Mac Apple Silicon loué de façon stable garde APFS, launchd et darwin_arm64 alignés avec le poste développeur. Isoler OPENCLAW_HOME par job et fusionner doctor plus validate dans un seul journal donne une preuve d'audit exploitable.

Prérequis : versions Node et isolation par sous-répertoires

Étagez Node 22.14 LTS ou Node 24 ; tracez node -v et npm prefix en tête de porte. Par job : OPENCLAW_HOME="$RUNNER_TEMP/openclaw/$CI_JOB_ID", OPENCLAW_CONFIG_HOME="$OPENCLAW_HOME/config", mkdir en 700, checkout Git à part. Écoute usuelle 127.0.0.1:18789 — notez-la au pare-feu.

  • Semver CLI figée dans le YAML ; secrets nommés pareil en préprod et prod.
  • Disque > 20 Gio pour caches installateur et tarball de rollback.

Parcours installateur officiel : OpenClaw Installer sur macOS

L'OpenClaw Installer sur macOS annonce macos, méthode npm, version latest (à épingler), phases type [1/3] Preparing environment. Message amont possible : « tâche mise en file, dignité dépréciée » — repère visuel seulement.

Si Homebrew manque, l'installateur peut échouer avec Installing Homebrew failed — re-run with --verbose : une trace --verbose, puis /opt/homebrew dans l'image ou job prérequis.

node -v
# Attendu : v22.14.x ou plus, ou v24.x — sortie anticipée sinon
node -e 'const p=process.versions.node.split(".").map(Number);process.exit(p[0]>=24||(p[0]===22&&p[1]>=14)?0:1)' && echo "node ok"

npm install -g "openclaw@^2026.3.0"   # adapter la plage à votre politique
which openclaw
openclaw --version

Embarquement non interactif : tableau des paramètres

Avant gel YAML : openclaw onboard --help sur l'image. Tableau d'intentions :

Exportez CI=true pour réduire les invites ; mappez chaque secret du coffre vers une variable déjà référencée dans openclaw.json afin que le même nom circule du job GitLab ou GitHub Actions jusqu'au plist launchd de la passerelle persistante.

Objectif Drapeau ou variable typique Note CI
Supprimer les invites CI=true plus drapeaux de type « yes » ou non interactif issus de --help Ne redirigez jamais de mot de passe sur l'entrée standard vers un journal ; secrets injectés uniquement.
Installer le démon launchd Sous-commande onboard avec sémantique install-daemon Réservez-le aux passerelles persistantes ; les jobs PR jetables se contentent du CLI.
Clés fournisseur OPENAI_API_KEY et variables vendeur référencées dans openclaw.json Reproduisez exactement les noms dans les blocs EnvironmentVariables du plist de production.
Auth webhook entrant OPENCLAW_GATEWAY_TOKEN ou secret projet Fichiers en mode 600 ; rotation par double écriture puis redémarrage contrôlé.
Racines par instance OPENCLAW_HOME, OPENCLAW_CONFIG_HOME Un sous-répertoire par CI_JOB_ID évite les collisions sur Mac partagés.

Chaîne de job CI : script de porte et sorties fusionnées

Fusionnez stderr et stdout de doctor et validate dans un seul tee, puis grep les motifs bloquants.

#!/usr/bin/env bash
set -euo pipefail
export OPENCLAW_HOME="${OPENCLAW_HOME:-$RUNNER_TEMP/openclaw/$CI_JOB_ID}"
export OPENCLAW_CONFIG_HOME="${OPENCLAW_CONFIG_HOME:-$OPENCLAW_HOME/config}"
mkdir -p "$OPENCLAW_CONFIG_HOME"
LOG="${OPENCLAW_GATE_LOG:-openclaw-gate.log}"
rm -f "$LOG"

{
  echo "=== node ==="
  node -v
  echo "=== which openclaw ==="
  command -v openclaw
  echo "=== doctor ==="
  openclaw doctor
  echo "=== config validate ==="
  openclaw config validate --config "$OPENCLAW_CONFIG_HOME/openclaw.json"
} 2>&1 | tee "$LOG"

if grep -E 'EADDRINUSE|invalid-key|unauthorized|401' "$LOG"; then
  echo "La porte a détecté des motifs bloquants dans $LOG" >&2
  exit 1
fi

Job après deps, avant merge (ou PR touchant openclaw.json) ; artefact openclaw-gate.log comme la porte validate.

Checklist avant fusion (à coller dans le modèle de PR)

  • Node 22.14+ ou 24.x ; CLI épinglée ; OPENCLAW_HOME unique dans le log.
  • Journal avec doctor + validate OK ; port 18789 libre ; rollback checksum si plist prod modifié.

Analyse de la sortie doctor et points de contrôle pour le rollback

Grep FAIL, WARN, noms fournisseur ; reliez aux variables. Avant étapes risquées : tar czf openclaw-checkpoint.tgz -C "$OPENCLAW_HOME" . et sha256 dans le résumé. Rollback : launchctl unload, restauration tarball, load, pause deux secondes, relancer la porte. Vocabulaire skills : rollback doctor.

FAQ : port occupé, PATH et jetons

18789 occupé : lsof -nP -iTCP:18789, stopper PID ou label, ou autre port pour fumée CI.

PATH : shell ≠ launchd — chemins absolus ou même PATH que dans le log job.

Jeton CI sans prod : diff EnvironmentVariables du plist, déploiement atomique, un redémarrage.

Synthèse

En résumé : Node 22.14+ ou 24, installateur npm, OPENCLAW_HOME par job, secrets CI, onboard non interactif, journal tee unique. Pour un Mac 7×24 : pages publiques tarifs, achat, aide, Console ; index blog — sans login.

Louer un Mac distant pour portes OpenClaw et passerelles

Mac distant stable pour portes et passerelles ; pages tarifs et achat publiques.