Prefect
Prefect is an open-source workflow orchestration platform for building, scheduling, monitoring, and managing data pipelines and Python workflows.
Configuration
version: "3.8"
services:
prefect:
image: prefecthq/prefect:3.7.5-python3.12
restart: unless-stopped
depends_on:
prefect-postgres:
condition: service_healthy
prefect-redis:
condition: service_healthy
environment:
- PREFECT_API_DATABASE_CONNECTION_URL=postgresql+asyncpg://prefect:${POSTGRES_PASSWORD}@prefect-postgres:5432/prefect
- PREFECT_SERVER_API_HOST=0.0.0.0
- PREFECT_SERVER_UI_API_URL=https://${PREFECT_DOMAIN}/api
- PREFECT_MESSAGING_BROKER=prefect_redis.messaging
- PREFECT_MESSAGING_CACHE=prefect_redis.messaging
- PREFECT_REDIS_MESSAGING_HOST=prefect-redis
- PREFECT_REDIS_MESSAGING_PORT=6379
- PREFECT_REDIS_MESSAGING_DB=0
command: prefect server start --no-services
expose:
- 4200
healthcheck:
test:
[
"CMD",
"python",
"-c",
"import urllib.request as u; u.urlopen('http://localhost:4200/api/health', timeout=1)",
]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
prefect-services:
image: prefecthq/prefect:3.7.5-python3.12
restart: unless-stopped
depends_on:
prefect:
condition: service_healthy
environment:
- PREFECT_API_DATABASE_CONNECTION_URL=postgresql+asyncpg://prefect:${POSTGRES_PASSWORD}@prefect-postgres:5432/prefect
- PREFECT_MESSAGING_BROKER=prefect_redis.messaging
- PREFECT_MESSAGING_CACHE=prefect_redis.messaging
- PREFECT_REDIS_MESSAGING_HOST=prefect-redis
- PREFECT_REDIS_MESSAGING_PORT=6379
- PREFECT_REDIS_MESSAGING_DB=0
command: prefect server services start
prefect-worker:
image: prefecthq/prefect:3.7.5-python3.12
restart: unless-stopped
depends_on:
prefect:
condition: service_healthy
environment:
- PREFECT_API_URL=http://prefect:4200/api
command: prefect worker start --pool local-pool
prefect-postgres:
image: postgres:14-alpine
restart: unless-stopped
environment:
- POSTGRES_USER=prefect
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_DB=prefect
volumes:
- prefect-postgres-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U prefect -d prefect"]
interval: 5s
timeout: 5s
retries: 5
prefect-redis:
image: redis:7.2-alpine
restart: unless-stopped
volumes:
- prefect-redis-data:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 5s
timeout: 5s
retries: 5
volumes:
prefect-postgres-data:
prefect-redis-data:[variables]
main_domain = "${domain}"
postgres_password = "${password:32}"
[config]
env = [
"PREFECT_DOMAIN=${main_domain}",
"POSTGRES_PASSWORD=${postgres_password}",
]
mounts = []
[[config.domains]]
serviceName = "prefect"
port = 4200
host = "${main_domain}"Base64
To import this template in Dokploy: create a Compose service → Advanced → Base64 import and paste the content below:
ewogICJjb21wb3NlIjogInZlcnNpb246IFwiMy44XCJcblxuc2VydmljZXM6XG4gIHByZWZlY3Q6XG4gICAgaW1hZ2U6IHByZWZlY3RocS9wcmVmZWN0OjMuNy41LXB5dGhvbjMuMTJcbiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZFxuICAgIGRlcGVuZHNfb246XG4gICAgICBwcmVmZWN0LXBvc3RncmVzOlxuICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeVxuICAgICAgcHJlZmVjdC1yZWRpczpcbiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHlcbiAgICBlbnZpcm9ubWVudDpcbiAgICAgIC0gUFJFRkVDVF9BUElfREFUQUJBU0VfQ09OTkVDVElPTl9VUkw9cG9zdGdyZXNxbCthc3luY3BnOi8vcHJlZmVjdDoke1BPU1RHUkVTX1BBU1NXT1JEfUBwcmVmZWN0LXBvc3RncmVzOjU0MzIvcHJlZmVjdFxuICAgICAgLSBQUkVGRUNUX1NFUlZFUl9BUElfSE9TVD0wLjAuMC4wXG4gICAgICAtIFBSRUZFQ1RfU0VSVkVSX1VJX0FQSV9VUkw9aHR0cHM6Ly8ke1BSRUZFQ1RfRE9NQUlOfS9hcGlcbiAgICAgIC0gUFJFRkVDVF9NRVNTQUdJTkdfQlJPS0VSPXByZWZlY3RfcmVkaXMubWVzc2FnaW5nXG4gICAgICAtIFBSRUZFQ1RfTUVTU0FHSU5HX0NBQ0hFPXByZWZlY3RfcmVkaXMubWVzc2FnaW5nXG4gICAgICAtIFBSRUZFQ1RfUkVESVNfTUVTU0FHSU5HX0hPU1Q9cHJlZmVjdC1yZWRpc1xuICAgICAgLSBQUkVGRUNUX1JFRElTX01FU1NBR0lOR19QT1JUPTYzNzlcbiAgICAgIC0gUFJFRkVDVF9SRURJU19NRVNTQUdJTkdfREI9MFxuICAgIGNvbW1hbmQ6IHByZWZlY3Qgc2VydmVyIHN0YXJ0IC0tbm8tc2VydmljZXNcbiAgICBleHBvc2U6XG4gICAgICAtIDQyMDBcbiAgICBoZWFsdGhjaGVjazpcbiAgICAgIHRlc3Q6XG4gICAgICAgIFtcbiAgICAgICAgICBcIkNNRFwiLFxuICAgICAgICAgIFwicHl0aG9uXCIsXG4gICAgICAgICAgXCItY1wiLFxuICAgICAgICAgIFwiaW1wb3J0IHVybGxpYi5yZXF1ZXN0IGFzIHU7IHUudXJsb3BlbignaHR0cDovL2xvY2FsaG9zdDo0MjAwL2FwaS9oZWFsdGgnLCB0aW1lb3V0PTEpXCIsXG4gICAgICAgIF1cbiAgICAgIGludGVydmFsOiAzMHNcbiAgICAgIHRpbWVvdXQ6IDEwc1xuICAgICAgcmV0cmllczogM1xuICAgICAgc3RhcnRfcGVyaW9kOiA2MHNcblxuICBwcmVmZWN0LXNlcnZpY2VzOlxuICAgIGltYWdlOiBwcmVmZWN0aHEvcHJlZmVjdDozLjcuNS1weXRob24zLjEyXG4gICAgcmVzdGFydDogdW5sZXNzLXN0b3BwZWRcbiAgICBkZXBlbmRzX29uOlxuICAgICAgcHJlZmVjdDpcbiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHlcbiAgICBlbnZpcm9ubWVudDpcbiAgICAgIC0gUFJFRkVDVF9BUElfREFUQUJBU0VfQ09OTkVDVElPTl9VUkw9cG9zdGdyZXNxbCthc3luY3BnOi8vcHJlZmVjdDoke1BPU1RHUkVTX1BBU1NXT1JEfUBwcmVmZWN0LXBvc3RncmVzOjU0MzIvcHJlZmVjdFxuICAgICAgLSBQUkVGRUNUX01FU1NBR0lOR19CUk9LRVI9cHJlZmVjdF9yZWRpcy5tZXNzYWdpbmdcbiAgICAgIC0gUFJFRkVDVF9NRVNTQUdJTkdfQ0FDSEU9cHJlZmVjdF9yZWRpcy5tZXNzYWdpbmdcbiAgICAgIC0gUFJFRkVDVF9SRURJU19NRVNTQUdJTkdfSE9TVD1wcmVmZWN0LXJlZGlzXG4gICAgICAtIFBSRUZFQ1RfUkVESVNfTUVTU0FHSU5HX1BPUlQ9NjM3OVxuICAgICAgLSBQUkVGRUNUX1JFRElTX01FU1NBR0lOR19EQj0wXG4gICAgY29tbWFuZDogcHJlZmVjdCBzZXJ2ZXIgc2VydmljZXMgc3RhcnRcblxuICBwcmVmZWN0LXdvcmtlcjpcbiAgICBpbWFnZTogcHJlZmVjdGhxL3ByZWZlY3Q6My43LjUtcHl0aG9uMy4xMlxuICAgIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkXG4gICAgZGVwZW5kc19vbjpcbiAgICAgIHByZWZlY3Q6XG4gICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5XG4gICAgZW52aXJvbm1lbnQ6XG4gICAgICAtIFBSRUZFQ1RfQVBJX1VSTD1odHRwOi8vcHJlZmVjdDo0MjAwL2FwaVxuICAgIGNvbW1hbmQ6IHByZWZlY3Qgd29ya2VyIHN0YXJ0IC0tcG9vbCBsb2NhbC1wb29sXG5cbiAgcHJlZmVjdC1wb3N0Z3JlczpcbiAgICBpbWFnZTogcG9zdGdyZXM6MTQtYWxwaW5lXG4gICAgcmVzdGFydDogdW5sZXNzLXN0b3BwZWRcbiAgICBlbnZpcm9ubWVudDpcbiAgICAgIC0gUE9TVEdSRVNfVVNFUj1wcmVmZWN0XG4gICAgICAtIFBPU1RHUkVTX1BBU1NXT1JEPSR7UE9TVEdSRVNfUEFTU1dPUkR9XG4gICAgICAtIFBPU1RHUkVTX0RCPXByZWZlY3RcbiAgICB2b2x1bWVzOlxuICAgICAgLSBwcmVmZWN0LXBvc3RncmVzLWRhdGE6L3Zhci9saWIvcG9zdGdyZXNxbC9kYXRhXG4gICAgaGVhbHRoY2hlY2s6XG4gICAgICB0ZXN0OiBbXCJDTUQtU0hFTExcIiwgXCJwZ19pc3JlYWR5IC1VIHByZWZlY3QgLWQgcHJlZmVjdFwiXVxuICAgICAgaW50ZXJ2YWw6IDVzXG4gICAgICB0aW1lb3V0OiA1c1xuICAgICAgcmV0cmllczogNVxuXG4gIHByZWZlY3QtcmVkaXM6XG4gICAgaW1hZ2U6IHJlZGlzOjcuMi1hbHBpbmVcbiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZFxuICAgIHZvbHVtZXM6XG4gICAgICAtIHByZWZlY3QtcmVkaXMtZGF0YTovZGF0YVxuICAgIGhlYWx0aGNoZWNrOlxuICAgICAgdGVzdDogW1wiQ01EXCIsIFwicmVkaXMtY2xpXCIsIFwicGluZ1wiXVxuICAgICAgaW50ZXJ2YWw6IDVzXG4gICAgICB0aW1lb3V0OiA1c1xuICAgICAgcmV0cmllczogNVxuXG52b2x1bWVzOlxuICBwcmVmZWN0LXBvc3RncmVzLWRhdGE6XG4gIHByZWZlY3QtcmVkaXMtZGF0YTpcbiIsCiAgImNvbmZpZyI6ICJbdmFyaWFibGVzXVxubWFpbl9kb21haW4gPSBcIiR7ZG9tYWlufVwiXG5wb3N0Z3Jlc19wYXNzd29yZCA9IFwiJHtwYXNzd29yZDozMn1cIlxuXG5bY29uZmlnXVxuZW52ID0gW1xuICBcIlBSRUZFQ1RfRE9NQUlOPSR7bWFpbl9kb21haW59XCIsXG4gIFwiUE9TVEdSRVNfUEFTU1dPUkQ9JHtwb3N0Z3Jlc19wYXNzd29yZH1cIixcbl1cbm1vdW50cyA9IFtdXG5cbltbY29uZmlnLmRvbWFpbnNdXVxuc2VydmljZU5hbWUgPSBcInByZWZlY3RcIlxucG9ydCA9IDQyMDBcbmhvc3QgPSBcIiR7bWFpbl9kb21haW59XCJcbiIKfQ==Links
Tags
automation, workflow, data
Version: 3.7.5-python3.12