services: api: build: context: . restart: unless-stopped env_file: - .env.compose command: sh -c "poetry run alembic upgrade head && poetry run uvicorn app.main:app --host 0.0.0.0 --port 8000" ports: - "8000:8000" depends_on: postgres: condition: service_healthy redis: condition: service_started rabbitmq: condition: service_healthy worker: build: context: . restart: unless-stopped env_file: - .env.compose command: poetry run celery -A app.tasks.celery_app.celery_app worker --loglevel=INFO depends_on: postgres: condition: service_healthy redis: condition: service_started rabbitmq: condition: service_healthy postgres: image: postgres:17-alpine restart: unless-stopped env_file: - .env.compose ports: - "5433:5432" volumes: - aspex_postgres_data:/var/lib/postgresql/data healthcheck: test: [ "CMD-SHELL", "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB" ] interval: 10s timeout: 5s retries: 5 redis: image: redis/redis-stack-server:latest restart: unless-stopped ports: - "6380:6379" rabbitmq: image: rabbitmq:3-management restart: unless-stopped ports: - "5673:5672" - "15673:15672" healthcheck: test: [ "CMD", "rabbitmq-diagnostics", "-q", "ping" ] interval: 10s timeout: 5s retries: 5 prometheus: image: prom/prometheus:v3.8.0 restart: unless-stopped command: - "--config.file=/etc/prometheus/prometheus.yml" - "--storage.tsdb.path=/prometheus" ports: - "9090:9090" volumes: - ./infra/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro - aspex_prometheus_data:/prometheus depends_on: api: condition: service_started grafana: image: grafana/grafana:11.2.0 restart: unless-stopped env_file: - .env.compose environment: GF_SECURITY_ADMIN_USER: ${GRAFANA_ADMIN_USER} GF_SECURITY_ADMIN_PASSWORD: ${GRAFANA_ADMIN_PASSWORD} GF_USERS_ALLOW_SIGN_UP: "false" ports: - "3000:3000" volumes: - aspex_grafana_data:/var/lib/grafana - ./infra/grafana/provisioning/datasources:/etc/grafana/provisioning/datasources:ro - ./infra/grafana/provisioning/dashboards:/etc/grafana/provisioning/dashboards:ro depends_on: prometheus: condition: service_started volumes: aspex_postgres_data: aspex_prometheus_data: aspex_grafana_data: