Analytics cookies only (Google Analytics, PostHog). No ad networks, no cross-site tracking. See our privacy policy.
Self-host Kestra
updated Oct 2026deployed by usprices checked · Jul 2026Install verified on Ubuntu 26.04 · Oct 2026 · how we test
We earn commissions when you shop through the links below. Full disclosure →
An event-driven orchestration platform where workflows are declared in YAML and run by a Java server with a web UI, a scheduler and workers, with plugins for scripts, databases, cloud services and more. The open-source core is Apache-2.0 and runs standalone against PostgreSQL; the Enterprise Edition (RBAC, policies, worker groups and more) is a separate image pulled from Kestra's private registry.
Runs on a VPS from $23/mo (Kamatera 8GB, 8 GB RAM) · prices checked Sep 2026
Our recommendation
Pick Kestra when your automations are pipelines rather than glue: workflows are YAML files with triggers, inputs and tasks, run by a Java server that gives you a web UI, a scheduler, workers and an execution log, with plugins for scripts, SQL, cloud services and more. The open-source core is Apache-2.0; the Enterprise Edition (RBAC, policies, worker groups, promotion between instances) is a separate image on Kestra's private registry. Our snippet is upstream's compose file with the image pinned and the database password generated: a standalone server beside PostgreSQL, with the Docker socket mounted so script tasks can run in containers. Upstream says Kestra needs at least 2 vCPUs and 4 GiB of memory, which is our documented floor. Against the catalog's other workflow tools, Kestra is the declarative, data-engineering-shaped one: n8n, Node-RED and Activepieces are visual integration builders, Windmill is code-first scripts and apps, and Huginn is agent-based scraping and alerting.
What you need
Any VPS with at least 4096 MB of RAM
A domain you control — most self-hosted setups need HTTPS in front of them
About an afternoon — budget time for troubleshooting
Kestra's compose file and Docker docs are candid about what is development-only:
non-negotiableThe compose file runs the container as root so it can use the Docker socket, and upstream's own comment says that is intended for development; its base image runs without root. Script tasks need Docker-in-Docker, which some platforms (upstream names AWS Fargate) do not support, and for production upstream recommends Kubernetes or a virtual machine.
non-negotiableThe sample leaves basic-auth commented out and ships a fixed database password; our snippet generates the password but, like upstream, does not enable authentication. Configure kestra.server.basic-auth before exposing the port, pass credentials through environment variables rather than clear text in config as the security docs say, and never publish the management port 8081, which upstream describes as unauthenticated and sensitive.
non-negotiableTags matter: latest is a rolling non-LTS tag whose support ends with the next stable release, latest-lts moves roughly every six months, vX.Y floats across patches, and vX.Y.Z is immutable, which upstream calls best for locked-down production. -slim images bundle no plugins and auto-install them when a flow needs them; -no-plugins is a deprecated alias. Upstream's file also sets pull_policy: always, which our pinned version drops.
non-negotiableFlow definitions, executions and logs live in PostgreSQL and task outputs in the /app/storage volume; back up both. Upstream's troubleshooting note pins the PostgreSQL image to the major that initialised an existing data directory, so do not bump the database image under a live volume without a migration.