IA / Automatisation 15 avril 2026

2026-04-15 OpenClaw : variables d’environnement & secrets sur Mac cloud loué sans tête (launchd)

Équipe ingénierie MacXCode 15 avril 2026 ~14 min

La passerelle OpenClaw empile la configuration : environnement du processus, .env projet, ~/.openclaw/.env, blocs JSON dans ~/.openclaw/openclaw.json. L’ordre surprend les équipes qui n’ont testé qu’en shell interactif. Sur un Apple Silicon loué accessible uniquement en SSH, l’absence de variable se traduit par des échecs d’auth LLM cryptiques, pas par une belle TUI. Ce guide 2026-04-15 cartographie la vraie précédence, les trous launchd, une matrice de stockage, une rotation en six étapes, et relie sondes de santé, reverse proxy et journalisation structurée pour garder des passerelles reproductibles à Hong Kong, Tokyo, Séoul, Singapour ou aux États-Unis.

Ne confondez pas la pile documentaire avec la réalité : launchctl injecte souvent des variables avant que le CLI ne lise les fichiers locaux ; les clés dupliquées donnent « ça marche dans tmux mais pas après reboot ». Centralisez les secrets dans un lieu auditable, utilisez ${VAR} côté JSON, et logguez la taille effective de l’environnement (souvent < 32 Ko) pour détecter un printenv accidentel dans la CI.

Comment OpenClaw résout l’environnement (modèle 2026)

En LaunchAgent, l’arbre commence par launchd. Les variables définies uniquement dans .zprofile n’apparaissent pas sans import shell contrôlé. Les bascules non sensibles (OPENCLAW_LOG_LEVEL=info) peuvent vivre dans le plist, mais évitez d’y coller des jetons longue durée lisibles par plusieurs comptes. Un wrapper qui extrait des secrets éphémères du Trousseau puis exec le binaire est plus sûr.

« Echo en terminal » n’implique pas « visible par la passerelle ». Les hôtes loués injectent parfois proxy/CA au niveau plateforme ; une couche .env OpenClaw ne gagne pas toujours en dernier. Listez des noms de clés masqués depuis votre wrapper CI et gardez un audit diff après chaque modification de plist. Une page « quelle région utilise quel matériel d’identité » réduit les erreurs de passation.

Chiffres : les imports shell expirent souvent vers 15 000 ms ; même un cold start < 800 ms doit journaliser la taille d’environnement effective.

Trous sur Mac loués sans interface

  • Pas de fenêtre de login.zprofile seul ne nourrit pas les LaunchAgents.
  • Confusion UID GUI/SSH — lancer openclaw gateway sous un autre utilisateur que le propriétaire de ~/.openclaw donne une config vide.
  • Éparpillement des secrets — copier .env dans /tmp pour déboguer crée des fichiers lisibles par tous ; chmod 600 puis suppression.
  • Dérive multi-région — une clé valide US East héritée par une passerelle JP peut violer la résidence des données.

Matrice de stockage (un primaire)

Mécanisme Forces Risques
~/.openclaw/.env (0600) Itération rapide, sauvegardes simples Visible pour root et imaging disque
EnvironmentVariables launchd Explicite pour démons, survit au reboot Plist dans ~/Library/LaunchAgents non world-writable
Trousseau + wrapper Meilleure histoire d’audit Déverrouillage headless plus délicat

Patron launchd pour builders loués

Alignez le plist sur l’UID qui exécute le CI SSH. Gardez les secrets hors ligne ou sous OPENCLAW_STATE_DIR=/Volumes/secure/openclaw-$REGION pour ne pas partager le home avec les caches Xcode. Utilisez VNC seulement pour confirmation visuelle réglementaire ; sinon SSH + journaux openclaw doctor suffisent.

#!/bin/bash set -euo pipefail export OPENCLAW_STATE_DIR="/Volumes/secure/openclaw-sg" exec /usr/local/bin/openclaw gateway run

Rotation en six étapes sans couper les webhooks

  1. Geler l’ingress — pause nginx ≤ 90 s (article reverse proxy).
  2. Nouvelle clé — mettre à jour le fournisseur d’abord ; chevauchement 15 min avec l’ancienne.
  3. Swap atomique.env.new, fsync, mv, chmod 600.
  4. launchctl kickstart -k gui/$UID/pcx.openclaw.gateway — exit 0 dans syslog.
  5. Vérifieropenclaw doctor + sonde 127.0.0.1:18789 (sondes).
  6. Réactiver nginx — des 200 sous 120 s ; rollback si erreurs > 5 %.
Jamais committer .env dans les dépôts applicatifs — même privés — car les équipes iOS les miroitent souvent vers des CI externes.

Mac multi-locataires : limites OPENCLAW_STATE_DIR

Deux squads sur un Mac mini M4 : séparez /Volumes/secure/openclaw-teamA et ...-teamB, avec labels launchd et groupes unix distincts pour les ACL. Encodez la région (HK, etc.) dans le chemin pour limiter le routage transfrontalier erroné. Si des archives Xcode nocturnes tournent sur la même machine, placez l’état hors des préfixes nettoyés par la CI et excluez /Volumes/secure du janitor.

FAQ : secrets OpenClaw sur Mac cloud

Question Réponse Lien
Garder l’import shell en prod ? Désactivez s’il tire des centaines de variables ; préférez des clés plist explicites. aide
Prouver qui a changé une clé ? Checksums plist versionnés + syslog vers SIEM. logs
Réutiliser le même .env partout ? Techniquement oui, opérationnellement non — segmentez pour réduire le blast radius. tarifs

Pont vers observabilité & capacité

Les secrets ne suffisent pas : une fois l’environnement stable, branchez sondes et pipelines de logs pour voir les régressions avant les clients. Relisez les sondes, puis dimensionnez via tarifs si la profondeur de file dépasse 40 messages pendant plus de 10 minutes. L’index du blog liste le reste de la série OpenClaw.

En bref : traitez l’environnement OpenClaw comme des secrets Kubernetes de production — explicites, moindre privilège, rotation répétée — et vos passerelles Apple Silicon se comporteront pareil à Tokyo et en Virginie.

Déployez OpenClaw sur passerelles M4 dédiées

SSH d’abord · HK · JP · KR · SG · US