Playbook Runner

Configuración

Todas las variables de entorno que leen el backend y el ejecutor de Ansible.

Toda la configuración se lee de variables de entorno. En un despliegue con Docker viven en el .env junto a compose.yml, que leen todos los servicios. El backend valida sus variables al arrancar y termina con un error claro si falta alguna o tiene un formato incorrecto.

Despliegue

Las lee el propio compose.yml.

Variable Por defecto Notas
GATEWAY_PORT 4321 Puerto del host donde se publica el gateway. Si no existe, usa el antiguo FRONTEND_PORT.
ANSIBLE_IMAGE_TAG latest Etiqueta de la imagen del ejecutor.
BACKEND_IMAGE_TAG latest Etiqueta de la imagen del backend.
FRONTEND_IMAGE_TAG latest Etiqueta de la imagen del frontend.
GATEWAY_IMAGE_TAG latest Etiqueta de la imagen del gateway.
POSTGRES_DB playbook_runner Solo para el PostgreSQL incluido.
POSTGRES_USER playbook_runner Solo para el PostgreSQL incluido.
POSTGRES_PASSWORD obligatoria Solo para el PostgreSQL incluido.

Backend

Variable Obligatoria Notas
DATABASE_URL sí Cadena de conexión de PostgreSQL.
BETTER_AUTH_SECRET sí Al menos 32 caracteres. Firma las sesiones.
BETTER_AUTH_URL sí URL pública de la app, tal como la ve el navegador.
CORS_ORIGIN sí URL pública de la app.
CREDENTIALS_ENCRYPTION_KEY sí Base64 de exactamente 32 bytes. Cifra las claves privadas SSH guardadas (AES-256-GCM). Haz copia.
SERVICE_TOKEN para ejecutar Al menos 32 caracteres, el mismo valor en el ejecutor. Autentica las llamadas gRPC; sin él la app arranca pero no se puede ejecutar nada.
ANSIBLE_GRPC_TARGET no Dónde llama el backend al ejecutor. compose.yml lo fija en gateway:50050.
JOB_SCHEDULER_ENABLED no 1 (por defecto) ejecuta los jobs programados dentro del proceso; 0 desactiva el scheduler, por ejemplo si tienes varias réplicas del backend.
SEED_ADMIN_EMAIL no Primer administrador, creado al arrancar si no existe. Por defecto admin@playbook-runner.local.
SEED_ADMIN_PASSWORD no Por defecto admin1234, que se rechaza en producción.
SEED_ADMIN_NAME no Por defecto Admin.
GENERIC_OAUTH_CLIENT_ID no Las tres variables GENERIC_OAUTH_* juntas activan el SSO.
GENERIC_OAUTH_CLIENT_SECRET no Consulta Usuarios e inicio de sesión.
GENERIC_OAUTH_ISSUER no URL del issuer OIDC; el descubrimiento se añade automáticamente.
LOG_LEVEL no info por defecto.

Ejecutor de Ansible

Variable Por defecto Notas
SERVICE_TOKEN obligatoria Debe coincidir con la del backend. Vacía, se rechazan todas las llamadas.
SSH_HOST_KEY_POLICY accept-new accept-new confía en un host en el primer contacto y rechaza claves que cambian; strict solo acepta hosts que ya están en known_hosts; off desactiva la verificación y deja un aviso en el log.
MAX_CONCURRENT_RUNS 8 Procesos de Ansible permitidos a la vez (ejecuciones, scripts, comandos). Las peticiones de más se rechazan, no se encolan.
GRPC_SHUTDOWN_GRACE_S 8 Segundos que tienen las ejecuciones en curso para cancelarse cuando se para el contenedor.
GIT_TIMEOUT_S 120 Tiempo máximo de cada comando Git durante una sincronización.
GIT_MAX_REPO_MB 512 Un mirror mayor que esto se descarta y la sincronización falla.
MAX_CONCURRENT_SYNCS 2 Sincronizaciones de repositorios permitidas a la vez.
ANSIBLE_USER ansible Usuario SSH de reserva. Normalmente cada host se conecta con el usuario de su credencial.
LOG_LEVEL info

Claves de host

Con accept-new, si un host se reinstala de verdad su nueva clave se rechaza. Borra su línea de known_hosts en el volumen ansible_state y la siguiente ejecución guardará la nueva:

docker compose exec ansible ssh-keygen -f /app/state/known_hosts -R 10.0.0.12