Podman
Esegui il gateway OpenClaw in un container Podman rootless. Usa la stessa immagine di Docker (compilata dal Dockerfile del repository).
Requisiti
- Podman (rootless)
- Sudo per il setup iniziale (creazione utente, build immagine)
Avvio rapido
1. Setup iniziale (dalla root del repository; crea l’utente, compila l’immagine, installa lo script di avvio):
./setup-podman.sh
Questo crea anche un file minimale ~openclaw/.openclaw/openclaw.json (imposta gateway.mode="local") cosi il gateway puo avviarsi senza eseguire il wizard.
Per impostazione predefinita il container non viene installato come servizio systemd: lo avvii manualmente (vedi sotto). Per un setup in stile produzione con avvio automatico e riavvii, installalo come servizio utente systemd Quadlet:
./setup-podman.sh --quadlet
(Oppure imposta OPENCLAW_PODMAN_QUADLET=1; usa --container per installare solo il container e lo script di avvio.)
Variabili d’ambiente opzionali al momento della build (da impostare prima di eseguire setup-podman.sh):
OPENCLAW_DOCKER_APT_PACKAGES— installa pacchetti apt aggiuntivi durante la build dell’immagineOPENCLAW_EXTENSIONS— pre-installa le dipendenze delle estensioni (nomi separati da spazi, es.diagnostics-otel matrix)
2. Avvia il gateway (manuale, per un test rapido):
./scripts/run-openclaw-podman.sh launch
3. Wizard di onboarding (es. per aggiungere canali o provider):
./scripts/run-openclaw-podman.sh launch setup
Poi apri http://127.0.0.1:18789/ e usa il token da ~openclaw/.openclaw/.env (o il valore stampato dal setup).
Systemd (Quadlet, opzionale)
Se hai eseguito ./setup-podman.sh --quadlet (o OPENCLAW_PODMAN_QUADLET=1), viene installata un’unita Podman Quadlet cosi il gateway gira come servizio utente systemd per l’utente openclaw. Il servizio viene abilitato e avviato al termine del setup.
- Avvio:
sudo systemctl --machine openclaw@ --user start openclaw.service - Arresto:
sudo systemctl --machine openclaw@ --user stop openclaw.service - Stato:
sudo systemctl --machine openclaw@ --user status openclaw.service - Log:
sudo journalctl --machine openclaw@ --user -u openclaw.service -f
Il file quadlet si trova in ~openclaw/.config/containers/systemd/openclaw.container. Per cambiare porte o variabili d’ambiente, modifica quel file (o il .env che include), poi esegui sudo systemctl --machine openclaw@ --user daemon-reload e riavvia il servizio. Al boot, il servizio si avvia automaticamente se il lingering e abilitato per openclaw (il setup lo fa quando loginctl e disponibile).
Per aggiungere quadlet dopo un setup iniziale che non lo ha usato, riesegui: ./setup-podman.sh --quadlet.
L’utente openclaw (non-login)
setup-podman.sh crea un utente di sistema dedicato openclaw:
-
Shell:
nologin— nessun login interattivo; riduce la superficie d’attacco. -
Home: es.
/home/openclaw— contiene~/.openclaw(configurazione, workspace) e lo script di avviorun-openclaw-podman.sh. -
Podman rootless: L’utente deve avere un range subuid e subgid. Molte distribuzioni li assegnano automaticamente alla creazione dell’utente. Se il setup mostra un avviso, aggiungi le righe a
/etc/subuide/etc/subgid:openclaw:100000:65536Poi avvia il gateway come quell’utente (es. da cron o systemd):
sudo -u openclaw /home/openclaw/run-openclaw-podman.sh sudo -u openclaw /home/openclaw/run-openclaw-podman.sh setup -
Configurazione: Solo
openclawe root possono accedere a/home/openclaw/.openclaw. Per modificare la configurazione: usa la Control UI una volta che il gateway e in esecuzione, oppuresudo -u openclaw $EDITOR /home/openclaw/.openclaw/openclaw.json.
Ambiente e configurazione
- Token: Salvato in
~openclaw/.openclaw/.envcomeOPENCLAW_GATEWAY_TOKEN.setup-podman.sherun-openclaw-podman.shlo generano se mancante (usaopenssl,python3ood). - Opzionale: Nel
.envpuoi impostare chiavi provider (es.GROQ_API_KEY,OLLAMA_API_KEY) e altre variabili d’ambiente OpenClaw. - Porte host: Per impostazione predefinita lo script mappa
18789(gateway) e18790(bridge). Sovrascrivi il mapping delle porte host conOPENCLAW_PODMAN_GATEWAY_HOST_PORTeOPENCLAW_PODMAN_BRIDGE_HOST_PORTall’avvio. - Binding del gateway: Per impostazione predefinita,
run-openclaw-podman.shavvia il gateway con--bind loopbackper un accesso locale sicuro. Per esporre sulla LAN, impostaOPENCLAW_GATEWAY_BIND=lane configuragateway.controlUi.allowedOrigins(o abilita esplicitamente il fallback dell’header host) inopenclaw.json. - Percorsi: La configurazione host e il workspace usano per default
~openclaw/.openclawe~openclaw/.openclaw/workspace. Sovrascrivi i percorsi host usati dallo script di avvio conOPENCLAW_CONFIG_DIReOPENCLAW_WORKSPACE_DIR.
Modello di storage
- Dati host persistenti:
OPENCLAW_CONFIG_DIReOPENCLAW_WORKSPACE_DIRsono montati via bind nel container e mantengono lo stato sull’host. - Tmpfs sandbox effimero: se abiliti
agents.defaults.sandbox, i container sandbox degli strumenti montanotmpfssu/tmp,/var/tmpe/run. Quei percorsi sono in memoria e scompaiono con il container sandbox; il setup del container Podman principale non aggiunge mount tmpfs propri. - Hotspot di crescita disco: i percorsi principali da tenere sotto controllo sono
media/,agents/<agentId>/sessions/sessions.json, file transcript JSONL,cron/runs/*.jsonle i file di log a rotazione sotto/tmp/openclaw/(o illogging.fileconfigurato).
setup-podman.sh ora prepara il tar dell’immagine in una directory temp privata e stampa la directory base scelta durante il setup. Per esecuzioni non-root accetta TMPDIR solo quando la base e sicura da usare; altrimenti ricade su /var/tmp, poi /tmp. Il tar salvato resta riservato al proprietario e viene trasmesso in streaming nel podman load dell’utente destinatario, cosi le directory temp private del chiamante non bloccano il setup.
Comandi utili
- Log: Con quadlet:
sudo journalctl --machine openclaw@ --user -u openclaw.service -f. Con script:sudo -u openclaw podman logs -f openclaw - Arresto: Con quadlet:
sudo systemctl --machine openclaw@ --user stop openclaw.service. Con script:sudo -u openclaw podman stop openclaw - Riavvio: Con quadlet:
sudo systemctl --machine openclaw@ --user start openclaw.service. Con script: riesegui lo script di avvio opodman start openclaw - Rimozione container:
sudo -u openclaw podman rm -f openclaw— la configurazione e il workspace sull’host vengono conservati
Risoluzione problemi
- Permesso negato (EACCES) su configurazione o profili auth: Il container usa
--userns=keep-idper default e gira con lo stesso uid/gid dell’utente host che esegue lo script. Assicurati cheOPENCLAW_CONFIG_DIReOPENCLAW_WORKSPACE_DIRsull’host siano di proprieta di quell’utente. - Avvio del gateway bloccato (manca
gateway.mode=local): Assicurati che~openclaw/.openclaw/openclaw.jsonesista e impostigateway.mode="local".setup-podman.shcrea questo file se mancante. - Podman rootless fallisce per l’utente openclaw: Controlla che
/etc/subuide/etc/subgidcontengano una riga peropenclaw(es.openclaw:100000:65536). Aggiungila se mancante e riavvia. - Nome container gia in uso: Lo script di avvio usa
podman run --replace, quindi il container esistente viene sostituito quando riavvii. Per pulizia manuale:podman rm -f openclaw. - Script non trovato durante l’esecuzione come openclaw: Assicurati che
setup-podman.shsia stato eseguito, cosi cherun-openclaw-podman.shsia copiato nella home di openclaw (es./home/openclaw/run-openclaw-podman.sh). - Servizio quadlet non trovato o non si avvia: Esegui
sudo systemctl --machine openclaw@ --user daemon-reloaddopo aver modificato il file.container. Quadlet richiede cgroups v2:podman info --format '{{.Host.CgroupsVersion}}'deve mostrare2.
Opzionale: esegui come il tuo utente
Per eseguire il gateway come il tuo utente normale (senza utente openclaw dedicato): compila l’immagine, crea ~/.openclaw/.env con OPENCLAW_GATEWAY_TOKEN, ed esegui il container con --userns=keep-id e i mount verso la tua ~/.openclaw. Lo script di avvio e pensato per il flusso con l’utente openclaw; per un setup a utente singolo puoi invece eseguire manualmente il comando podman run dallo script, puntando configurazione e workspace verso la tua home. Consigliato per la maggior parte degli utenti: usa setup-podman.sh ed esegui come l’utente openclaw cosi configurazione e processo sono isolati.