# Build stage FROM python:3.12-slim as builder WORKDIR /tmp # Install poetry RUN pip install --no-cache-dir poetry # Copy dependency file COPY requirements.txt . # Generate wheels RUN pip wheel --no-cache-dir --no-deps --wheel-dir /tmp/wheels -r requirements.txt # Runtime stage FROM python:3.12-slim WORKDIR /app # Install runtime dependencies RUN apt-get update && apt-get install -y --no-install-recommends \ postgresql-client \ && rm -rf /var/lib/apt/lists/* # Copy wheels from builder COPY --from=builder /tmp/wheels /wheels COPY --from=builder /tmp/requirements.txt . # Install Python packages RUN pip install --no-cache /wheels/* # Copy application code COPY ./app /app/app # Create non-root user RUN useradd -m -u 1000 sanctum && chown -R sanctum:sanctum /app USER sanctum # Expose port EXPOSE 8000 # Health check HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ CMD python -c "import httpx; httpx.get('http://localhost:8000/health')" # Run application CMD ["python", "-m", "uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]