94 lines
1.9 KiB
Docker
94 lines
1.9 KiB
Docker
ARG PYTHON_VERSION=3.13
|
|
ARG CODENAME=bookworm
|
|
ARG UV_PROJECT_ENVIRONMENT=/home/runner/.venv
|
|
|
|
FROM python:${PYTHON_VERSION}-slim-${CODENAME} AS runtime
|
|
|
|
ARG POSTGRES_VERSION=17
|
|
ARG CODENAME
|
|
|
|
ENV PYTHONUNBUFFERED=1 \
|
|
PIP_DISABLE_PIP_VERSION_CHECK=on \
|
|
DEBIAN_FRONTEND=noninteractive
|
|
|
|
RUN : \
|
|
&& apt-get update \
|
|
&& apt-get install -y \
|
|
gnupg \
|
|
wget \
|
|
gettext \
|
|
&& rm -rf /var/lib/apt/lists* \
|
|
&& :
|
|
|
|
|
|
RUN : \
|
|
&& echo "deb https://apt.postgresql.org/pub/repos/apt ${CODENAME}-pgdg main" > /etc/apt/sources.list.d/pgdg.list \
|
|
&& wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add - \
|
|
&& apt-get update \
|
|
&& apt-get install -y \
|
|
libpq-dev \
|
|
&& rm -rf /var/lib/apt/lists* \
|
|
&& :
|
|
|
|
RUN adduser --disabled-password runner
|
|
|
|
COPY --from=ghcr.io/astral-sh/uv:latest /uv /bin/
|
|
|
|
FROM runtime AS deps
|
|
|
|
ARG POSTGRES_VERSION
|
|
|
|
RUN : \
|
|
&& apt-get update \
|
|
&& apt-get install -y \
|
|
build-essential \
|
|
postgresql-client-${POSTGRESQL_VERSION} \
|
|
&& rm -rf /var/lib/apt/lists* \
|
|
&& :
|
|
|
|
USER runner
|
|
|
|
WORKDIR /app
|
|
|
|
ARG UV_PROJECT_ENVIRONMENT
|
|
|
|
ENV UV_PROJECT_ENVIRONMENT=${UV_PROJECT_ENVIRONMENT} \
|
|
UV_PYTHON_DOWNLOADS=never
|
|
|
|
RUN --mount=type=bind,target=/app,source=. \
|
|
: \
|
|
&& uv sync --frozen \
|
|
&& :
|
|
|
|
ENTRYPOINT [ "/app/scripts/entrypoint.sh" ]
|
|
|
|
FROM deps AS dev
|
|
|
|
ARG UID=1000
|
|
ARG GID=1000
|
|
|
|
USER root
|
|
|
|
RUN usermod -u ${UID} runner && groupmod -g ${GID} runner
|
|
|
|
ENV PATH=${UV_PROJECT_ENVIRONMENT}/bin:${PATH}
|
|
|
|
WORKDIR /app
|
|
USER runner
|
|
|
|
CMD [ "/app/scripts/run-dev.sh" ]
|
|
|
|
FROM runtime AS release
|
|
|
|
ARG UV_PROJECT_ENVIRONMENT
|
|
ENV UV_PROJECT_ENVIRONMENT=${UV_PROJECT_ENVIRONMENT}
|
|
|
|
ENV PATH=${UV_PROJECT_ENVIRONMENT}/bin:${PATH}
|
|
|
|
WORKDIR /app
|
|
COPY --chown=runner:runner ./ ./
|
|
COPY --from=deps --chown=runner:runner ${UV_PROJECT_ENVIRONMENT} ${UV_PROJECT_ENVIRONMENT}
|
|
|
|
USER runner
|
|
|
|
CMD [ "/app/scripts/run.sh" ]
|