Files
prefect-deployment/docker-compose.yml

93 lines
2.9 KiB
YAML

services:
# === TAILSCALE ===
tailscale:
image: tailscale/tailscale:latest
container_name: prefect-tailscale
hostname: prefect
environment:
- TS_AUTHKEY=${TS_AUTHKEY}
- TS_STATE_DIR=/var/lib/tailscale
- TS_SERVE_CONFIG=/config/serve-config.json
volumes:
- tailscale-state:/var/lib/tailscale
- /opt/prefect/tailscale/serve-config.json:/config/serve-config.json:ro
cap_add:
- NET_ADMIN
- SYS_MODULE
restart: unless-stopped
# === REDIS (messaging) ===
redis:
image: redis:7-alpine
container_name: prefect-redis
command: redis-server --appendonly yes
volumes:
- redis-data:/data
restart: unless-stopped
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 3
# === PREFECT SERVER ===
prefect-server:
image: prefecthq/prefect:3-latest
container_name: prefect-server
network_mode: service:tailscale
depends_on:
tailscale:
condition: service_started
redis:
condition: service_healthy
environment:
- PREFECT_API_DATABASE_CONNECTION_URL=postgresql+asyncpg://${DB_USER}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/prefect
- PREFECT_SERVER_API_HOST=0.0.0.0
- PREFECT_SERVER_API_PORT=4200
- PREFECT_MESSAGING_BROKER=prefect_redis.messaging
- PREFECT_MESSAGING_CACHE=prefect_redis.messaging
- PREFECT_REDIS_MESSAGING_HOST=redis
- PREFECT_REDIS_MESSAGING_PORT=6379
- PREFECT_REDIS_MESSAGING_DB=0
- PREFECT_UI_API_URL=https://prefect.taila5ad8.ts.net/api
command: prefect server start --no-services
restart: unless-stopped
# === PREFECT BACKGROUND SERVICES ===
prefect-services:
image: prefecthq/prefect:3-latest
container_name: prefect-services
depends_on:
- prefect-server
- redis
environment:
- PREFECT_API_DATABASE_CONNECTION_URL=postgresql+asyncpg://${DB_USER}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/prefect
- PREFECT_MESSAGING_BROKER=prefect_redis.messaging
- PREFECT_MESSAGING_CACHE=prefect_redis.messaging
- PREFECT_REDIS_MESSAGING_HOST=redis
- PREFECT_REDIS_MESSAGING_PORT=6379
- PREFECT_REDIS_MESSAGING_DB=0
command: prefect server services start
restart: unless-stopped
# === PREFECT WORKER - PostgreSQL Backup ===
prefect-worker-pg-backup:
image: gitea.arnodo.fr/damien/prefect-worker-pg-backup:latest
container_name: prefect-worker-pg-backup
network_mode: service:tailscale
depends_on:
- prefect-server
environment:
# Prefect API connection (via Tailscale)
- PREFECT_API_URL=http://localhost:4200/api
# S3 credentials for Garage
- AWS_ACCESS_KEY_ID=${S3_ACCESS_KEY}
- AWS_SECRET_ACCESS_KEY=${S3_SECRET_KEY}
- AWS_ENDPOINT_URL=${S3_ENDPOINT_URL}
command: prefect worker start --pool pg-backup-pool --type process
restart: unless-stopped
volumes:
tailscale-state:
redis-data: