# ── Stage 1: dependency installation ───────────────────────────────────────── FROM python:3.12-slim AS builder WORKDIR /app RUN pip install --upgrade pip COPY pyproject.toml . RUN pip install --prefix=/install . # ── Stage 2: runtime ────────────────────────────────────────────────────────── FROM python:3.12-slim # Create non-root user (UID/GID 1001) RUN groupadd --gid 1001 appuser && \ useradd --uid 1001 --gid 1001 --no-create-home --shell /bin/sh appuser # Pre-create data and config dirs with correct ownership. # Named volumes mounted over these paths will inherit ownership on first creation. RUN mkdir -p /data/documents /config && chown -R appuser:appuser /data /config WORKDIR /app COPY --from=builder /install /usr/local COPY --chown=appuser:appuser app ./app COPY --chown=appuser:appuser alembic ./alembic COPY --chown=appuser:appuser alembic.ini . COPY --chown=appuser:appuser scripts ./scripts USER appuser EXPOSE 8001 CMD ["sh", "scripts/start.sh"]