services: app: build: . ports: - "8501:8501" depends_on: - elasticsearch - ollama environment: - ELASTICSEARCH_HOST=elasticsearch - ELASTICSEARCH_PORT=9200 - YOUTUBE_API_KEY=${YOUTUBE_API_KEY} - OLLAMA_HOST=http://ollama:11434 - OLLAMA_TIMEOUT=${OLLAMA_TIMEOUT:-120} - OLLAMA_MAX_RETRIES=${OLLAMA_MAX_RETRIES:-3} - PYTHONPATH=/app - STREAMLIT_BROWSER_GATHER_USAGE_STATS=false - STREAMLIT_THEME_PRIMARY_COLOR="#FF4B4B" env_file: - .env volumes: - ./app:/app/app - ./data:/app/data - ./config:/app/config - ./logs:/app/logs - ./.streamlit:/root/.streamlit:ro healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8501/_stcore/health"] interval: 30s timeout: 10s retries: 5 elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:8.9.0 container_name: elasticsearch environment: - discovery.type=single-node - xpack.security.enabled=false - "ES_JAVA_OPTS=-Xms512m -Xmx512m" ports: - "9200:9200" - "9300:9300" deploy: resources: limits: memory: 2G volumes: - esdata:/usr/share/elasticsearch/data healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9200"] interval: 30s timeout: 10s retries: 5 grafana: image: grafana/grafana:latest ports: - "3000:3000" environment: - GF_AUTH_ANONYMOUS_ENABLED=false - GF_SECURITY_ADMIN_USER=${GRAFANA_USERNAME:-admin} - GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_PASSWORD:-admin} - GF_INSTALL_PLUGINS=frser-sqlite-datasource - GF_PLUGINS_ALLOW_LOADING_UNSIGNED_PLUGINS=frser-sqlite-datasource - GF_LOG_LEVEL=debug volumes: - ./grafana/provisioning:/etc/grafana/provisioning - ./grafana/dashboards:/etc/grafana/dashboards - grafana-storage:/var/lib/grafana - ./data:/app/data:ro - ./logs:/var/log/grafana depends_on: - elasticsearch healthcheck: test: ["CMD-SHELL", "wget -q --spider http://localhost:3000/api/health || exit 1"] interval: 30s timeout: 10s retries: 5 ollama: image: ollama/ollama:latest ports: - "11434:11434" volumes: - ollama_data:/root/.ollama deploy: resources: limits: memory: 6G healthcheck: test: ["CMD", "curl", "-f", "http://localhost:11434/api/health"] interval: 30s timeout: 10s retries: 5 volumes: esdata: driver: local grafana-storage: ollama_data: networks: default: driver: bridge