
Deploy Kestra | (Just Updated) Workflow Orchestration, Shell and Python Tasks Work
Kestra workflow engine. Login set at deploy, data on volumes, healthcheck
postgres
Just deployed
/var/lib/postgresql
kestra
Just deployed
/app/storage
Deploy and Host Kestra on Railway
Kestra is an open-source workflow orchestration engine. Flows are declared in YAML and triggered by schedules, webhooks or events, and tasks can run shell commands, Python scripts, SQL, HTTP calls and several hundred plugins.
This template runs Kestra 1.3 from a digest-pinned official image together with a PostgreSQL 17 service, with the web UI and API on a public Railway domain and both services on volumes.
About Hosting Kestra
- The UI and API are behind a login from the first request. An admin password is generated per
deploy (
KESTRA_PASSWORD, useradmin@kestra.io). An anonymous API call returned 401; the same call with the generated credentials returned 200. - Shell and Python tasks run without Docker. Kestra's default task runner starts a container,
which needs a Docker socket that Railway does not provide. Here the shell and Python task types
default to the in-process runner, and a
Commandsflow ran to SUCCESS on a fresh deploy. - State survives redeploys. Flows, executions and logs live in PostgreSQL on a volume, and task outputs live in Kestra's internal storage on a second volume. A flow created before a redeploy and its execution history were both present after it.
- Storage is writable. Railway mounts volumes as root, and Kestra's image runs as a non-root user, so a plain mount is read-only to it. The template runs the service as root so the storage directory can be written.
- A healthcheck is set on
/ping, so a deploy that does not start is reported as failed instead of looking live.
Common Use Cases
- Scheduled data pipelines and ETL jobs defined as YAML
- Cron replacement with retries, logs and a UI
- Event and webhook driven automation across APIs
- Orchestrating Python and shell scripts without a separate scheduler
Dependencies for Kestra Hosting
- A PostgreSQL service (created by the template) for the queue and repository
- One volume for Kestra's internal storage and one for PostgreSQL (created by the template)
Deployment Dependencies
- Kestra documentation: https://kestra.io/docs
- Official image: https://hub.docker.com/r/kestra/kestra
Implementation Details
| Variable | Purpose |
|---|---|
KESTRA_PASSWORD | Password for the admin@kestra.io user, generated per deploy. |
PGPASSWORD | Password for the bundled PostgreSQL service. |
PGHOST | Private hostname of the bundled PostgreSQL service. |
Open the service's public domain and sign in with admin@kestra.io and KESTRA_PASSWORD. The
API accepts the same credentials with HTTP basic auth.
Why Deploy Kestra on Railway?
Railway is a singular platform to deploy your infrastructure stack. Railway will host your infrastructure so you don't have to deal with configuration, while allowing you to vertically and horizontally scale it.
By deploying Kestra on Railway, you are one step closer to supporting a complete full-stack application with minimal burden. Host your servers, databases, AI agents, and more on Railway.
Template Content
postgres
postgres:17.10-trixiekestra
kestra/kestra:v1.3.41RAILWAY_RUN_UID
