Files
compose-anything/src/kestra/docker-compose.yaml
T
2026-05-14 16:22:07 +08:00

121 lines
4.0 KiB
YAML

# Kestra - Event-driven Orchestration Platform
# https://github.com/kestra-io/kestra
#
# Kestra is an infinitely scalable orchestration and scheduling platform that allows
# you to declare, run, schedule, and monitor millions of workflows declaratively in code.
#
# Key Features:
# - Declarative YAML-based workflow definitions
# - Event-driven orchestration with triggers
# - Built-in scheduling and cron support
# - Support for multiple programming languages (Python, Node.js, etc.)
# - Real-time monitoring and logging
# - Plugin ecosystem for integrations
#
# Default Credentials:
# - Access UI at http://localhost:8080
# - No authentication by default (configure in production)
#
# Security Notes:
# - Configure authentication in production (basic auth, OAuth2, OIDC)
# - Use strong database passwords
# - Enable SSL/TLS in production
# - Restrict network access appropriately
#
# License: Apache-2.0 (https://github.com/kestra-io/kestra/blob/develop/LICENSE)
x-defaults: &defaults
restart: unless-stopped
logging:
driver: json-file
options:
max-size: 100m
max-file: '3'
services:
kestra:
<<: *defaults
image: ${GLOBAL_REGISTRY:-}kestra/kestra:${KESTRA_VERSION:-latest-full}
command: server standalone
ports:
- '${KESTRA_PORT_OVERRIDE:-8080}:8080'
- '${KESTRA_MANAGEMENT_PORT:-8081}:8081'
environment:
# Database configuration
- KESTRA_CONFIGURATION=datasources.postgres.url=jdbc:postgresql://postgres:5432/${POSTGRES_DB}
- KESTRA_CONFIGURATION_datasources_postgres_username=${POSTGRES_USER}
- KESTRA_CONFIGURATION_datasources_postgres_password=${POSTGRES_PASSWORD}
- KESTRA_CONFIGURATION_datasources_postgres_driverClassName=org.postgresql.Driver
# Server configuration
- KESTRA_CONFIGURATION_micronaut_server_port=8080
- KESTRA_CONFIGURATION_kestra_server_basic--auth_enabled=${KESTRA_BASIC_AUTH_ENABLED:-false}
- KESTRA_CONFIGURATION_kestra_server_basic--auth_username=${KESTRA_BASIC_AUTH_USERNAME:-admin}
- KESTRA_CONFIGURATION_kestra_server_basic--auth_password=${KESTRA_BASIC_AUTH_PASSWORD:-admin}
# Storage configuration
- KESTRA_CONFIGURATION_kestra_storage_type=local
- KESTRA_CONFIGURATION_kestra_storage_local_base--path=/app/storage
# Repository configuration
- KESTRA_CONFIGURATION_kestra_repository_type=postgres
# Queue configuration
- KESTRA_CONFIGURATION_kestra_queue_type=postgres
# Other settings
- TZ=${TZ:-UTC}
- JAVA_OPTS=${KESTRA_JAVA_OPTS:--Xmx1g}
volumes:
- kestra_data:/app/storage
- kestra_logs:/app/logs
- /var/run/docker.sock:/var/run/docker.sock:ro # For Docker task runner
depends_on:
postgres:
condition: service_healthy
healthcheck:
test: [CMD, wget, --quiet, --tries=1, --spider, 'http://localhost:8080/health']
interval: 30s
timeout: 10s
retries: 5
start_period: 60s
deploy:
resources:
limits:
cpus: '${KESTRA_CPU_LIMIT:-2.0}'
memory: '${KESTRA_MEMORY_LIMIT:-2G}'
reservations:
cpus: '${KESTRA_CPU_RESERVATION:-0.1}'
memory: '${KESTRA_MEMORY_RESERVATION:-512M}'
postgres:
<<: *defaults
image: ${GLOBAL_REGISTRY:-}postgres:${POSTGRES_VERSION:-16-alpine}
environment:
- POSTGRES_DB=${POSTGRES_DB:-kestra}
- POSTGRES_USER=${POSTGRES_USER:-kestra}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-k3str4}
- POSTGRES_INITDB_ARGS=--encoding=UTF8
- TZ=${TZ:-UTC}
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: [CMD-SHELL, 'pg_isready -U ${POSTGRES_USER:-kestra} -d ${POSTGRES_DB:-kestra}']
interval: 10s
timeout: 5s
retries: 5
deploy:
resources:
limits:
cpus: '${POSTGRES_CPU_LIMIT:-1.0}'
memory: '${POSTGRES_MEMORY_LIMIT:-1G}'
reservations:
cpus: '${POSTGRES_CPU_RESERVATION:-0.1}'
memory: '${POSTGRES_MEMORY_RESERVATION:-256M}'
volumes:
postgres_data:
kestra_data:
kestra_logs: