version: "3.9" # Shared config for all dagster services x-dagster: &dagster-common build: context: . dockerfile: Dockerfile env_file: .env environment: DAGSTER_HOME: /app/dagster_home depends_on: postgres: condition: service_healthy restart: unless-stopped services: # Metadata storage and dbt target postgres: image: postgres:16 container_name: postgres restart: unless-stopped env_file: .env environment: POSTGRES_USER: ${POSTGRES_USER} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} POSTGRES_DB: ${POSTGRES_DB} volumes: - postgres-data:/var/lib/postgresql/data ports: - "10.0.0.108:5432:5432" healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER}"] interval: 10s timeout: 5s retries: 5 # User code gRPC server dagster-usercode: <<: *dagster-common container_name: dagster-usercode command: ["dagster", "api", "grpc", "-h", "0.0.0.0", "-p", "4000", "-m", "data_platform"] volumes: - dbt-target:/app/dbt/target expose: - "4000" # Web UI dagster-webserver: <<: *dagster-common container_name: dagster-webserver entrypoint: [] command: ["dagster-webserver", "-h", "0.0.0.0", "-p", "3000"] ports: - "3000:3000" depends_on: dagster-usercode: condition: service_started # Schedules, sensors and run queuing dagster-daemon: <<: *dagster-common container_name: dagster-daemon entrypoint: [] command: ["dagster-daemon", "run"] depends_on: dagster-usercode: condition: service_started volumes: postgres-data: dbt-target: