# Build stage FROM python:3.11-slim AS builder WORKDIR /app # Install system dependencies RUN apt-get update && apt-get install -y \ gcc \ g++ \ make \ libpq-dev \ && rm -rf /var/lib/apt/lists/* # Copy requirements and install dependencies COPY requirements.txt . RUN pip install --no-cache-dir --user -r requirements.txt # Run stage FROM python:3.11-slim ENV USERNAME=k8s ENV ARTIFACTORY_HOME=/home/${USERNAME} ENV PYTHONUNBUFFERED=1 ENV PYTHONDONTWRITEBYTECODE=1 # Install runtime dependencies RUN apt-get update && apt-get install -y \ libpq5 \ && rm -rf /var/lib/apt/lists/* # Add a non-root user RUN adduser --system --group ${USERNAME} && \ mkdir -p ${ARTIFACTORY_HOME} && \ chown ${USERNAME}:${USERNAME} ${ARTIFACTORY_HOME} WORKDIR ${ARTIFACTORY_HOME} # Copy Python dependencies from builder COPY --from=builder /root/.local /home/${USERNAME}/.local # Copy application code COPY --chown=${USERNAME}:${USERNAME} . . # Update PATH to include user's local bin ENV PATH=/home/${USERNAME}/.local/bin:$PATH USER ${USERNAME} # Expose port EXPOSE 8088 # Health check HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \ CMD python -c "import requests; requests.get('http://localhost:8088/health')" || exit 1 # Run the application CMD ["uvicorn", "src.api.main:app", "--host", "0.0.0.0", "--port", "8088"]