Spaces:
Sleeping
Sleeping
| # Use a stable, official Python base image | |
| FROM python:3.11-slim | |
| # Set environment variables | |
| ENV PYTHONUNBUFFERED=1 \ | |
| PYTHONDONTWRITEBYTECODE=1 \ | |
| HF_HOME=/code/.cache/huggingface \ | |
| PORT=7860 \ | |
| NODE_ENV=production | |
| # Set the working directory | |
| WORKDIR /code | |
| # Install system dependencies & Node.js (LTS v18) | |
| RUN apt-get update && apt-get install -y --no-install-recommends \ | |
| git \ | |
| build-essential \ | |
| curl \ | |
| && curl -fsSL https://deb.nodesource.com/setup_18.x | bash - \ | |
| && apt-get install -y nodejs \ | |
| && rm -rf /var/lib/apt/lists/* | |
| # 1. Install Python RAG Backend dependencies | |
| COPY requirements.txt . | |
| RUN pip install --no-cache-dir --upgrade pip && \ | |
| pip install --no-cache-dir -r requirements.txt | |
| # 2. Build React Frontend static files | |
| COPY frontend/package*.json ./frontend/ | |
| RUN cd frontend && npm install | |
| COPY frontend/ ./frontend/ | |
| RUN cd frontend && npm run build | |
| # 3. Setup Node.js API Gateway | |
| COPY gateway/package*.json ./gateway/ | |
| RUN cd gateway && npm install --production | |
| # Copy build output from frontend to gateway's public directory | |
| RUN mkdir -p gateway/public && cp -r frontend/build/* gateway/public/ | |
| # Copy the rest of the application files (including backends) | |
| COPY . . | |
| # Ensure start.sh has execution permissions | |
| RUN chmod +x start.sh | |
| # Create a writable cache directory for Hugging Face models (user 1000 compatibility) | |
| RUN mkdir -p /code/.cache/huggingface && chmod -R 777 /code | |
| # Pre-download and cache models in the container image during build time | |
| RUN python download_models.py | |
| # Pre-build FAISS/BM25 database indices during container build time | |
| RUN python scratch/ingest_large_samples.py | |
| # Expose port 7860 for Hugging Face Space / external access | |
| EXPOSE 7860 | |
| # Run the startup script to concurrently run FastAPI and Node.js | |
| CMD ["bash", "start.sh"] | |