ARG VARIANT=cpu # ---- CPU base ---- FROM python:3.12-slim AS base-cpu RUN apt-get update && apt-get install -y --no-install-recommends \ curl libgl1 libglib2.0-0 \ && rm -rf /var/lib/apt/lists/* COPY requirements.txt /tmp/requirements.txt COPY requirements-cpu.txt /tmp/requirements-cpu.txt RUN pip install --no-cache-dir -r /tmp/requirements.txt -r /tmp/requirements-cpu.txt \ && rm /tmp/requirements*.txt # ---- GPU base (CUDA 12.4) ---- FROM nvidia/cuda:12.4.1-cudnn-runtime-ubuntu22.04 AS base-gpu ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update && apt-get install -y --no-install-recommends \ software-properties-common \ && add-apt-repository ppa:deadsnakes/ppa \ && apt-get update \ && apt-get install -y --no-install-recommends \ python3.12 python3.12-venv python3.12-dev \ curl libgl1 libglib2.0-0 \ && ln -sf /usr/bin/python3.12 /usr/bin/python3 \ && ln -sf /usr/bin/python3 /usr/bin/python \ && python3 -m ensurepip --upgrade \ && python3 -m pip install --no-cache-dir --upgrade pip \ && rm -rf /var/lib/apt/lists/* COPY requirements.txt /tmp/requirements.txt COPY requirements-gpu.txt /tmp/requirements-gpu.txt RUN pip install --no-cache-dir -r /tmp/requirements.txt -r /tmp/requirements-gpu.txt \ && rm /tmp/requirements*.txt # ---- Final stage ---- FROM base-${VARIANT} AS final WORKDIR /app # Copy application code COPY app/ /app/app/ # Create data directories RUN mkdir -p /data/uploads /data/outputs /data/models /data/temp /data/jobs # Health check HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \ CMD curl -f http://localhost:8000/api/v1/health || exit 1 # Expose port EXPOSE 8000 # Run API CMD ["python", "-m", "uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]