TCETMILI/PassportExtractor
1
1# Passport Extractor V2.6 - Hugging Face Spaces2# Combined Backend (FastAPI) + Frontend (React/Vite - Built & Served by Nginx)3 4# Stage 1: Build React Frontend5FROM node:18-alpine AS frontend-builder6 7WORKDIR /frontend8 9COPY frontend_v2/package.json ./10COPY frontend_v2/package-lock.json* ./11 12RUN if [ -f package-lock.json ]; then npm ci; else npm install; fi13 14COPY frontend_v2/ ./15 16# HuggingFace Spaces environment - backend runs on same container17ARG VITE_BACKEND_URL=http://localhost:800018ARG VITE_DEPLOYMENT_MODE=WEB19 20ENV VITE_BACKEND_URL=${VITE_BACKEND_URL}21ENV VITE_DEPLOYMENT_MODE=${VITE_DEPLOYMENT_MODE}22 23RUN npm run build24 25# Stage 2: Python Backend + Nginx for Frontend26FROM python:3.11-slim27 28WORKDIR /app29 30# Install nginx and system dependencies31RUN apt-get update && apt-get install -y \32 nginx \33 libgl1-mesa-glx \34 libglib2.0-0 \35 cmake \36 build-essential \37 libopenblas-dev \38 liblapack-dev \39 && rm -rf /var/lib/apt/lists/*40 41# Copy requirements and install Python dependencies42COPY requirements.txt .43RUN pip install --no-cache-dir -r requirements.txt44 45# Copy backend code46COPY backend ./backend47 48# Copy built React app from Stage 149COPY --from=frontend-builder /frontend/dist /var/www/html50 51# Copy nginx configuration52COPY frontend_v2/nginx.conf /etc/nginx/conf.d/default.conf53 54# Environment variables55ENV DEPLOYMENT_MODE="WEB"56ENV BACKEND_URL="http://localhost:8000"57ENV PORT=786058 59# Create startup script60RUN echo '#!/bin/bash\n\61echo "๐ Starting Passport Extractor V2.6..."\n\62\n\63# Start FastAPI backend in background\n\64uvicorn backend.main:app --host 127.0.0.1 --port 8000 &\n\65\n\66# Update nginx to listen on HF port\n\67sed -i "s/listen 80;/listen 7860;/g" /etc/nginx/conf.d/default.conf\n\68\n\69# Start nginx in foreground\n\70nginx -g "daemon off;"\n\71' > /start.sh && chmod +x /start.sh72 73EXPOSE 786074 75CMD ["/start.sh"]76 