Trois réflexes à ancrer avant de lire la suite :
-
Double sonde — ne pas confondre I/O et panne Gateway
Toujours coupler
curlsur le port 18789 aveclsofpour vérifier le propriétaire du port. Un Dashboard lent signale souvent un pic d'écriture disque, pas une panne Gateway.curl + lsof
-
Mise à jour progressive, fenêtre de rollback 30 min
Figer la version → nœud doré en premier → puis production. Restaurer config tarball et ancien plist ensemble : le rollback ne doit pas dépasser 30 minutes.
≤ 30 min
-
Logs séparés du volume racine
Répertoire de logs et cache npm doivent avoir leur propre logrotate. Un disque racine silencieusement plein est la première cause d'arrêt inattendu du Gateway.
logrotate 7j
Cet article répond à une seule question
Une fois le script d'installation OpenClaw terminé et le Gateway 18789 au vert pour la première fois, les équipes entrent souvent dans une phase « ça marche jusqu'à ce que ça casse » : des 401 sporadiques, un nœud qui se comporte différemment après une mise à jour, ou le Gateway qui s'arrête silencieusement parce que le disque racine est plein. Ces problèmes ne sont pas couverts par le guide d'installation.
Cet article répond à une seule question : comment standardiser les opérations quotidiennes d'OpenClaw en un Runbook réutilisable permettant à n'importe quel membre de l'équipe de réaliser un contrôle de santé ou un rollback en 15 minutes ? Périmètre : sondes de santé Gateway → stratégie de mise à jour progressive → procédure de rollback → choix Tailscale / SSH → planification du disque de logs.
1. Sondes de santé Gateway 18789
Le « health check » de beaucoup d'équipes se résume à un simple curl — ce n'est pas suffisant. Lorsque le port est occupé par un processus résiduel ou que launchd n'a pas correctement redémarré le service, curl reste suspendu plutôt que d'échouer immédiatement. Une sonde correcte valide à la fois la réponse HTTP et le propriétaire du port.
# 1. Liveness HTTP : attendre 200, alerter en cas d'échec curl -fsS --max-time 3 http://127.0.0.1:18789/health \ && echo "gateway OK" || echo "GATEWAY FAIL" # 2. Vérification du propriétaire du port : le PID doit appartenir à node/openclaw lsof -nP -iTCP:18789 -sTCP:LISTEN # 3. Dernières lignes d'erreur (ajuster le chemin selon l'installation) tail -n 50 ~/.openclaw/logs/gateway.log | grep -i "error\|warn\|exit"
Si curl renvoie 200 mais que le Dashboard est lent, vérifiez d'abord les I/O disque : iostat -d 1 5. Confondre un pic d'écriture de logs avec une panne Gateway est la fausse alerte la plus fréquente. Maintenez un « nœud doré » sur la même version que la production pour comparer immédiatement en cas d'anomalie.
lsof -iTCP:18789 retourne un PID qui n'est pas OpenClaw, exécutez launchctl list | grep openclaw pour vérifier l'état du service. Un processus résiduel d'une ancienne version peut tenir le port. Tuer ce processus sans supprimer l'ancien plist conduira launchd à le relancer à la prochaine connexion.
2. Trois vérifications avant chaque mise à jour
OpenClaw publie des mises à jour fréquemment. Suivre chaque version sans précaution introduit deux risques : des changements de clés de configuration empêchant le démarrage du Gateway, ou des incompatibilités avec la configuration existante des Channels. Les mises à jour progressives sont la méthode standard, mais beaucoup d'équipes interprètent « progressif » comme « essayer sur une machine d'abord » en omettant le gel de version et la vérification de l'espace disque.
| Étape | Réalisée Mise à jour progressive | Omise npm update direct |
|---|---|---|
| Gel de version (tag actuel) | Rollback via npm install openclaw@ancien-tag |
Ancienne version inconnue, restauration tarball uniquement |
| Nœud doré en premier | Incident isolé au nœud de test, production inchangée | Tous les Channels tombent simultanément |
| Disque racine ≥ 15% libre | Fichiers temporaires npm install ont de la place | Installation interrompue à mi-chemin, état incohérent |
# Enregistrer la version actuelle
npm list -g openclaw --depth=0 > .upgrade-memo
# Archiver la configuration actuelle
tar czf openclaw-config-$(date +%Y%m%d).tar.gz \
~/.openclaw/config/ \
~/Library/LaunchAgents/com.openclaw.gateway.plist
# Vérifier l'espace disque ≥ 15%
df -h / | awk 'NR==2 {print "Libre :"$4, "Utilisé :"$5}'
3. Rollback : restauration en deux étapes tarball + plist
La cause la plus fréquente d'échec d'un rollback n'est pas la version du binaire — c'est l'incompatibilité des clés de configuration. Une nouvelle version peut avoir ajouté des champs obligatoires ; revenir au binaire tout en laissant la nouvelle configuration provoque une erreur de démarrage du Gateway. L'ordre correct est : bootout → restaurer le tarball → rétrograder le binaire → bootstrap.
# Étape 1 : arrêter le service launchctl bootout gui/$(id -u) ~/Library/LaunchAgents/com.openclaw.gateway.plist # Étape 2 : restaurer le tarball de configuration tar xzf openclaw-config-20260604.tar.gz -C / # Étape 3 : rétrograder le paquet npm npm install -g openclaw@1.x.x # remplacer par le tag de version enregistré # Étape 4 : redémarrer le service launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.openclaw.gateway.plist # Étape 5 : vérification (laisser ~10 s au démarrage) sleep 10 && curl -fsS http://127.0.0.1:18789/health && echo "Rollback OK"
Attention à la dérive du chemin plist : si l'installateur de la nouvelle version a réécrit ProgramArguments, le bootout doit utiliser le nouveau chemin plist et le bootstrap l'ancien plist restauré. Ces chemins peuvent différer — raison de plus pour comparer ancien et nouveau plist avant la mise à jour.
4. Tailscale vs SSH/rsync : lequel utiliser dans quel cas
Le débat classique « Tailscale ou SSH direct ? » est un faux dilemme. Chacun excelle dans un scénario différent. Tailscale brille pour l'accès multi-appareils et multi-régions sans règles de pare-feu. SSH/rsync est le bon choix pour les transferts massifs où le goulot d'étranglement est la bande passante sortante, pas le surcoût protocolaire.
| Critère | Tailscale Maillage WireGuard | SSH / rsync Transfert chiffré direct |
|---|---|---|
| Usage recommandé | Dashboard depuis n'importe quel appareil, accès multi-membres, plan de contrôle VPN | Téléchargement d'artefacts CI, archives de logs, syncs planifiées volumineuses |
| Latence | Relais DERP +~50 ms Asie↔Canada ; connexion directe proche du RTT nu | TCP nu, faible overhead ; nécessite port ouvert ou hôte de rebond |
| Bande passante | Surcoût protocolaire ~+5 %, adapté aux sessions faible débit persistantes | Utiliser --bwlimit pour ne pas saturer la sortie Canada |
| Contrôle d'accès | ACL Tailscale par appareil/utilisateur | Clés SSH ; authorized_keys à auditer régulièrement |
| Diagnostic | Règles ACL, nœud DERP, résolution MagicDNS | Routage, MTU, timeout et reprise sur interruption |
# Récupérer les archives de logs depuis le nœud Canada, limite 50 Mo/s, reprise rsync -avz --bwlimit=50000 --partial \ user@canada-m4.hashvps.com:~/.openclaw/logs/archive/ \ ./local-logs/ # Vérifier que Tailscale utilise une connexion directe (pas DERP) tailscale ping canada-m4 --until-direct
5. Planification du disque de logs : logrotate et conseils de partition
Une part surprenante des arrêts inattendus du Gateway s'explique par un disque racine plein. Par défaut, OpenClaw écrit les logs dans le répertoire utilisateur — le même volume que le cache npm global. Ajoutez des exports Xcode ou des fichiers temporaires CI et vous pouvez remplir silencieusement un disque de 512 Go en quelques semaines. La bonne solution est logrotate, pas un rm périodique.
/Users/mac/.openclaw/logs/*.log {
daily
rotate 7
compress
missingok
notifempty
dateext
copytruncate
}
# Ajouter à crontab (exécution à 03 h 00 chaque jour) :
# crontab -e, puis ajouter :
# 0 3 * * * /usr/local/bin/logrotate /Users/mac/.openclaw/logrotate.conf
Pour le cache npm, définissez npm config set cache-max 10240 pour le limiter à 10 Go et exécutez npm cache clean --force après chaque mise à jour. Sur un nœud 1 To, envisagez de déplacer ~/.openclaw/logs et le cache npm sur un volume séparé — si les logs explosent, cela n'affecte pas le disque racine ni le processus Gateway.
6. FAQ : six questions fréquentes en exploitation
Le health check Gateway 18789 renvoie autre chose que 200 — où regarder en premier ?
Exécutez lsof -nP -iTCP:18789 -sTCP:LISTEN pour vérifier qu'un processus écoute. Aucune sortie signifie que le processus ne tourne pas : vérifiez launchd avec launchctl list | grep openclaw, puis consultez les 50 dernières lignes de ~/.openclaw/logs/gateway.log. Si le port écoute mais que HTTP renvoie 500, suspectez une erreur de clé de configuration — comparez avec le tarball pré-mise à jour.
Après un rollback, faut-il modifier manuellement le chemin plist ?
Uniquement si l'installateur de la nouvelle version a modifié ProgramArguments. Pour une simple mise à jour npm sans changement d'installateur, la restauration du tarball laisse le plist intact. Si le chemin du binaire a changé, mettez à jour ProgramArguments dans le plist pour pointer vers l'ancien binaire avant de lancer bootstrap — c'est pourquoi comparer ancien et nouveau plist avant la mise à jour appartient au runbook.
Faut-il mettre à jour plusieurs nœuds simultanément ou un par un ?
Toujours un par un. Mettez à jour le nœud doré en premier ; observez la santé du Gateway et le SLA des Channels pendant 24 heures. Puis déployez les nœuds de production l'un après l'autre avec au moins 30 minutes d'intervalle. Une mise à jour simultanée signifie qu'en cas de problème, il n'y a aucune référence de comparaison et tous les nœuds tombent en même temps.
Le Dashboard affiche 100 % CPU — est-ce un bug OpenClaw ?
Pas nécessairement. Utilisez top -o cpu ou Activity Monitor pour identifier le PID réellement consommateur. Un processus Gateway OpenClaw sain devrait tourner à 1–5 % en régime permanent. Si c'est un processus node qui explose, vérifiez les requêtes Channel en attente ou des écritures de logs anormales. Sur un Mac mini dédié, utilisez renice pour baisser la priorité des processus Xcode qui concurrencent OpenClaw.
Tailscale est connecté mais impossible d'accéder au Dashboard — pourquoi ?
Vérifiez dans votre politique ACL Tailscale que le port 18789 est autorisé pour cet appareil. Récupérez ensuite l'IP tailnet avec tailscale ip -4 et testez directement : curl http://<tailnet-ip>:18789/health. Si l'IP fonctionne mais pas le nom d'hôte MagicDNS, c'est un problème de résolution DNS, pas un problème Gateway.
Après l'exécution de logrotate, le Gateway continue-t-il d'écrire dans le bon fichier ?
Avec copytruncate, logrotate copie le fichier puis tronque l'original sur place — le descripteur de fichier du Gateway reste valide tout au long. Si vous utilisez le mode create par défaut, envoyez un signal SIGHUP au Gateway ou utilisez un script postrotate pour exécuter launchctl kickstart et rouvrir le handle de log. copytruncate est plus simple et évite toute interruption de service.
Un Runbook est aussi fiable que le matériel qui le fait tourner
La fenêtre de rollback de 30 minutes et l'hypothèse « Gateway à 1–5 % CPU » ne tiennent que sur du matériel dédié. Sur des VM sursaturées, la même sonde curl 18789 renvoie 200 aujourd'hui et expire demain. Les Mac mini M4 Canada de Hashvps sont des nœuds bare-metal dédiés, jamais en overselling : launchd, SSH et le cache npm se comportent exactement comme sur un Mac local, de sorte qu'un Runbook testé sur votre poste fonctionne de la même façon en production. La consommation au repos de 4 W d'Apple Silicon permet une disponibilité 24/7 sans bruit de ventilateur ni throttling thermique imprévu. Gatekeeper + SIP + FileVault protègent vos tokens Gateway et configurations Channel sans travail supplémentaire sur les groupes de sécurité.
Si vous souhaitez déployer ce Runbook sur un nœud au comportement prévisible et auditable par toute votre équipe, le Mac mini M4 cloud Hashvps est le point de départ le plus direct — découvrir les offres et transformer l'exploitation OpenClaw en SLA de production.