32 lines
1.3 KiB
Docker
32 lines
1.3 KiB
Docker
FROM python:3.14-slim-trixie AS build
|
|
COPY --from=ghcr.io/astral-sh/uv:0.13.6 /uv /bin/uv
|
|
# mysqlclient ships no wheels
|
|
RUN apt-get update \
|
|
&& apt-get install -y --no-install-recommends build-essential pkg-config default-libmysqlclient-dev \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
# Outside /app, so a code change leaves the venv layer alone
|
|
ENV UV_COMPILE_BYTECODE=1 UV_LINK_MODE=copy UV_PYTHON_DOWNLOADS=never UV_PROJECT_ENVIRONMENT=/venv
|
|
WORKDIR /app
|
|
COPY pyproject.toml uv.lock ./
|
|
RUN uv sync --locked --no-dev --group prod --no-install-project
|
|
COPY . .
|
|
RUN DJANGO_SETTINGS_MODULE=dpdapisite.settings_prod SECRET_KEY=collectstatic DB_PASSWORD=collectstatic \
|
|
/venv/bin/python manage.py collectstatic --noinput
|
|
|
|
FROM python:3.14-slim-trixie
|
|
RUN apt-get update \
|
|
&& apt-get install -y --no-install-recommends libmariadb3 \
|
|
&& rm -rf /var/lib/apt/lists/* \
|
|
&& useradd --system --uid 934 --home-dir /app --no-create-home mxapi
|
|
COPY --from=build /venv /venv
|
|
COPY --from=build /app /app
|
|
WORKDIR /app
|
|
ARG SENTRY_RELEASE=N/A
|
|
ENV PATH=/venv/bin:$PATH \
|
|
DJANGO_SETTINGS_MODULE=dpdapisite.settings_prod \
|
|
PYTHONUNBUFFERED=1 \
|
|
SENTRY_RELEASE=$SENTRY_RELEASE
|
|
USER mxapi
|
|
EXPOSE 8000
|
|
CMD ["gunicorn", "--bind", "0.0.0.0:8000", "--workers", "2", "--no-control-socket", "--access-logfile", "-", "dpdapisite.wsgi"]
|