# ============================================================================= # Lumea Health Platform - Hugging Face Spaces Dockerfile # Multi-stage build: React frontend → FastAPI backend serving static files # ============================================================================= # ========================== # Stage 1: Build React frontend # ========================== FROM node:20-alpine AS frontend-builder WORKDIR /app/frontend COPY frontend/package.json frontend/package-lock.json* ./ RUN npm ci --no-audit --no-fund COPY frontend/ ./ # Build with empty VITE_API_URL so all API calls go to same origin # Use vite build directly (skip tsc type-check to avoid strict-mode build failures) ENV VITE_API_URL="" RUN npx vite build # ========================== # Stage 2: Python backend + serve frontend # ========================== FROM python:3.11-slim-bookworm ENV PYTHONDONTWRITEBYTECODE=1 \ PYTHONUNBUFFERED=1 \ PIP_DISABLE_PIP_VERSION_CHECK=1 # System dependencies for PaddleOCR, PDF processing, curl RUN set -eux; \ if [ -f /etc/apt/sources.list ]; then sed -i 's|http://|https://|g' /etc/apt/sources.list; fi; \ if [ -f /etc/apt/sources.list.d/debian.sources ]; then sed -i 's|http://|https://|g' /etc/apt/sources.list.d/debian.sources; fi; \ apt-get -o Acquire::Retries=3 update; \ apt-get install -y --no-install-recommends \ libgl1 \ libglib2.0-0 \ libsm6 \ libxrender1 \ libxext6 \ libgomp1 \ curl \ ; \ rm -rf /var/lib/apt/lists/* # Create non-root user (HF Spaces runs as uid 1000) RUN useradd -m -u 1000 user WORKDIR /app # Install Python dependencies COPY backend/requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # Copy backend source COPY --chown=user backend/app ./app COPY --chown=user backend/alembic ./alembic COPY --chown=user backend/alembic.ini ./alembic.ini COPY --chown=user backend/scripts ./scripts # Copy built frontend from stage 1 COPY --chown=user --from=frontend-builder /app/frontend/dist ./static # Copy startup script COPY --chown=user start.sh ./start.sh RUN chmod +x start.sh # Create writable directories RUN mkdir -p uploads chroma_db mem0_chroma logs/audit && \ chown -R user:user uploads chroma_db mem0_chroma logs # Switch to non-root user USER user ENV HOME=/home/user \ PATH=/home/user/.local/bin:$PATH # HF Spaces exposes port 7860 by default EXPOSE 7860 CMD ["./start.sh"]