Por qué autoalojar Kestra en un VPS
Kestra destaca por su enfoque declarativo: un flujo de trabajo (flow) es un archivo YAML versionable, con tareas encadenadas, condiciones, bucles y disparadores. Este enfoque Everything-as-Code convence a los equipos de datos que quieren Git, revisión de código y reproducibilidad, sin la pesadez de escribir DAG en Python. Autoalojar Kestra en un VPS cobra todo su sentido para los pipelines que leen y escriben en sus bases de datos: los procesos se ejecutan allí donde viven sus datos, sin tránsito externo. Kestra también puede lanzar tareas en contenedores Docker aislados, lo que hace especialmente adecuado un VPS con un demonio Docker accesible. La interfaz web ofrece un editor de flows, una vista topológica y un seguimiento completo de las ejecuciones.
Beneficios concretos del autoalojamiento
- Flujos en YAML versionados en Git, revisión de código y reproducibilidad total.
- Plugins completos: bases SQL, S3, scripts Python/Bash, contenedores Docker, peticiones HTTP.
- Disparadores variados: cron, evento, webhook, detección de archivos.
- Ejecución lo más cerca posible de las bases de datos internas, sin tránsito externo.
- Interfaz web con editor visual, vista topológica y logs de ejecución detallados.
- Sin coste por ejecución: solo su VPS limita el volumen de procesos.
Requisitos técnicos
Kestra necesita PostgreSQL como backend (en su versión más sencilla utiliza una base interna, pero PostgreSQL es lo recomendado en producción). Cuente con 2 vCPU y 4 GB de RAM como mínimo, porque la JVM de Kestra consume memoria; apunte a 8 GB si sus flows lanzan tareas Docker o scripts de datos pesados. Prevea 30 GB de disco, Docker y Docker Compose, y un dominio (orchestrator.votredomaine.com). Punto importante: para que Kestra lance tareas en contenedores, monte el socket de Docker (/var/run/docker.sock) dentro del contenedor de Kestra.
Desplegar Kestra con Docker Compose
Preparar el VPS
Instale Docker (
curl -fsSL https://get.docker.com | sh) y cree/opt/kestra. Compruebe la RAM disponible: a la JVM le gusta la memoria, prevea al menos 4 GB realmente libres confree -h.Escribir el docker-compose
Recupere el compose oficial de Kestra, que incluye PostgreSQL. Declare el servicio
kestracon la imagenkestra/kestra:latest, el comandoserver standalone, y monte/var/run/docker.sock:/var/run/docker.sockpara activar las tareas en contenedores.Configurar el backend PostgreSQL
En la sección
configurationdel compose, apuntekestra.datasourcesa PostgreSQL con la URL JDBC, el usuario y la contraseña. Defina tambiénkestra.url: https://orchestrator.votredomaine.com/para que los enlaces de la interfaz sean correctos.Arrancar Kestra
Ejecute
docker compose up -d. En el primer arranque, Kestra crea su esquema en PostgreSQL. Vigiledocker compose logs -f kestrahasta el mensaje que indica que el servidor está listo en el puerto 8080.Reverse proxy y HTTPS
Ponga Caddy delante:
orchestrator.votredomaine.com { reverse_proxy localhost:8080 }. El HTTPS protege el acceso al editor de flows y a los logs de ejecución, que pueden contener datos sensibles.Crear un primer flow en YAML
En la interfaz, cree un flow de prueba con una tarea
io.kestra.plugin.core.log.Logy añada después un disparador cronschedule. Valide que una ejecución programada se lanza y aparece en la línea de tiempo. Versione luego ese YAML en Git.
Ajuste explícitamente la memoria de la JVM para evitar sorpresas en un VPS: pase JAVA_OPTS=-Xmx2g (o la mitad de su RAM) en el entorno del contenedor de Kestra. Sin ese límite, la JVM puede intentar reservar demasiado heap y provocar un OOM kill por parte del núcleo Linux. Para los pipelines de datos, utilice el tipo de tarea Docker en lugar de Process: cada proceso se ejecuta en su propio contenedor con sus dependencias, lo que evita ensuciar el VPS y garantiza la reproducibilidad.
La documentación oficial
Para la configuración avanzada y las opciones propias de la herramienta, consulte la documentación oficial de Kestra. Esta guía cubre la puesta en línea en un VPS; la documentación del editor sigue siendo la referencia para los ajustes finos, las actualizaciones mayores y los casos de uso específicos.