Podman
Exécutez la passerelle OpenClaw dans un conteneur Podman rootless. Utilise la même image que Docker (construite à partir du Dockerfile du dépôt).
Prérequis
- Podman (rootless)
- Sudo pour la configuration unique (création d'utilisateur, construction de l'image)
Démarrage rapide
1. Configuration unique (depuis la racine du dépôt ; crée l'utilisateur, construit l'image, installe le script de lancement) :
./setup-podman.sh
Cela crée également un fichier minimal ~openclaw/.openclaw/openclaw.json (définit gateway.mode="local") afin que la passerelle puisse démarrer sans exécuter l'assistant. Par défaut, le conteneur n'est pas installé comme un service systemd, vous le démarrez manuellement (voir ci-dessous). Pour une configuration de type production avec démarrage automatique et redémarrages, installez-le plutôt comme un service utilisateur systemd Quadlet :
./setup-podman.sh --quadlet
(Ou définissez OPENCLAW_PODMAN_QUADLET=1 ; utilisez --container pour installer uniquement le conteneur et le script de lancement.) Variables d'environnement optionnelles au moment de la construction (à définir avant d'exécuter setup-podman.sh) :
OPENCLAW_DOCKER_APT_PACKAGES— installe des paquets apt supplémentaires pendant la construction de l'imageOPENCLAW_EXTENSIONS— pré-installe les dépendances des extensions (noms d'extensions séparés par des espaces, p. ex.diagnostics-otel matrix)
2. Démarrer la passerelle (manuel, pour un test rapide) :
./scripts/run-openclaw-podman.sh launch
3. Assistant d'intégration (p. ex. pour ajouter des canaux ou des fournisseurs) :
./scripts/run-openclaw-podman.sh launch setup
Ouvrez ensuite http://127.0.0.1:18789/ et utilisez le jeton provenant de ~openclaw/.openclaw/.env (ou la valeur affichée par l'assistant).
Systemd (Quadlet, optionnel)
Si vous avez exécuté ./setup-podman.sh --quadlet (ou OPENCLAW_PODMAN_QUADLET=1), une unité Podman Quadlet est installée afin que la passerelle s'exécute comme un service utilisateur systemd pour l'utilisateur openclaw. Le service est activé et démarré à la fin de la configuration.
- Démarrer :
sudo systemctl --machine openclaw@ --user start openclaw.service - Arrêter :
sudo systemctl --machine openclaw@ --user stop openclaw.service - Statut :
sudo systemctl --machine openclaw@ --user status openclaw.service - Journaux :
sudo journalctl --machine openclaw@ --user -u openclaw.service -f
Le fichier quadlet se trouve à ~openclaw/.config/containers/systemd/openclaw.container. Pour modifier les ports ou les variables d'environnement, éditez ce fichier (ou le .env qu'il source), puis exécutez sudo systemctl --machine openclaw@ --user daemon-reload et redémarrez le service. Au démarrage, le service démarre automatiquement si le lingering est activé pour openclaw (la configuration le fait si loginctl est disponible). Pour ajouter quadlet après une configuration initiale qui ne l'utilisait pas, ré-exécutez : ./setup-podman.sh --quadlet.
L'utilisateur openclaw (non-login)
setup-podman.sh crée un utilisateur système dédié openclaw :
-
Shell :
nologin— pas de connexion interactive ; réduit la surface d'attaque. -
Répertoire personnel : p. ex.
/home/openclaw— contient~/.openclaw(configuration, espace de travail) et le script de lancementrun-openclaw-podman.sh. -
Podman Rootless : L'utilisateur doit avoir une plage subuid et subgid. De nombreuses distributions les attribuent automatiquement lors de la création de l'utilisateur. Si la configuration affiche un avertissement, ajoutez des lignes dans
/etc/subuidet/etc/subgid:Copier
openclaw:100000:65536Puis démarrez la passerelle en tant que cet utilisateur (p. ex. depuis cron ou systemd) :
Copier
sudo -u openclaw /home/openclaw/run-openclaw-podman.sh sudo -u openclaw /home/openclaw/run-openclaw-podman.sh setup -
Configuration : Seuls
openclawet root peuvent accéder à/home/openclaw/.openclaw. Pour éditer la configuration : utilisez l'interface de contrôle une fois la passerelle en cours d'exécution, ousudo -u openclaw $EDITOR /home/openclaw/.openclaw/openclaw.json.
Environnement et configuration
- Jeton : Stocké dans
~openclaw/.openclaw/.envsousOPENCLAW_GATEWAY_TOKEN.setup-podman.shetrun-openclaw-podman.shle génèrent s'il est manquant (utiliseopenssl,python3, ouod). - Optionnel : Dans ce
.env, vous pouvez définir les clés des fournisseurs (p. ex.GROQ_API_KEY,OLLAMA_API_KEY) et d'autres variables d'environnement OpenClaw. - Ports hôte : Par défaut, le script mappe
18789(passerelle) et18790(pont). Remplacez le mappage de port hôte avecOPENCLAW_PODMAN_GATEWAY_HOST_PORTetOPENCLAW_PODMAN_BRIDGE_HOST_PORTlors du lancement. - Liaison de la passerelle : Par défaut,
run-openclaw-podman.shdémarre la passerelle avec--bind loopbackpour un accès local sécurisé. Pour exposer sur le réseau local, définissezOPENCLAW_GATEWAY_BIND=lanet configurezgateway.controlUi.allowedOrigins(ou activez explicitement le fallback de l'en-tête hôte) dansopenclaw.json. - Chemins : La configuration hôte et l'espace de travail sont par défaut
~openclaw/.openclawet~openclaw/.openclaw/workspace. Remplacez les chemins hôte utilisés par le script de lancement avecOPENCLAW_CONFIG_DIRetOPENCLAW_WORKSPACE_DIR.
Modèle de stockage
- Données hôte persistantes :
OPENCLAW_CONFIG_DIRetOPENCLAW_WORKSPACE_DIRsont montés en bind dans le conteneur et conservent l'état sur l'hôte. - Sandbox tmpfs éphémère : si vous activez
agents.defaults.sandbox, les conteneurs de sandbox d'outils montenttmpfssur/tmp,/var/tmp, et/run. Ces chemins sont en mémoire et disparaissent avec le conteneur de sandbox ; la configuration du conteneur Podman de niveau supérieur n'ajoute pas ses propres montages tmpfs. - Points chauds de croissance du disque : les principaux chemins à surveiller sont
media/,agents/<agentId>/sessions/sessions.json, les fichiers JSONL de transcription,cron/runs/*.jsonl, et les journaux de fichiers rotatifs sous/tmp/openclaw/(ou votrelogging.fileconfiguré).
setup-podman.sh met maintenant en attente l'image tar dans un répertoire temporaire privé et affiche le répertoire de base choisi pendant la configuration. Pour les exécutions non-root, il n'accepte TMPDIR que lorsque cette base est sûre à utiliser ; sinon, il revient à /var/tmp, puis /tmp. Le tar sauvegardé reste propriétaire uniquement et est transmis en flux dans le podman load de l'utilisateur cible, de sorte que les répertoires temporaires privés de l'appelant ne bloquent pas la configuration.
Commandes utiles
- Journaux : Avec quadlet :
sudo journalctl --machine openclaw@ --user -u openclaw.service -f. Avec le script :sudo -u openclaw podman logs -f openclaw - Arrêter : Avec quadlet :
sudo systemctl --machine openclaw@ --user stop openclaw.service. Avec le script :sudo -u openclaw podman stop openclaw - Redémarrer : Avec quadlet :
sudo systemctl --machine openclaw@ --user start openclaw.service. Avec le script : ré-exécutez le script de lancement oupodman start openclaw - Supprimer le conteneur :
sudo -u openclaw podman rm -f openclaw— la configuration et l'espace de travail sur l'hôte sont conservés
Dépannage
- Permission refusée (EACCES) sur la configuration ou les profils d'authentification : Le conteneur utilise par défaut
--userns=keep-idet s'exécute avec le même uid/gid que l'utilisateur hôte exécutant le script. Assurez-vous que vosOPENCLAW_CONFIG_DIRetOPENCLAW_WORKSPACE_DIRhôtes appartiennent à cet utilisateur. - Démarrage de la passerelle bloqué (manque
gateway.mode=local) : Assurez-vous que~openclaw/.openclaw/openclaw.jsonexiste et définitgateway.mode="local".setup-podman.shcrée ce fichier s'il est manquant. - Podman Rootless échoue pour l'utilisateur openclaw : Vérifiez que
/etc/subuidet/etc/subgidcontiennent une ligne pouropenclaw(p. ex.openclaw:100000:65536). Ajoutez-la si elle est manquante et redémarrez. - Nom de conteneur déjà utilisé : Le script de lancement utilise
podman run --replace, donc le conteneur existant est remplacé lorsque vous redémarrez. Pour nettoyer manuellement :podman rm -f openclaw. - Script introuvable lors de l'exécution en tant qu'openclaw : Assurez-vous que
setup-podman.sha été exécuté afin querun-openclaw-podman.shsoit copié dans le répertoire personnel d'openclaw (p. ex./home/openclaw/run-openclaw-podman.sh). - Service Quadlet introuvable ou échoue à démarrer : Exécutez
sudo systemctl --machine openclaw@ --user daemon-reloadaprès avoir modifié le fichier.container. Quadlet nécessite cgroups v2 :podman info --format '{{.Host.CgroupsVersion}}'devrait afficher2.
Optionnel : exécuter en tant que votre propre utilisateur
Pour exécuter la passerelle en tant que votre utilisateur normal (pas d'utilisateur openclaw dédié) : construisez l'image, créez ~/.openclaw/.env avec OPENCLAW_GATEWAY_TOKEN, et exécutez le conteneur avec --userns=keep-id et des montages vers votre ~/.openclaw. Le script de lancement est conçu pour le flux utilisateur openclaw ; pour une configuration mono-utilisateur, vous pouvez plutôt exécuter la commande podman run du script manuellement, en pointant la configuration et l'espace de travail vers votre répertoire personnel. Recommandé pour la plupart des utilisateurs : utilisez setup-podman.sh et exécutez en tant qu'utilisateur openclaw afin que la configuration et le processus soient isolés.