AI Frontier

Drainage de trafic de la passerelle OpenClaw et bascules nginx progressives en 2026 sur un Mac mini cloud macOS

MacHTML Lab2026.04.20environ 26 min de lecture

Redémarrer une passerelle OpenClaw liée à un seul port est rapide mais brutal : les appels d’outils en cours, les jetons de modèle partiellement streamés et les accusés de réception webhook peuvent disparaître au milieu de la réponse. En 2026, les équipes soucieuses de la confiance opèrent des drainages de trafic—elles maintiennent l’ancienne binaire vivante tout en orientant les nouvelles sessions TCP vers une build fraîche sur un second port loopback, puis ne retirent l’ancien processus qu’après expiration des temporisations d’inactivité. Ce document décrit un schéma nginx d’upstream pondéré sur macOS, des valeurs par défaut qui ont survécu aux audits financiers et des hooks de validation alignés sur openclaw doctor. Associez-le à durcissement du proxy inverse pour les en-têtes TLS et le placement des tunnels, et à récupération LaunchAgent lorsqu’un drainage échoue et qu’un redémarrage brutal devient le repli.

Vous obtiendrez un tableau d’étapes, des timeouts concrets, des sondes curl et des idées d’injection de fautes adaptées à une passerelle 24/7 sur silicium Apple loué. Nous ajoutons des conseils organisationnels : qui approuve le basculement, comment annoter Grafana pour éviter les post-mortems flous, et pourquoi un exercice mensuel de rollback coûte moins cher qu’une panne nocturne.

Pourquoi les redémarrages brutaux échouent

Les utilisateurs pardonnent moins les 500 que les réponses incompréhensibles. Un redémarrage qui coupe les sockets keep-alive ressemble à une bannière « assistant hors ligne » même si les health checks redeviennent verts instantanément. Le drainage préserve la sémantique TCP : les connexions existantes se terminent proprement pendant que les nouvelles atteignent green.

Les équipes conformité se soucient aussi des doubles événements de facturation lorsque les clients réessayent sans clés d’idempotence. Une fenêtre de 120 secondes coûte peu comparée à la réconciliation.

Topologie blue, green, nginx

Liez blue à 127.0.0.1:8787 et green à 127.0.0.1:8788. Le trafic public n’atteint jamais ces ports directement ; nginx écoute sur 443 et proxy vers un groupe upstream contenant les deux loopbacks. En régime établi, le poids 100 est sur blue. Pendant le déploiement, déplacez le poids par incréments de 10 points tout en surveillant le budget d’erreurs.

PhasePoids bluePoids greenFocus opérateur
Stable1000Métriques de base
Canari9010Parité du taux d’erreur
Moitié5050Histogrammes de latence
Terminé0100Drainer les sockets blue

Esquisse nginx

Restez simple : deux serveurs upstream, least_conn ou ip_hash si des sessions collantes comptent pour vos adaptateurs de canal, et des en-têtes proxy explicites pour conserver l’hôte d’origine dans les journaux OpenClaw.

upstream openclaw_gateway {
  least_conn;
  server 127.0.0.1:8787 weight=90 max_fails=3 fail_timeout=10s;
  server 127.0.0.1:8788 weight=10 max_fails=3 fail_timeout=10s;
}

server {
  listen 443 ssl;
  location / {
    proxy_pass http://openclaw_gateway;
    proxy_http_version 1.1;
    proxy_set_header Connection "";
    proxy_read_timeout 300s;
  }
}

Rechargez nginx avec nginx -t && nginx -s reload ; le reload est sub-seconde et préserve la plupart des connexions inactives selon les paramètres workers.

Timeouts bout à bout

Alignez proxy_read_timeout sur le plafond d’inactivité du modèle amont côté passerelle. Un décalage 300 s côté nginx mais 60 s dans le gateway tronque les flux pendant que les journaux blâment le modèle.

Pour WebSockets ou HTTP streaming, proxy_buffering off sur cette location ; sinon des tampons par défaut à 4 Mo simulent des blocages.

Pendant le drainage, réglez fail_timeout assez bas pour retirer rapidement une mauvaise build green, mais pas si bas que des health checks vacillent lors de pics CPU sur des hôtes M4 exécutant des agents parallèles.

Validation et rollback

Avant le premier 10 %, lancez des sondes de chat synthétiques directement contre green sur loopback ; comparez le temps jusqu’au premier jeton avec blue—arrêtez le déploiement si la régression dépasse 8 %.

Corrélez les identifiants entre journaux d’accès nginx et journaux structurés OpenClaw. Sans identifiants, les post-mortems deviennent subjectifs.

Le rollback est un retour de poids à 100/0 plus arrêt du processus green—entraînez-vous mensuellement.

Processus et ports macOS

Exécutez chaque passerelle sous son propre label LaunchAgent pour que launchctl kickstop cible la bonne famille PID. Séparez aussi StandardOutPath par couleur pour éviter les lignes JSON entrelacées.

Vérifiez les sockets avec lsof -nP -iTCP:8787 -sTCP:LISTEN après chaque étape ; des écouteurs zombies apparaissent lorsque les développeurs rechargent à chaud sans libérer le port.

Répétez toute la bascule sur du matériel proche de la production. Un Mac mini cloud MacHTML—souvent environ 16,9 $ par jour—offre la thermique Apple Silicon, le comportement launchd réel et SSH pour éditer nginx sans risquer les réglages de veille de votre portable.

Observabilité

Pendant une bascule, exportez toutes les 10 secondes : connexions upstream actives par couleur, ratio 5xx par couleur, p95 temps jusqu’au premier jeton depuis votre sonde. Tracez-les sur le même graphique.

Annot Grafana avec l’horodatage du reload nginx et le SHA Git du binaire green.

Alerter si le taux 5xx de green dépasse celui de blue de plus de 0,5 point de pourcentage pendant plus de 3 minutes tant que green porte du trafic.

Sécurité

Deux ports loopback doublent le risque d’exposition accidentelle sur 0.0.0.0. Automatisez un contrôle post-déploiement qui échoue la CI si des interfaces publiques écoutent.

La rotation des secrets doit mettre à jour les deux couleurs avant de déplacer le trafic ; sinon green peut démarrer avec d’anciennes clés API et hériter silencieusement du trafic.

Désactivez les routes debug réservées aux admins sur les deux binaires.

Multi-locataires

Étiquetez les limites de débit par locataire dans la configuration OpenClaw et vérifiez qu’elles correspondent aux zones limit_req nginx. Le drainage ne corrige pas les problèmes d’équité—si green double accidentellement la concurrence, revenez en arrière et inspectez ulimit -n.

Planifiez les grandes bascules hors des jobs cron qui capturent des instantanés disque ; les pics APFS peuvent ajouter 30–80 ms aux latences de queue indépendamment des poids nginx.

Si plusieurs équipes partagent la même fenêtre de maintenance, publiez un calendrier partagé des bascules pour éviter deux drains simultanés qui saturerait le CPU du proxy ou le réseau sortant vers les fournisseurs de modèles.

FAQ

Le drainage élimine-t-il toutes les erreurs ?

Non—les bugs applicatifs subsistent, mais une classe de réinitialisations transport disparaît.

Sockets de domaine Unix au lieu de TCP ?

Oui, nginx prend en charge les chemins unix: ; la même logique de poids s’applique.

Et le mTLS vers les modèles amont ?

Terminez ou transmettez de manière cohérente sur les deux couleurs ; les configurations mixtes génèrent des poignées de main TLS partielles déroutantes.

Lorsque les passerelles tournent en continu, l’économie du matériel dédié compte. Un Mac mini allie faible puissance au repos et marge multicœur pour les processus dual-color pendant les bascules, et macOS correspond aux hypothèses d’automatisation de nombreux opérateurs OpenClaw. Louer via MacHTML évite les retards d’achat, garde la VNC prête pour des vérifications visuelles des icônes de barre de menus et permet d’isoler un hôte de staging pour répéter les reloads nginx pendant que la production reste intacte—capacité élastique sans acheter une seconde machine utile seulement pendant les semaines de release.

Répéter les drainages blue/green sur macOS réel

Provisionnez un Mac mini cloud, reliez nginx à deux ports loopback et entraînez des bascules pondérées avec OpenClaw avant votre prochaine fenêtre de mise à niveau production.

S’entraîner aux bascules
Dès 16,9 $/jour