Les playbooks de diffusion webhook répondent surtout à la question « qui n’a pas livré » ; ils ne tranchent pas quel build OpenClaw ni quelle tranche de paquet de skills doit porter le trafic de production. La discipline cluster minimale et reproductible, c’est un canari piloté par ratio de trafic sur des passerelles Mac clustervps, avec arborescences semver immuables et une sonde fusionnée qui agrège déjà Doctor, files d’attente et contexte digest.

Ce HowTo complète — sans le recopier — l’article centré notificateur et « broadcast » : OpenClaw sur clustervps : passerelles multi-AZ, sondes fusionnées, webhooks et rotation de jetons. Là, le plan de contrôle vit dans les digests et le chevauchement des secrets. Ici, il vit dans le pourcentage de trafic, les tranches de skills immuables et des barrières de promotion répétables sur trois hôtes clustervps, sans ambiguïté sur le Mac de référence.

Flux de publication multi-nœuds OpenClaw (avant tout déplacement de ratio)

Traitez la publication comme un contrat entre passerelles, pas comme un unique git pull héroïque. Chaque Mac participant doit s’aligner sur quatre artefacts : la ligne openclaw.lock qui épingle démon et CLI, le jeu de fragments locataires décrit dans Découpage locataire, fusion Doctor et digest webhook, le répertoire de paquet de skills conforme au semver du lock, et la route readiness composite détaillée plus bas. L’ordre de promotion reste ombre sur hôte canariDoctor + sonde fusionnée au vertpetit coup de pondération LBmiroir sur les pairsligne d’audit. Sauter l’étape d’ombre, c’est expédier deux arbres de skills différents pendant que l’équilibreur affiche encore « sain ».

  • Source de vérité : étiquette Git par promotion ; refuser un reload launchd si l’arbre de travail est sale.
  • Passerelles parallèles : un Mac « writer » pose l’étiquette ; la passerelle canari tire en premier ; les passerelles stables ne tirent qu’après validation des ratios.
  • Workers et notificateurs : peuvent traîner d’une révision derrière les passerelles, mais ne les précèdent jamais — sinon la sonde fusionnée ment sur la compatibilité des skills.
#!/usr/bin/env bash
set -euo pipefail
cd /usr/local/share/openclaw-infra
/usr/bin/git fetch --tags origin
/usr/bin/git checkout "refs/tags/${PROMOTE_TAG}"
/usr/bin/shasum -a 256 openclaw.lock | /usr/bin/tee /tmp/lock.sha
/usr/local/bin/openclaw version --json | /usr/bin/tee /tmp/version.json
/usr/bin/diff -q openclaw.lock <(ssh canary-gw "cat /usr/local/share/openclaw-infra/openclaw.lock")

Lorsque le diff est vide, vous pouvez toucher aux pondérations d’équilibreur. Sinon, arrêtez : vous allez scinder l’état entre AZ.

Les équipes qui provisionnent un cluster parallèle de Mac dédiés gagnent un siège canari isolé sans pénaliser les passerelles de production : chaque AZ peut absorber un rehearsal complet de promotion pendant que les workers continuent de vider les files de build sur leurs nœuds habituels.

Ratio de trafic : jalons canari sur passerelles clustervps multi-AZ

Un canari, ce n’est pas une « sensation » : c’est une suite de ratios discrets. Commencez par envoyer environ cinq pour cent des nouvelles sessions vers la passerelle qui porte déjà l’arborescence d’ombre (/var/db/openclaw/skills/next à côté de current). Maintenez ce ratio sur au moins deux intervalles de sonde composite — souvent dix minutes — en surveillant la latence p95, la profondeur de file et les budgets d’erreur, hors bruit webhook pur. Ne montez que par paliers de 10 à 20 points lorsque le JSON fusionné montre Doctor au vert et que le bloc digest est propre ou déjà classé comme contre-pression bénigne.

Tenez une ligne de tableur par palier : horodatage, instantané des poids, semver des skills, ticket. Cette ligne devient votre boussole de rollback quand on vous demande ce qui a changé entre le déjeuner et l’incident.

Documentez l’API ou le CLI exact de votre fournisseur d’équilibreur ; les opérateurs clustervps placent souvent les passerelles Mac derrière anycast ou GeoDNS — encapsulez les appels fournisseur dans une fonction shell que vous pouvez coller dans le canal d’astreinte.

Fragments de configuration par locataire (frontières des tranches de skills)

Les tranches semver échouent quand les fragments locataires ne s’accordent pas sur l’ordre d’inclusion. Répliquez /etc/openclaw/tenants/<tenant>/skills.d/ sur chaque passerelle avant de faire pointer next vers un nouveau dossier semver. Chaque fragment ne doit déclarer que la frontière de tranche — espaces d’outils autorisés, profils modèle, quotas disque — pas les secrets. Montez les secrets depuis /var/db/openclaw/secrets/<tenant> avec ACL POSIX pour que le canari valide le parsing sans fuiter des jetons dans les journaux CI.

# On each gateway after git tag checkout
sudo install -d -o root -g wheel /etc/openclaw/tenants/acme/skills.d
sudo /usr/local/bin/openclaw config lint --tenant acme
sudo /bin/ln -sfn "/var/db/openclaw/skills/1.4.2" /var/db/openclaw/skills/next
sudo launchctl kickstart -k system/com.openclaw.gateway

Les locataires « canari » peuvent faire pointer skills.d/10-canary.yaml vers next pendant que la prod reste sur current jusqu’à validation d’audit — la tranche minimale par tenant sans forker tout le cluster.

Fusion des sondes : Doctor, files, digest et semver des skills

L’équilibreur n’appelle toujours qu’une URL, mais le gestionnaire doit dire si le semver des skills sur disque correspond à openclaw.lock, si Doctor est vert pour les locataires ayant reçu du trafic sur l’intervalle, et si la profondeur de file reste dans le SLO. Les lignes de digest webhook restent utiles : elles sont un champ du JSON fusionné, pas le déclencheur de promotion. Cette nuance isole ce guide des architectures où le broadcast webhook fait foi à lui seul.

#!/usr/bin/env bash
set -euo pipefail
TENANT_CANARY="${TENANT_CANARY:-acme}"
SKILL_PATH="/var/db/openclaw/skills/current"
/usr/bin/readlink "${SKILL_PATH}" | /usr/bin/tee /tmp/skill_path.txt
/usr/local/bin/openclaw doctor --tenant "${TENANT_CANARY}" --json >/tmp/doctor.json
/usr/bin/curl -fsS --max-time 3 "http://127.0.0.1:9099/v1/webhook-digest" -o /tmp/digest.json
/usr/bin/python3 - <<'PY'
import hashlib, json, pathlib
blob = pathlib.Path("/tmp/doctor.json").read_bytes() + pathlib.Path("/tmp/digest.json").read_bytes()
print(json.dumps({"probe_sha256": hashlib.sha256(blob).hexdigest(),"skill_resolved": pathlib.Path("/tmp/skill_path.txt").read_text().strip()}))
PY

Répondez status: degraded lorsque Doctor est jaune mais semver et digest restent acceptables : le trafic continue pendant que les tableaux de bord crient. Échec dur si le semver ne correspond pas au lockfile — aucun volume de webhooks « propres » ne doit promouvoir ce build.

Retour arrière : trafic, liens symboliques et launchd dans le même souffle

Le rollback tient à deux leviers : restaurer l’instantané des pondérations LB d’avant canari, et ramener /var/db/openclaw/skills/current vers l’ancien répertoire semver. Évitez le rollback partiel : des poids incohérents sans la chaîne de liens symboliques vous laisse soit du vieux trafic sur des skills neuves, soit l’inverse. Après les deux leviers, un seul kickstart launchd, puis attendez que le JSON de sonde fusionnée rejoigne l’instantané « bon » archivé dans votre fichier d’audit.

#!/usr/bin/env bash
set -euo pipefail
/usr/bin/scp stable-gw:/var/db/openclaw/audit/last_good_weights.json /tmp/weights.json
./lb_restore_weights.sh /tmp/weights.json
sudo /bin/ln -sfn "/var/db/openclaw/skills/${ROLLBACK_SEMVER}" /var/db/openclaw/skills/current
sudo launchctl kickstart -k system/com.openclaw.gateway
/usr/bin/curl -fsS http://127.0.0.1:8088/readyz | /usr/bin jq .

Enchaînez les exercices de rollback avec l’hygiène artefacts de la matrice Mac mini M4 inter-régions (rsync, verrous) pour ne pas courir un rsync pendant que l’équilibreur pointe encore vers la mauvaise AZ.

Audit : JSONL append-only que la sécurité peut filtrer

Chaque palier de ratio doit ajouter une ligne JSON à /var/db/openclaw/audit/promotions.jsonl sur la passerelle writer, répliquée vers l’objet chaque nuit. Capturez actor, ticket, semver avant/après, carte des poids LB et le probe_sha256 émis par le script de sonde fusionnée. Les revues sécurité s’intéressent moins aux webhooks qu’à la preuve qu’un humain a autorisé le mouvement binaire.

/usr/bin/printf '%s\n' \
  "{"ts":"$(date -u +%Y-%m-%dT%H:%M:%SZ)","actor":"${USER}","ticket":"${TICKET}","from":"1.4.1","to":"1.4.2","weights":"${WEIGHT_BLOB}","probe_sha256":"${PROBE_SHA}"}" \
  | /usr/bin/tee -a /var/db/openclaw/audit/promotions.jsonl

Quand l’audit demande « qu’est-ce qui a bougé ? », vous répondez avec des filtres jq, pas avec l’historique Slack.

FAQ : canari versus exploitation « webhook d’abord »

Faut-il encore le digest notificateur ? Oui — exposez-le dans la sonde fusionnée pour voir les pannes partenaires systémiques. Mais n’élargissez pas le trafic uniquement parce que le digest est vert : semver et Doctor doivent d’abord s’accorder.

Un seul locataire veut les nouveaux skills ? Gardez ses fragments sur la passerelle canari et épinglez cookies ou en-têtes sticky LB pour cette cohorte vers le pool canari, le reste restant sur les poids stables.

Combien de Mac au minimum ? Trois hôtes clustervps restent la répétition honnête minimale : stable AZ-A, stable AZ-B, passerelle canari qui reçoit le ratio avant que les pairs ne reflètent.

Guide opérationnel uniquement. Les détails OpenClaw varient selon les versions ; validez les drapeaux sur votre build. Les API d’équilibreur diffèrent selon les fournisseurs ; traitez les extraits shell comme des motifs, pas comme des secrets prêts à l’emploi.
Capacité en cluster parallèle

Alignez une passerelle par AZ, pas un héros unique

Les drills canari cessent d’effrayer lorsque chaque AZ dispose d’un Mac dédié avec marge pour l’arborescence d’ombre et la sonde fusionnée. Parcourez les forfaits clustervps, ajoutez un nœud parallèle dans la région qui n’a pas encore de siège canari, puis câblez les ratios sur du matériel réel plutôt que sur un portable emprunté. Pour provisionner, ouvrez la page achat ; gardez la base d’aide et l’accueil à côté du runbook afin que l’équipe partage les mêmes chemins SSH avant tout mouvement de trafic.

Ajouter une passerelle Mac parallèle Voir les forfaits