OpenClaw sur VPS Linux
avec systemd utilisateur

linger · XDG_RUNTIME_DIR · vérification du démon · triage par couches · région API et egress

OpenClaw Linux VPS systemd linger API

Ingénieurs plateforme, SRE et opérateurs d'agents self-hostés échouent en 2026 sur VPS Linux moins sur une faute de frappe que sur systemd utilisateur arrêté après logout SSH, XDG_RUNTIME_DIR absent hors chemins interactifs, journaux gateway-canal-modèle lus comme un seul bloc, et décalage entre région API choisie en console et chemin d'egress réel du VPS. Ce texte liste cinq coûts cachés avant prod, un tableau à trois modèles bare-metal systemd contre systemd dans conteneur contre Docker seul, un runbook en six étapes avec commandes, une checkliste et trois faits techniques citables, plus une matrice de décision. Installation et gateway : checklist install et doctor. Compose : baseline production Docker Compose. Commande : page de commande.

01

« Je peux le lancer à la main » n'est pas « il tient sans supervision »

OpenClaw sur Linux déplace processus longue durée, répertoires de sockets, journaux et sémantique de redémarrage depuis l'habitude personnelle vers des unités auditables. Les cinq points ci-dessous arrivent ensemble et mènent à un seul garde-fou : écrivez linger et XDG_RUNTIME_DIR sur la feuille d'acceptation avant la discussion Docker.

  1. 01

    Liaison de session : sans linger, la fin d'une session SSH interactive peut arrêter le gestionnaire systemd utilisateur ; les unités meurent la nuit sans bruit.

  2. 02

    Répertoire runtime manquant : cron, shells minimaux ou mauvais types de service laissent XDG_RUNTIME_DIR vide et éclatent les erreurs entre l'app et systemd.

  3. 03

    Couches ignorées : écoute gateway, jetons canal, routage modèle et 429 amont fusionnent en « OpenClaw est cassé ».

  4. 04

    Dérive région vs egress : la console pointe région A tandis que le chemin VPS renvoie des indices région B dans les en-têtes, ce qui ressemble à une auth intermittente plutôt qu'à un 403 stable.

  5. 05

    Frontières mélangées : Docker plus unités utilisateur sur un même hôte désalignent ordre de redémarrage et sémantique health, ce qui brouille les rollbacks.

Comparez unités utilisateur hôte et PID 1 conteneur avec le tableau suivant comme diapositive de revue, pas comme slogan.

02

Trois modèles : systemd bare-metal, systemd dans conteneur, Docker seul

Décidez d'abord qui porte redémarrages, rotation des journaux, sémantique linger et frontière sockets contre ports hôte. Pas de solution universelle, seulement une frontière d'exploitation adaptée.

ModèleUsage typiqueBénéfice principalCoût principal
systemd bare-metal (utilisateur)VPS unique, travail serré avec pare-feu hôte et loopbackAligné sur la distro, unités et journal cohérentslinger et bords de session login obligatoires
systemd dans conteneurSupervision multi-process dans l'imageProche d'un hôte de services Linux classiqueArêtes privilèges-image plus vives, debug intérieur et extérieur
Docker seulCompose ou orchestrateur possède health et restartArtefacts versionnés et rollbacks clairsLa sémantique linger utilisateur hôte n'est pas automatique

L'acceptation reproductible n'est pas « ça tourne sur mon portable », c'est « l'unité survit à la fin SSH, le journal est lisible, les indices région sont capturés deux fois avec les mêmes commandes ».

03

Runbook en six étapes : linger, runtime, installation, vérification, signaux par couche

Ordre : garder le gestionnaire utilisateur vivant sans supervision, valider le répertoire runtime, installer les unités, trier par couches, puis capturer des instantanés d'egress. Chaque étape livre des sorties de commande sauvegardées. La baseline gateway reste dans la checklist install et doctor.

  1. 01

    Fixer l'utilisateur service : compte et groupe principal stables, pas de mélange root. Livrable : id et court extrait loginctl user-status.

  2. 02

    Activer linger : pour l'utilisateur de déploiement, afin que user@ tourne sans login. Livrable : show-user affiche linger=yes.

  3. 03

    Valider XDG_RUNTIME_DIR : imprimer depuis le même profil que l'unité, attendre une forme /run/user/<uid>.

  4. 04

    Installer et activer : placer l'unité en scope utilisateur, daemon-reload et enable --now, vérifier Active et pid principal avec status.

  5. 05

    Échantillonner par couche : d'abord écoute et parse config gateway, puis jetons canal et webhook, puis quotas amont et en-têtes région. Garder les deux cents dernières lignes journal par couche.

  6. 06

    Cohérence egress : résoudre le même hôte et capturer métadonnées TLS visibles avant et après changement ; ne pas élever un RTT unique en conclusion de performance.

linger, runtime dir, unités utilisateur (exemple)
loginctl show-user "${USER}" -p Linger
sudo loginctl enable-linger "${USER}"
systemctl --user show-environment | grep XDG_RUNTIME_DIR || true
echo "${XDG_RUNTIME_DIR}"
systemctl --user daemon-reload
systemctl --user status openclaw-gateway.service --no-pager
journalctl --user -u openclaw-gateway.service -n 200 --no-pager

Note : remplacez openclaw-gateway.service par le vrai nom d'unité. Même autre binaire gateway, la ligne ExecStart de l'unité reste la référence.

04

Checkliste go-live et trois faits techniques citables

Attribuez propriétaire et rythme de revue. Les contrôles région collectent uniquement des métadonnées TLS et réponse reproductibles, pas de classements de débit inventés.

  1. S1

    Porte linger : chaque ticket doit joindre show-user Linger=yes en texte ou capture.

  2. S2

    Frontière d'unité : documenter quels ports les unités utilisateur lient contre ceux publiés par conteneur, synchroniser la doc pare-feu.

  3. S3

    Rétention logs : persistance journal ou relais distant décrits pour éviter disque plein par logs de debug.

  4. S4

    Runbook par couche : au moins trois contrôles « passer à la suite » par couche gateway, canal, modèle.

  5. S5

    Instantanés région : sortie résolveur et échantillons d'en-têtes avant et après fenêtre de release pour contraste rollback.

  • Sémantique linger : loginctl enable-linger agit sur la frontière de survie du gestionnaire systemd utilisateur ; ce n'est pas équivalent automatiquement au choix Docker.
  • XDG_RUNTIME_DIR : sous session systemd utilisateur, souvent /run/user/<uid>. Absente hors login, les sockets retombent sur des chemins non fiables.
  • En-têtes d'indice région : beaucoup d'amonts renvoient des indices dans en-têtes ou corps d'erreur. Fixez version d'outil et drapeaux pour ne pas prendre une réponse proxy cachée pour l'origine.

Attention : un curl réussi une fois ne prouve rien après bascule CDN. Nom d'hôte fixe et commandes répétables battent un tir chanceux.

05

Matrice de décision et egress cloud stable : quand quitter bash brut

Sans versions pour linger, noms d'unités, matrice de ports et instantanés région, la résidence Linux n'est qu'à moitié livrée. L'autre moitié partage le langage de responsabilité avec le triage gateway.

Posture équipeDéfaut recommandéSignal d'acceptationPiège fréquent
Solo, itération rapideBaseline Docker ComposeHealth et restart reviewables dans composeIgnorer mem_limit et rotation des journaux crée de faux blocages
Multi-locataire même machineFrontière conteneur plus noms de projet isolésChaque pile a son répertoire de donnéesMélange avec unités utilisateur crée des courses au redémarrage
Couplage serré hôtesystemd utilisateur plus lingerLe journal reste continu après fin SSHXDG_RUNTIME_DIR non vérifié sur chemins non interactifs

Bash interactif, nohup sans linger ou watchdogs artisanaux se paient souvent en revue de changement et audit. Sans instantanés egress, les pivots de politique région amont deviennent difficiles à expliquer. À l'inverse, capacité Mac cloud dédiée avec région choisissable et paliers réseau lisibles simplifie egress stable et images dorées avec builds iOS ou passation bureau.

Piège fréquent : croire que Docker efface toute sémantique systemd. Si des unités utilisateur hébergent encore la gateway hors Compose, linger et le répertoire runtime restent des portes dures.

Scripts personnels et exports d'environnement non versionnés survivent rarement à la passation et à la conformité avec un SLA externe. Quand OpenClaw doit partir avec politique région amont, empreinte TLS et narration d'egress fixe, les chemins bash-only manquent souvent de tickets de changement auditables. Pour les équipes qui regroupent passation iOS, régression CI et agents automatisés dans une seule acceptation et veulent commandes et paliers région plutôt qu'un pari egress maison, la location cloud Mac Mini VpsMesh est en général le meilleur alignement : nœuds dédiés simplifient ACL et noms d'hôte, la collaboration reste proche des boucles à fort churn, le langage d'exploitation peut suivre le runbook de nœuds de build réseau privé d'équipe. Mix régions sur la page tarifs, frontières de connexion selon le centre d'aide.

FAQ

Trois questions fréquentes

Après fin de session, systemd --user peut s'arrêter et emporter les unités OpenClaw utilisateur. Vérifiez linger avant prod et croisez connexion plus résidence dans le centre d'aide pour éviter de confondre arrêts nocturnes et pannes amont.

Fixez nom d'hôte et version d'outil, stockez résolution et métadonnées TLS visibles pour le même endpoint, comparez réglage région console et variables d'environnement. Santé au niveau Compose : article baseline production Docker Compose.

Quand redémarrage, rotation, limites et healthchecks sont entièrement dans Compose ou un orchestrateur et que vous n'avez pas besoin de sockets utilisateur hôte plus linger, Docker seul est souvent plus simple. Terminez l'acceptation par couches de la section trois avant de mélanger avec des unités utilisateur.