# Build frontend FROM node:18 as frontend-build WORKDIR /app COPY frontend/package*.json ./ # Configurer le registre npm miroir pour éviter les erreurs 403 RUN npm config set registry https://registry.npmmirror.com/ RUN npm install COPY frontend/ ./ # Set environment variable for production build ENV REACT_APP_NODE_ENV=production RUN npm run build # Build backend FROM python:3.12-slim WORKDIR /app # Install system dependencies required for UV, Git and Node.js RUN apt-get update && apt-get install -y --no-install-recommends \ curl ca-certificates git netcat-openbsd && \ curl -fsSL https://deb.nodesource.com/setup_18.x | bash - && \ apt-get install -y nodejs && \ rm -rf /var/lib/apt/lists/* # Install UV (fast Python dependency manager) RUN curl -LsSf https://astral.sh/uv/install.sh | sh && \ mv /root/.local/bin/uv /usr/local/bin/uv && chmod +x /usr/local/bin/uv # Verify UV installation RUN uv --version # Create non-root user RUN useradd -m -u 1000 user # Create and configure cache directory RUN mkdir -p /app/.cache && \ chown -R user:user /app # Copy all backend code first COPY backend/ . # Install all dependencies explicitly RUN pip install fastapi uvicorn # Install project dependencies RUN uv pip install -e . --system # Copy frontend server and build COPY --from=frontend-build /app/build ./frontend/build COPY --from=frontend-build /app/package*.json ./frontend/ COPY --from=frontend-build /app/server.js ./frontend/ # Install frontend production dependencies WORKDIR /app/frontend # Configurer le registre npm miroir pour éviter les erreurs 403 RUN npm config set registry https://registry.npmmirror.com/ RUN npm install --production WORKDIR /app # Environment variables ENV HF_HOME=/app/.cache \ HF_DATASETS_CACHE=/app/.cache \ INTERNAL_API_PORT=7861 \ PORT=7860 \ NODE_ENV=production # Note: HF_TOKEN should be provided at runtime, not build time USER user EXPOSE 7860 7861 # Start both servers with wait-for CMD ["sh", "-c", "uvicorn main:app --host 0.0.0.0 --port 7861 & while ! nc -z 127.0.0.1 7861; do sleep 1; done && cd frontend && npm run serve"]