FROM python:3.12-slim WORKDIR /app RUN apt-get update && apt-get install -y \ curl \ wget \ git \ build-essential \ nginx \ nodejs \ npm \ && rm -rf /var/lib/apt/lists/* COPY backend/requirements.txt /app/backend/requirements.txt RUN pip install --no-cache-dir --use-pep517 -r /app/backend/requirements.txt # Copy local modified LightRAG package in vendor directory COPY vendor/ /app/vendor/ COPY backend/ /app/backend/ COPY rag_anything_smaranika/ /app/rag_anything_smaranika/ COPY frontend/ /app/frontend/ WORKDIR /app/frontend RUN npm install RUN REACT_APP_API_URL=/api npm run build RUN mkdir -p /var/lib/nginx/body /var/lib/nginx/fastcgi \ /var/lib/nginx/proxy /var/lib/nginx/scgi /var/lib/nginx/uwsgi \ /var/log/nginx /var/cache/nginx && \ chmod -R 777 /var/lib/nginx /var/log/nginx /var/cache/nginx && \ touch /var/run/nginx.pid && chmod 666 /var/run/nginx.pid RUN echo 'pid /tmp/nginx.pid;\n\ error_log /var/log/nginx/error.log;\n\ events {\n\ worker_connections 1024;\n\ }\n\ http {\n\ include /etc/nginx/mime.types;\n\ default_type application/octet-stream;\n\ access_log /var/log/nginx/access.log;\n\ client_body_temp_path /tmp/client_body;\n\ proxy_temp_path /tmp/proxy;\n\ fastcgi_temp_path /tmp/fastcgi;\n\ uwsgi_temp_path /tmp/uwsgi;\n\ scgi_temp_path /tmp/scgi;\n\ \n\ server {\n\ listen 7860;\n\ server_name _;\n\ \n\ location / {\n\ root /app/frontend/build;\n\ try_files $uri $uri/ /index.html;\n\ }\n\ \n\ location /api/ {\n\ proxy_pass http://127.0.0.1:8000/;\n\ proxy_http_version 1.1;\n\ proxy_set_header Upgrade $http_upgrade;\n\ proxy_set_header Connection "upgrade";\n\ proxy_set_header Host $host;\n\ proxy_set_header X-Real-IP $remote_addr;\n\ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n\ proxy_set_header X-Forwarded-Proto $scheme;\n\ proxy_buffering off;\n\ proxy_cache_bypass $http_upgrade;\n\ }\n\ \n\ location /health {\n\ proxy_pass http://127.0.0.1:8000/health;\n\ proxy_http_version 1.1;\n\ proxy_set_header Host $host;\n\ }\n\ }\n\ }' > /etc/nginx/nginx.conf RUN mkdir -p /app/storage /app/uploads /app/backend/output /app/output /app/.cache/huggingface && \ chmod -R 777 /app/storage /app/uploads /app/backend/output /app/output /app/.cache WORKDIR /app WORKDIR /app/rag_anything_smaranika RUN pip install --no-cache-dir -e . WORKDIR /app RUN mkdir -p /app/storage/medical /app/storage/legal /app/storage/financial \ /app/storage/technical /app/storage/academic && \ chmod -R 777 /app/storage # Create output directory in the working directory for the parser RUN mkdir -p /app/output && chmod -R 777 /app/output RUN echo '#!/bin/bash\n\ set -e\n\ \n\ echo "===== Application Startup at $(date +"%Y-%m-%d %H:%M:%S") ====="\n\ echo ""\n\ echo "Starting Agentic RAG System for Hugging Face Space..."\n\ \n\ # Check for required environment variables\n\ if [ -z "$GEMINI_API_KEY" ]; then\n\ echo "ERROR: GEMINI_API_KEY environment variable is not set!"\n\ echo "Please set it in your Hugging Face Space settings."\n\ exit 1\n\ fi\n\ \n\ # Start backend in background\n\ echo "Starting FastAPI backend on port 8000..."\n\ cd /app\n\ export PYTHONPATH=/app:/app/vendor:$PYTHONPATH\n\ python -m uvicorn backend.main:app --host 127.0.0.1 --port 8000 --log-level info &\n\ BACKEND_PID=$!\n\ \n\ # Wait for backend to be ready\n\ echo "Waiting for backend to be ready..."\n\ for i in {1..30}; do\n\ if curl -s http://127.0.0.1:8000/health > /dev/null 2>&1; then\n\ echo "Backend is ready!"\n\ break\n\ fi\n\ echo "Waiting for backend... ($i/30)"\n\ sleep 2\n\ done\n\ \n\ # Start nginx\n\ echo "Starting nginx on port 7860..."\n\ nginx -g "daemon off;" &\n\ NGINX_PID=$!\n\ \n\ echo ""\n\ echo "==========================================="\n\ echo "Agentic RAG System is running!"\n\ echo "Backend: http://localhost:8000"\n\ echo "Frontend: http://localhost:7860"\n\ echo "API Docs: http://localhost:8000/docs"\n\ echo "==========================================="\n\ echo ""\n\ \n\ # Wait for both processes\n\ wait $BACKEND_PID $NGINX_PID\n\ ' > /app/start.sh && chmod +x /app/start.sh EXPOSE 7860 HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \ CMD curl -f http://localhost:7860/health || exit 1 ENV PYTHONUNBUFFERED=1 ENV PYTHONPATH=/app:/app/vendor:$PYTHONPATH ENV BACKEND_PORT=8000 ENV FRONTEND_PORT=7860 ENV HF_HOME=/app/.cache/huggingface ENV TRANSFORMERS_CACHE=/app/.cache/huggingface ENV HF_DATASETS_CACHE=/app/.cache/huggingface/datasets ENV PYTHONDONTWRITEBYTECODE=1 ENV PYTHONHASHSEED=0 ENV PYTHONOPTIMIZE=0 # Start the application CMD ["/app/start.sh"]