# 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 to /opt/venv COPY requirements.txt . RUN python -m venv /opt/venv ENV PATH="/opt/venv/bin:$PATH" RUN pip install --no-cache-dir -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 virtual environment from builder COPY --from=builder /opt/venv /opt/venv # Copy application code COPY --chown=${USERNAME}:${USERNAME} . . # Update PATH to include venv ENV PATH="/opt/venv/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"]