version: '3.8' services: ultimate-mcp-server: build: context: . dockerfile: Dockerfile container_name: ultimate-mcp-server restart: unless-stopped ports: - "${SERVER_PORT:-8013}:8013" volumes: - ./logs:/app/logs - ./.cache:/app/.cache - ./.embeddings:/app/.embeddings env_file: - .env environment: - SERVER_HOST=0.0.0.0 - PYTHONUNBUFFERED=1 healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8013/healthz"] interval: 30s timeout: 10s retries: 3 start_period: 10s deploy: resources: limits: memory: 2G reservations: memory: 1G # Optional monitoring service (with Prometheus + Grafana) prometheus: image: prom/prometheus:latest container_name: prometheus restart: unless-stopped ports: - "9090:9090" volumes: - ./monitoring/prometheus.yml:/etc/prometheus/prometheus.yml - prometheus_data:/prometheus 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' grafana: image: grafana/grafana:latest container_name: grafana restart: unless-stopped ports: - "3000:3000" volumes: - ./monitoring/grafana/provisioning:/etc/grafana/provisioning - grafana_data:/var/lib/grafana depends_on: - prometheus environment: - GF_SECURITY_ADMIN_USER=admin - GF_SECURITY_ADMIN_PASSWORD=admin - GF_USERS_ALLOW_SIGN_UP=false # Uncomment if using monitoring services volumes: prometheus_data: grafana_data: