Spaces:
Running
Running
| version: '3.8' | |
| services: | |
| # Redis Cache Cluster | |
| redis: | |
| image: redis:7-alpine | |
| container_name: ku-redis | |
| ports: | |
| - "6379:6379" | |
| command: > | |
| redis-server | |
| --maxmemory 2gb | |
| --maxmemory-policy allkeys-lru | |
| --save "" | |
| --appendonly no | |
| volumes: | |
| - redis-data:/data | |
| healthcheck: | |
| test: ["CMD", "redis-cli", "ping"] | |
| interval: 10s | |
| timeout: 3s | |
| retries: 3 | |
| networks: | |
| - ku-network | |
| # Knowledge Universe API | |
| api: | |
| build: | |
| context: . | |
| dockerfile: Dockerfile | |
| container_name: ku-api | |
| ports: | |
| - "8000:8000" | |
| - "9090:9090" # Metrics | |
| environment: | |
| # Redis Configuration | |
| - REDIS_HOST=redis | |
| - REDIS_PORT=6379 | |
| - REDIS_DB=0 | |
| # Cache Settings | |
| - CACHE_TTL_REQUEST=14400 | |
| - CACHE_TTL_SOURCE=43200 | |
| - MAX_CACHE_MEMORY_GB=2 | |
| # Crawler Settings | |
| - CRAWLER_TIMEOUT=8 | |
| - CRAWLERS_PARALLEL=5 | |
| # API Keys (load from .env file) | |
| - GITHUB_TOKEN=${GITHUB_TOKEN} | |
| - YOUTUBE_API_KEY=${YOUTUBE_API_KEY} | |
| - KAGGLE_USERNAME=${KAGGLE_USERNAME} | |
| - KAGGLE_KEY=${KAGGLE_KEY} | |
| # Application Settings | |
| - DEBUG=false | |
| - LOG_LEVEL=INFO | |
| - ENABLE_METRICS=true | |
| depends_on: | |
| redis: | |
| condition: service_healthy | |
| volumes: | |
| - ./logs:/app/logs | |
| healthcheck: | |
| test: ["CMD", "curl", "-f", "http://localhost:8000/health"] | |
| interval: 30s | |
| timeout: 10s | |
| retries: 3 | |
| start_period: 40s | |
| restart: unless-stopped | |
| networks: | |
| - ku-network | |
| # Prometheus (Optional - for monitoring) | |
| prometheus: | |
| image: prom/prometheus:latest | |
| container_name: ku-prometheus | |
| ports: | |
| - "9091:9090" | |
| volumes: | |
| - ./prometheus.yml:/etc/prometheus/prometheus.yml | |
| - prometheus-data:/prometheus | |
| command: | |
| - '--config.file=/etc/prometheus/prometheus.yml' | |
| - '--storage.tsdb.path=/prometheus' | |
| networks: | |
| - ku-network | |
| profiles: | |
| - monitoring | |
| # Grafana (Optional - for dashboards) | |
| grafana: | |
| image: grafana/grafana:latest | |
| container_name: ku-grafana | |
| ports: | |
| - "3000:3000" | |
| environment: | |
| - GF_SECURITY_ADMIN_PASSWORD=admin | |
| volumes: | |
| - grafana-data:/var/lib/grafana | |
| depends_on: | |
| - prometheus | |
| networks: | |
| - ku-network | |
| profiles: | |
| - monitoring | |
| volumes: | |
| redis-data: | |
| prometheus-data: | |
| grafana-data: | |
| networks: | |
| ku-network: | |
| driver: bridge |