version: "3.8" services: redis: image: redis:7-alpine container_name: harness-redis restart: unless-stopped ports: - "127.0.0.1:6379:6379" volumes: - redis-data:/data command: redis-server --appendonly yes --maxmemory 256mb --maxmemory-policy allkeys-lru healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 3s retries: 5 postgres: image: postgres:16-alpine container_name: harness-postgres restart: unless-stopped ports: - "127.0.0.1:5432:5432" environment: - POSTGRES_DB=litellm - POSTGRES_USER=litellm - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} volumes: - pgdata:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U litellm"] interval: 5s timeout: 3s retries: 5 litellm: image: ghcr.io/docker.litellm.ai/berriai/litellm:1.99.1 command: ["--config", "/app/config.yaml", "--port", "4000"] container_name: harness-litellm restart: unless-stopped ports: - "4000:4000" volumes: - ./litellm_config.yaml:/app/config.yaml - /opt/combined-ca-bundle.pem:/etc/ssl/certs/ca-certificates.crt:ro environment: - PROMETHEUS_EXPORTER=true - ENFORCE_PRISMA_MIGRATION_CHECK=true - LITELLM_MASTER_KEY=${LITELLM_MASTER_KEY} - DATABASE_URL=postgresql://litellm:${POSTGRES_PASSWORD}@postgres:5432/litellm - STORE_MODEL_IN_DB=True - LITELLM_UI_USERNAME=admin - LITELLM_UI_PASSWORD=${LITELLM_UI_PASSWORD} - UI_USERNAME=admin - UI_PASSWORD=${UI_PASSWORD} - OPENAI_API_KEY=${OPENAI_API_KEY} - PROXY_BASE_URL=https://litellm.sysloggh.net - DOCS_URL=/docs - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY} - GENERIC_CLIENT_ID=FHd7bs9dP5gHad2Ki23iUL5kQvFa0GRaj3nlLnNU - GENERIC_CLIENT_SECRET=${GENERIC_CLIENT_SECRET} - GENERIC_AUTHORIZATION_ENDPOINT=https://auth.sysloggh.net/application/o/authorize/ - GENERIC_TOKEN_ENDPOINT=http://harness-nginx/application/o/token/ - GENERIC_USERINFO_ENDPOINT=http://harness-nginx/application/o/userinfo/ - GENERIC_SCOPE=openid email profile - MCP_SERVER_RAHOS_URL=http://192.168.68.65:3100/mcp - MCP_SERVER_RAHOS_TRANSPORT=http - GENERIC_ROLE_MAPPINGS_DEFAULT_ROLE=proxy_admin - SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt extra_hosts: - "host.docker.internal:host-gateway" - "auth.sysloggh.net:192.168.68.11" healthcheck: test: ["CMD", "python3", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:4000/health/liveliness')"] interval: 15s timeout: 5s retries: 3 start_period: 120s depends_on: postgres: condition: service_healthy redis: condition: service_healthy nginx: image: nginx:alpine container_name: harness-nginx restart: unless-stopped ports: - "80:80" volumes: - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro - ./dashboard:/opt/inference-harness/dashboard:ro extra_hosts: - "auth.sysloggh.net:192.168.68.11" healthcheck: test: ["CMD", "curl", "-f", "http://127.0.0.1/health"] interval: 30s timeout: 15s retries: 3 depends_on: - litellm - dashboard dashboard: build: ./dashboard container_name: harness-dashboard restart: unless-stopped ports: - "127.0.0.1:3000:3000" environment: - REDIS_URL=redis://redis:6379 - GPU_SIDECARS=192.168.68.15:8090,192.168.68.8:8090,192.168.68.110:8090 healthcheck: test: ["CMD", "python3", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:3000/health')"] interval: 15s timeout: 5s retries: 3 depends_on: - redis volumes: redis-data: pgdata: