Podman
Ejecuta la puerta de enlace OpenClaw en un contenedor Podman sin privilegios de root. Utiliza la misma imagen que Docker (construida desde el Dockerfile del repositorio).
Requisitos
- Podman (sin privilegios de root)
- Sudo para configuración única (crear usuario, construir imagen)
Inicio rápido
1. Configuración única (desde la raíz del repositorio; crea usuario, construye imagen, instala script de lanzamiento):
./setup-podman.sh
Esto también crea un ~openclaw/.openclaw/openclaw.json mínimo (establece gateway.mode="local") para que la puerta de enlace pueda iniciarse sin ejecutar el asistente. Por defecto, el contenedor no se instala como un servicio systemd, lo inicias manualmente (ver más abajo). Para una configuración tipo producción con inicio automático y reinicios, instálalo como un servicio de usuario systemd Quadlet:
./setup-podman.sh --quadlet
(O establece OPENCLAW_PODMAN_QUADLET=1; usa --container para instalar solo el contenedor y el script de lanzamiento). Variables de entorno opcionales en tiempo de construcción (establécelas antes de ejecutar setup-podman.sh):
OPENCLAW_DOCKER_APT_PACKAGES— instala paquetes apt adicionales durante la construcción de la imagenOPENCLAW_EXTENSIONS— pre-instala dependencias de extensiones (nombres de extensiones separados por espacios, ej.diagnostics-otel matrix)
2. Iniciar puerta de enlace (manual, para pruebas rápidas):
./scripts/run-openclaw-podman.sh launch
3. Asistente de incorporación (ej. para añadir canales o proveedores):
./scripts/run-openclaw-podman.sh launch setup
Luego abre http://127.0.0.1:18789/ y usa el token de ~openclaw/.openclaw/.env (o el valor impreso por el asistente).
Systemd (Quadlet, opcional)
Si ejecutaste ./setup-podman.sh --quadlet (o OPENCLAW_PODMAN_QUADLET=1), se instala una unidad Podman Quadlet para que la puerta de enlace se ejecute como un servicio de usuario systemd para el usuario openclaw. El servicio se habilita e inicia al final de la configuración.
- Iniciar:
sudo systemctl --machine openclaw@ --user start openclaw.service - Detener:
sudo systemctl --machine openclaw@ --user stop openclaw.service - Estado:
sudo systemctl --machine openclaw@ --user status openclaw.service - Registros:
sudo journalctl --machine openclaw@ --user -u openclaw.service -f
El archivo quadlet reside en ~openclaw/.config/containers/systemd/openclaw.container. Para cambiar puertos o variables de entorno, edita ese archivo (o el .env que fuente), luego sudo systemctl --machine openclaw@ --user daemon-reload y reinicia el servicio. Al arrancar, el servicio se inicia automáticamente si está habilitado el "lingering" para openclaw (la configuración hace esto cuando loginctl está disponible). Para añadir quadlet después de una configuración inicial que no lo usó, vuelve a ejecutar: ./setup-podman.sh --quadlet.
El usuario openclaw (sin inicio de sesión)
setup-podman.sh crea un usuario de sistema dedicado openclaw:
-
Shell:
nologin— sin inicio de sesión interactivo; reduce la superficie de ataque. -
Home: ej.
/home/openclaw— contiene~/.openclaw(configuración, espacio de trabajo) y el script de lanzamientorun-openclaw-podman.sh. -
Podman sin root: El usuario debe tener un rango de subuid y subgid. Muchas distribuciones los asignan automáticamente cuando se crea el usuario. Si la configuración imprime una advertencia, añade líneas a
/etc/subuidy/etc/subgid:Copiar
openclaw:100000:65536Luego inicia la puerta de enlace como ese usuario (ej. desde cron o systemd):
Copiar
sudo -u openclaw /home/openclaw/run-openclaw-podman.sh sudo -u openclaw /home/openclaw/run-openclaw-podman.sh setup -
Configuración: Solo
openclawy root pueden acceder a/home/openclaw/.openclaw. Para editar la configuración: usa la Interfaz de Control una vez que la puerta de enlace esté en ejecución, osudo -u openclaw $EDITOR /home/openclaw/.openclaw/openclaw.json.
Entorno y configuración
- Token: Almacenado en
~openclaw/.openclaw/.envcomoOPENCLAW_GATEWAY_TOKEN.setup-podman.shyrun-openclaw-podman.shlo generan si falta (usaopenssl,python3, ood). - Opcional: En ese
.envpuedes establecer claves de proveedores (ej.GROQ_API_KEY,OLLAMA_API_KEY) y otras variables de entorno de OpenClaw. - Puertos del host: Por defecto, el script mapea
18789(puerta de enlace) y18790(bridge). Sobrescribe el mapeo de puertos del host conOPENCLAW_PODMAN_GATEWAY_HOST_PORTyOPENCLAW_PODMAN_BRIDGE_HOST_PORTal lanzar. - Vinculación de la puerta de enlace: Por defecto,
run-openclaw-podman.shinicia la puerta de enlace con--bind loopbackpara un acceso local seguro. Para exponer en la LAN, estableceOPENCLAW_GATEWAY_BIND=lany configuragateway.controlUi.allowedOrigins(o habilita explícitamente la fallback del encabezado del host) enopenclaw.json. - Rutas: La configuración y el espacio de trabajo del host por defecto son
~openclaw/.openclawy~openclaw/.openclaw/workspace. Sobrescribe las rutas del host utilizadas por el script de lanzamiento conOPENCLAW_CONFIG_DIRyOPENCLAW_WORKSPACE_DIR.
Modelo de almacenamiento
- Datos persistentes en el host:
OPENCLAW_CONFIG_DIRyOPENCLAW_WORKSPACE_DIRse montan en el contenedor y retienen el estado en el host. - Tmpfs efímero del sandbox: si habilitas
agents.defaults.sandbox, los contenedores sandbox de herramientas montantmpfsen/tmp,/var/tmp, y/run. Esas rutas están respaldadas en memoria y desaparecen con el contenedor sandbox; la configuración del contenedor Podman de nivel superior no añade sus propios montajes tmpfs. - Puntos calientes de crecimiento del disco: las rutas principales a vigilar son
media/,agents/<agentId>/sessions/sessions.json, archivos JSONL de transcripción,cron/runs/*.jsonl, y registros de archivos rotativos bajo/tmp/openclaw/(o tulogging.fileconfigurado).
setup-podman.sh ahora almacena provisionalmente el tar de la imagen en un directorio temporal privado e imprime el directorio base elegido durante la configuración. Para ejecuciones sin root, acepta TMPDIR solo cuando esa base es segura de usar; de lo contrario, recurre a /var/tmp, luego /tmp. El tar guardado permanece solo para el propietario y se transmite al podman load del usuario objetivo, por lo que los directorios temporales privados del llamante no bloquean la configuración.
Comandos útiles
- Registros: Con quadlet:
sudo journalctl --machine openclaw@ --user -u openclaw.service -f. Con script:sudo -u openclaw podman logs -f openclaw - Detener: Con quadlet:
sudo systemctl --machine openclaw@ --user stop openclaw.service. Con script:sudo -u openclaw podman stop openclaw - Iniciar de nuevo: Con quadlet:
sudo systemctl --machine openclaw@ --user start openclaw.service. Con script: vuelve a ejecutar el script de lanzamiento opodman start openclaw - Eliminar contenedor:
sudo -u openclaw podman rm -f openclaw— la configuración y el espacio de trabajo en el host se conservan
Solución de problemas
- Permiso denegado (EACCES) en configuración o perfiles de autenticación: El contenedor por defecto usa
--userns=keep-idy se ejecuta con el mismo uid/gid que el usuario del host que ejecuta el script. Asegúrate de que tuOPENCLAW_CONFIG_DIRyOPENCLAW_WORKSPACE_DIRen el host sean propiedad de ese usuario. - Inicio de puerta de enlace bloqueado (falta
gateway.mode=local): Asegúrate de que~openclaw/.openclaw/openclaw.jsonexista y establezcagateway.mode="local".setup-podman.shcrea este archivo si falta. - Podman sin root falla para el usuario openclaw: Verifica que
/etc/subuidy/etc/subgidcontengan una línea paraopenclaw(ej.openclaw:100000:65536). Añádela si falta y reinicia. - Nombre de contenedor en uso: El script de lanzamiento usa
podman run --replace, por lo que el contenedor existente se reemplaza cuando inicias de nuevo. Para limpiar manualmente:podman rm -f openclaw. - Script no encontrado al ejecutar como openclaw: Asegúrate de que se ejecutó
setup-podman.shpara querun-openclaw-podman.shse copie al home de openclaw (ej./home/openclaw/run-openclaw-podman.sh). - Servicio Quadlet no encontrado o falla al iniciar: Ejecuta
sudo systemctl --machine openclaw@ --user daemon-reloaddespués de editar el archivo.container. Quadlet requiere cgroups v2:podman info --format '{{.Host.CgroupsVersion}}'debería mostrar2.
Opcional: ejecutar como tu propio usuario
Para ejecutar la puerta de enlace como tu usuario normal (sin usuario openclaw dedicado): construye la imagen, crea ~/.openclaw/.env con OPENCLAW_GATEWAY_TOKEN, y ejecuta el contenedor con --userns=keep-id y montajes a tu ~/.openclaw. El script de lanzamiento está diseñado para el flujo de usuario openclaw; para una configuración de usuario único puedes en su lugar ejecutar el comando podman run del script manualmente, apuntando la configuración y el espacio de trabajo a tu home. Recomendado para la mayoría de usuarios: usa setup-podman.sh y ejecuta como el usuario openclaw para que la configuración y el proceso estén aislados.