version: '3.8' services: postgres: image: postgres:15-alpine environment: POSTGRES_DB: orchestrator POSTGRES_USER: orchestrator POSTGRES_PASSWORD: orchestrator_dev ports: - "5432:5432" volumes: - postgres_data:/var/lib/postgresql/data redis: image: redis:7-alpine ports: - "6379:6379" api: build: context: . dockerfile: Dockerfile ports: - "8000:8000" environment: DATABASE_URL: postgresql+asyncpg://orchestrator:orchestrator_dev@postgres:5432/orchestrator REDIS_URL: redis://redis:6379/0 LOG_LEVEL: INFO depends_on: - postgres - redis volumes: - ./backend:/app/backend worker: build: context: . dockerfile: Dockerfile command: celery -A backend.worker worker --loglevel=info environment: DATABASE_URL: postgresql+asyncpg://orchestrator:orchestrator_dev@postgres:5432/orchestrator REDIS_URL: redis://redis:6379/0 depends_on: - postgres - redis frontend: build: context: ./frontend dockerfile: Dockerfile ports: - "3000:3000" depends_on: - api volumes: - ./frontend:/app - /app/node_modules prometheus: image: prom/prometheus:latest ports: - "9090:9090" volumes: - ./monitoring/prometheus.yml:/etc/prometheus/prometheus.yml grafana: image: grafana/grafana:latest ports: - "3001:3000" depends_on: - prometheus volumes: postgres_data: