x-minio-credentials: &minio-credentials MINIO_ENDPOINT: http://minio:9000 MINIO_ACCESS_KEY: minioadmin MINIO_SECRET_KEY: minioadmin123 MINIO_REGION: us-east-1 x-postgres-credentials: &postgres-credentials POSTGRES_USER: prefect POSTGRES_PASSWORD: prefect POSTGRES_DB: prefect PREFECT_API_DATABASE_CONNECTION_URL: postgresql+asyncpg://prefect:prefect@postgres:5432/prefect x-minio-root-credentials: &minio-root-credentials MINIO_ROOT_USER: minioadmin MINIO_ROOT_PASSWORD: minioadmin123 x-prefect-container: &prefect-container image: prefecthq/prefect:3-latest services: ############################################ # Prefect ############################################ postgres: image: postgres:15-alpine restart: always environment: <<: *postgres-credentials ports: - "5432:5432" volumes: - postgres_data:/var/lib/postgresql/data prefect: container_name: prefect <<: *prefect-container restart: always environment: PREFECT_HOME: /data PREFECT_API_URL: http://localhost:4200/api PREFECT_SERVER_API_HOST: "0.0.0.0" EXTRA_PIP_PACKAGES: prefect-aws <<: [*postgres-credentials, *minio-credentials] command: | sh -c " pip install prefect-aws && prefect server start --host 0.0.0.0 & SERVER_PID=$$! sleep 10 cd /app/prefect && /app/prefect/init_blocks.sh echo 'Creating work pool...' (prefect work-pool create default-docker-pool --type docker || echo 'Work pool already exists') prefect work-pool update default-docker-pool --base-job-template /app/prefect/work-pool-template.json echo 'Deploying flows...' prefect deploy --all wait $$SERVER_PID " ports: - "4200:4200" volumes: - prefect-data:/data - ./prefect:/app/prefect healthcheck: test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://prefect:4200/api/health/')"] interval: 15s timeout: 10s retries: 5 start_period: 60s prefect-worker: <<: *prefect-container restart: always environment: EXTRA_PIP_PACKAGES: prefect-aws prefect-docker PREFECT_API_URL: http://prefect:4200/api volumes: - /var/run/docker.sock:/var/run/docker.sock - ./prefect:/app/prefect command: prefect worker start --pool default-docker-pool --type docker depends_on: prefect: condition: service_healthy # MinIO for S3-compatible storage minio: image: quay.io/minio/minio:latest ports: - "9000:9000" - "9001:9001" environment: <<: *minio-root-credentials command: server /data --console-address ":9001" volumes: - minio-data:/data healthcheck: test: ["CMD", "curl", "-f", "http://minio:9000/minio/health/live"] interval: 30s retries: 3 start_period: 20s timeout: 10s # MinIO initialization - creates buckets automatically minio-init: image: minio/mc:latest depends_on: minio: condition: service_healthy environment: <<: *minio-root-credentials entrypoint: > /bin/sh -c " echo 'Waiting for MinIO to be ready...'; sleep 5; echo 'Setting up MinIO client...'; mc alias set minio http://minio:9000 minioadmin minioadmin123; echo 'Creating buckets...'; mc mb minio/prefect-flows --ignore-existing; mc mb minio/prefect-artifacts --ignore-existing; mc mb minio/prefect-results --ignore-existing; echo 'Setting bucket policies...'; mc policy set public minio/prefect-flows; mc policy set public minio/prefect-artifacts; mc policy set public minio/prefect-results; echo 'MinIO initialization completed successfully!'; echo 'Available buckets:'; mc ls minio; " restart: "no" ############################################ # Ntfy ############################################ ntfy: image: binwiederhier/ntfy:latest container_name: ntfy restart: always ports: - "80:80" volumes: - ntfy-cache:/var/cache/ntfy - ntfy-data:/var/lib/ntfy environment: - NTFY_BASE_URL=http://localhost - NTFY_CACHE_FILE=/var/cache/ntfy/cache.db - NTFY_AUTH_FILE=/var/lib/ntfy/user.db - NTFY_BEHIND_PROXY=true - NTFY_UPSTREAM_BASE_URL=https://ntfy.sh deploy: resources: limits: memory: 512M command: serve ############################################ # MCP Server ############################################ prefect-mcp: build: context: ./mcp dockerfile: Dockerfile container_name: prefect-mcp ports: - "8000:8000" environment: NTFY_SERVER: http://ntfy PREFECT_API_URL: http://prefect:4200/api depends_on: prefect: condition: service_started restart: on-failure volumes: postgres_data: prefect-data: minio-data: ntfy-data: ntfy-cache: