version: '3.8' services: rag-service: build: context: . dockerfile: Dockerfile container_name: rag-service restart: unless-stopped # Порт открываем только для localhost (NGINX будет проксировать) # Для прямого доступа используй: "8000:8000" ports: - "127.0.0.1:8000:8000" volumes: # Персистентность данных модели и векторов - ./data/models:/app/data/models - ./data/vectors:/app/data/vectors environment: - RAG_MODEL=${RAG_MODEL:-sentence-transformers/all-MiniLM-L12-v2} - RAG_CACHE_DIR=/app/data/models - RAG_VECTORS_PATH=/app/data/vectors/vectors.npz - RAG_MAX_EXAMPLES=${RAG_MAX_EXAMPLES:-10000} - RAG_SCORE_MULTIPLIER=${RAG_SCORE_MULTIPLIER:-5.0} - RAG_BATCH_SIZE=${RAG_BATCH_SIZE:-16} - RAG_MIN_TEXT_LENGTH=${RAG_MIN_TEXT_LENGTH:-3} - RAG_API_HOST=0.0.0.0 - RAG_API_PORT=8000 # Безопасность - RAG_API_KEY=${RAG_API_KEY} - RAG_ALLOW_NO_AUTH=${RAG_ALLOW_NO_AUTH:-false} # Автосохранение - RAG_AUTOSAVE_INTERVAL=${RAG_AUTOSAVE_INTERVAL:-600} - LOG_LEVEL=${LOG_LEVEL:-INFO} healthcheck: test: ["CMD", "python", "-c", "import urllib.request, os; req = urllib.request.Request('http://localhost:8000/api/v1/health'); req.add_header('X-API-Key', os.getenv('RAG_API_KEY', '')); urllib.request.urlopen(req)"] interval: 30s timeout: 10s retries: 3 start_period: 60s # Ограничения ресурсов (рекомендуется для продакшена) # deploy: # resources: # limits: # cpus: '2' # memory: 4G # reservations: # cpus: '1' # memory: 2G