# syntax=docker/dockerfile:1 # ---------- Builder stage ---------- FROM python:3.12-slim AS builder WORKDIR /build # Install build dependencies RUN apt-get update && apt-get install -y --no-install-recommends \ gcc \ libpq-dev \ && rm -rf /var/lib/apt/lists/* # Copy dependency file COPY backend/pyproject.toml ./ # Install dependencies into a virtual environment RUN python -m venv /opt/venv ENV PATH="/opt/venv/bin:$PATH" RUN pip install --no-cache-dir --upgrade pip && \ pip install --no-cache-dir -e . # ---------- Development stage ---------- FROM python:3.12-slim AS development WORKDIR /app # Create non-root user RUN useradd --create-home --uid 1000 app && \ mkdir -p /app/data && \ chown -R app:app /app # Install runtime dependencies RUN apt-get update && apt-get install -y --no-install-recommends \ libpq5 \ curl \ && rm -rf /var/lib/apt/lists/* # Copy virtual environment from builder COPY --from=builder /opt/venv /opt/venv ENV PATH="/opt/venv/bin:$PATH" # Switch to non-root user USER app EXPOSE 8000 # ---------- Production stage ---------- FROM python:3.12-slim AS production WORKDIR /app # Create non-root user RUN useradd --create-home --uid 1000 app && \ mkdir -p /app/data && \ chown -R app:app /app # Install runtime dependencies RUN apt-get update && apt-get install -y --no-install-recommends \ libpq5 \ curl \ && rm -rf /var/lib/apt/lists/* # Copy virtual environment from builder COPY --from=builder /opt/venv /opt/venv ENV PATH="/opt/venv/bin:$PATH" # Copy backend code COPY --chown=app:app backend/ /app/ # Switch to non-root user USER app EXPOSE 8000 CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]