- Replace pip with UV for faster dependency installation - Switch base image from python:3.11-slim to debian:bookworm-slim - Add SECURE_PROXY_SSL_HEADER for production SSL proxy support - Optimize Docker layer caching by copying dependency files first - Move database migration to build time for faster container startup - Enhance Gunicorn logging with access and error log streams - Update dependency management from requirements.txt to pyproject.toml These changes improve build performance, production security, and container startup time while modernizing the dependency management workflow.
37 lines
1.0 KiB
Plaintext
37 lines
1.0 KiB
Plaintext
FROM debian:bookworm-slim
|
|
|
|
# Set environment variables
|
|
ENV PYTHONDONTWRITEBYTECODE 1
|
|
ENV PYTHONUNBUFFERED 1
|
|
|
|
# Set work directory
|
|
WORKDIR /app
|
|
|
|
RUN apt-get update && apt-get install -y \
|
|
build-essential \
|
|
curl wget \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
RUN curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
ENV PATH="/root/.local/bin:${PATH}"
|
|
|
|
# Copy only the dependency definitions first to leverage Docker's layer caching
|
|
COPY pyproject.toml uv.lock .python-version ./
|
|
|
|
# Install Python dependencies for production
|
|
RUN uv sync --no-group dev --group prod
|
|
|
|
# Copy the rest of the application code into the container
|
|
COPY . .
|
|
|
|
# Collect the static files
|
|
RUN uv run --no-sync ./manage.py collectstatic --noinput
|
|
|
|
# Migrate the database
|
|
RUN uv run --no-sync ./manage.py migrate
|
|
|
|
# Expose the port Gunicorn will run on
|
|
EXPOSE 8000
|
|
|
|
# Run with gunicorn
|
|
CMD ["uv", "run", "--no-sync", "gunicorn", "--bind", "0.0.0.0:8000", "--workers", "3", "--access-logfile", "-", "--error-logfile", "-", "--log-level", "info", "config.wsgi:application"] |