File size: 1,318 Bytes
27c799c | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | ARG PYTHON_VERSION=3.14-slim
ARG UV_IMAGE_TAG=0.8.22
FROM ghcr.io/astral-sh/uv:${UV_IMAGE_TAG} AS uvbin
FROM python:${PYTHON_VERSION}
ENV PYTHONDONTWRITEBYTECODE=1 \
PYTHONUNBUFFERED=1 \
UV_COMPILE_BYTECODE=1 \
UV_LINK_MODE=copy \
UV_PROJECT_ENVIRONMENT=/opt/venv \
PATH="/opt/venv/bin:$PATH" \
DJANGO_SETTINGS_MODULE=backend.config.development \
PORT=8001
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential \
libpq-dev \
postgresql-client \
curl \
git \
&& rm -rf /var/lib/apt/lists/*
COPY --from=uvbin /uv /uvx /bin/
WORKDIR /app
COPY pyproject.toml uv.lock ./
RUN uv sync --frozen --group dev --no-editable --no-install-project
RUN useradd --create-home --uid 1000 --shell /bin/sh appuser && \
chown -R appuser:appuser /app /opt/venv
COPY --chown=appuser:appuser . .
COPY --chown=appuser:appuser entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
USER appuser
EXPOSE 8001
HEALTHCHECK --interval=30s --timeout=10s --start-period=15s --retries=3 \
CMD curl -fsS "http://127.0.0.1:${PORT}/health/" || exit 1
ENTRYPOINT ["/entrypoint.sh"]
CMD ["sh", "-c", "exec uv run --no-sync uvicorn backend.asgi:application --host 0.0.0.0 --port ${PORT:-8001} --reload --ws auto --log-config uvicorn_log_config.json"]
|