services: backend: env_file: 'backend.env' build: context: . target: backend ports: - '8080:8080' - '9090:9090' # Metrics port volumes: - /var/run/docker.sock:/var/run/docker.sock # Add Docker socket access healthcheck: test: ['CMD', 'wget', '-qO-', 'http://localhost:8080/health'] interval: 3s timeout: 3s retries: 3 networks: - app-network depends_on: - llm frontend: build: context: ./frontend ports: - '3000:3000' depends_on: backend: condition: service_healthy networks: - app-network prometheus: image: prom/prometheus:v2.45.0 volumes: - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml command: - '--config.file=/etc/prometheus/prometheus.yml' - '--storage.tsdb.path=/prometheus' - '--web.console.libraries=/etc/prometheus/console_libraries' - '--web.console.templates=/etc/prometheus/consoles' - '--web.enable-lifecycle' ports: - '9091:9090' networks: - app-network grafana: image: grafana/grafana:10.1.0 volumes: - ./grafana/provisioning:/etc/grafana/provisioning - grafana-data:/var/lib/grafana environment: - GF_SECURITY_ADMIN_PASSWORD=admin - GF_USERS_ALLOW_SIGN_UP=false - GF_SERVER_DOMAIN=localhost ports: - '3001:3000' depends_on: - prometheus networks: - app-network jaeger: image: jaegertracing/all-in-one:1.46 environment: - COLLECTOR_ZIPKIN_HOST_PORT=:9411 ports: - '16686:16686' # UI - '4317:4317' # OTLP gRPC - '4318:4318' # OTLP HTTP networks: - app-network # New LLM service using Docker Compose's model provider llm: provider: type: model options: model: ${LLM_MODEL_NAME:-ai/llama3.2:1B-Q8_0} volumes: grafana-data: networks: app-network: driver: bridge