Added a /health endpoint for application health monitoring Implemented logging filter to suppress health check requests from logs Updated Dockerfile and Kubernetes deployment to use the new health check endpoint Incremented production image tag version
48 lines
1.1 KiB
Docker
48 lines
1.1 KiB
Docker
# Use Python 3.13 slim image as base
|
|
FROM python:3.13-slim
|
|
|
|
# Set working directory
|
|
WORKDIR /app
|
|
|
|
# Set environment variables
|
|
ENV PYTHONDONTWRITEBYTECODE=1 \
|
|
PYTHONUNBUFFERED=1 \
|
|
POETRY_NO_INTERACTION=1 \
|
|
POETRY_VENV_IN_PROJECT=1 \
|
|
POETRY_CACHE_DIR=/tmp/poetry_cache
|
|
|
|
# Install system dependencies
|
|
RUN apt-get update && apt-get install -y \
|
|
build-essential \
|
|
curl \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Copy requirements file
|
|
COPY requirements.txt .
|
|
|
|
# Install Python dependencies
|
|
RUN pip install --no-cache-dir --upgrade pip && \
|
|
pip install --no-cache-dir -r requirements.txt
|
|
|
|
# Create a non-root user
|
|
RUN adduser --disabled-password --gecos '' appuser
|
|
|
|
# Copy application code
|
|
COPY ./app /app/app
|
|
COPY ./generate_math_exercises.py /app/
|
|
|
|
# Change ownership of the app directory to the non-root user
|
|
RUN chown -R appuser:appuser /app
|
|
|
|
# Switch to non-root user
|
|
USER appuser
|
|
|
|
# Expose port
|
|
EXPOSE 8000
|
|
|
|
# Health check
|
|
HEALTHCHECK --interval=30s --timeout=30s --start-period=5s --retries=3 \
|
|
CMD curl -f http://localhost:8000/health || exit 1
|
|
|
|
# Run the application
|
|
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"] |