services: redis: image: redis:7-alpine container_name: test-app-redis ports: - "6379:6379" jaeger: image: jaegertracing/all-in-one:1.57 container_name: test-app-jaeger environment: - COLLECTOR_OTLP_ENABLED=true ports: - "16686:16686" # Jaeger UI - "4317:4317" # OTLP gRPC - "4318:4318" # OTLP HTTP web: image: test-app-autoops:latest container_name: test-app-web ports: - "8000:8000" environment: - REDIS_HOST=redis - OTEL_COLLECTOR_ENDPOINT=http://jaeger:4317 - OTEL_PYTHON_LOG_CORRELATION=true volumes: - ./logs:/app/logs depends_on: - redis - jaeger prometheus: image: prom/prometheus:latest container_name: test-app-prometheus volumes: - ./monitoring/prometheus.yml:/etc/prometheus/prometheus.yml ports: - "9090:9090" depends_on: - web loki: image: grafana/loki:latest container_name: test-app-loki ports: - "3100:3100" command: -config.file=/etc/loki/local-config.yaml promtail: image: grafana/promtail:latest container_name: test-app-promtail volumes: - ./logs:/var/log/app - ./monitoring/promtail-config.yml:/etc/promtail/config.yml command: -config.file=/etc/promtail/config.yml depends_on: - loki grafana: image: grafana/grafana:latest container_name: test-app-grafana ports: - "3000:3000" environment: - GF_SECURITY_ADMIN_USER=admin - GF_SECURITY_ADMIN_PASSWORD=admin - GF_USERS_ALLOW_SIGN_UP=false volumes: - ./monitoring/grafana/provisioning/datasources/datasources.yml:/etc/grafana/provisioning/datasources/datasources.yaml - ./monitoring/grafana/provisioning/dashboards/dashboards.yml:/etc/grafana/provisioning/dashboards/dashboards.yaml - ./monitoring/grafana/provisioning/dashboards/fastapi_dashboard.json:/etc/grafana/provisioning/dashboards/fastapi_dashboard.json depends_on: - prometheus - loki - jaeger backend: image: autoops-backend:latest # Uses the locally built image environment: - DATABASE_URL=sqlite:////app/data/autoops.db - PROMETHEUS_URL=${PROMETHEUS_URL:-http://prometheus:9090} - LOKI_URL=${LOKI_URL:-http://loki:3100} - JAEGER_URL=${JAEGER_URL:-http://jaeger:16686} - LITELLM_MODEL=${LITELLM_MODEL:-gemini/gemini-2.5-flash} - GEMINI_API_KEY=$(GeminiAPIKey) volumes: - backend-data:/app/data restart: always frontend: image: autoops-frontend:latest # Uses the locally built image ports: - "8080:80" depends_on: - backend restart: always volumes: backend-data: