# Use Python 3.12 slim image as base FROM python:3.12-slim # Set environment variables ENV PYTHONDONTWRITEBYTECODE=1 \ PYTHONUNBUFFERED=1 \ PIP_NO_CACHE_DIR=1 \ PIP_DISABLE_PIP_VERSION_CHECK=1 # Set work directory WORKDIR /app # Install system dependencies RUN apt-get update && apt-get install -y \ curl \ && rm -rf /var/lib/apt/lists/* # Install uv for faster Python package management. RUN pip install uv # Copy pyproject.toml and lock file (if exists) COPY pyproject.toml ./ COPY pyproject.lock* ./ # Install Python dependencies using uv RUN uv pip install --system . --no-cache # Copy application code COPY . . # Create a non-root user for security RUN useradd -m -u 1000 appuser && \ chown -R appuser:appuser /app USER appuser # Expose the port the app runs on EXPOSE 7860 # Health check HEALTHCHECK --interval=30s --timeout=30s --start-period=5s --retries=3 \ CMD curl -f http://localhost:7860/health || exit 1 # Run the application CMD uvicorn server.main:app --host 0.0.0.0 --port ${PORT:-7860}