59 lines
1.5 KiB
Docker
59 lines
1.5 KiB
Docker
# build stage
|
|
FROM python:3.12-slim-bookworm as BUILDER
|
|
|
|
# set environment variables
|
|
ENV PYTHONUNBUFFERED=1 \
|
|
PYTHONDONTWRITEBYTECODE=1 \
|
|
PIP_NO_CACHE_DIR=off \
|
|
PIP_DISABLE_PIP_VERSION_CHECK=ON \
|
|
PIP_DEFAULT_TIMEOUT=100 \
|
|
DEBIAN_FRONTEND=noninteractive \
|
|
POETRY_HOME=/etc/poetry \
|
|
POETRY_VERSION=1.7.1 \
|
|
POETRY_VIRTUALENVS_IN_PROJECT=1 \
|
|
POETRY_VIRTUALENVS_CREATE=1 \
|
|
POETRY_NO_INTERACTION=1 \
|
|
POETRY_CACHE_DIR=/tmp/poetry_cache \
|
|
APP_HOME=/home/app
|
|
|
|
# update system
|
|
RUN apt-get update \
|
|
&& apt-get install -y --no-install-recommends \
|
|
build-essential \
|
|
curl \
|
|
&& apt-get clean
|
|
|
|
# install poetry
|
|
RUN curl -sSL https://install.python-poetry.org | python3 -
|
|
ENV PATH="${POETRY_HOME}/bin:$PATH"
|
|
|
|
# install runtime dependencies
|
|
WORKDIR ${APP_HOME}
|
|
COPY poetry.lock pyproject.toml ./
|
|
RUN --mount=type=cache,target=${POETRY_CACHE_DIR} poetry install \
|
|
--with shared,web_ui
|
|
|
|
# final stage
|
|
FROM python:3.12-slim-bookworm
|
|
|
|
# copy virtualenv made by poetry
|
|
ENV APP_HOME=/home/app \
|
|
VIRTUAL_ENV=/home/app/.venv
|
|
COPY --from=builder ${VIRTUAL_ENV} ${VIRTUAL_ENV}
|
|
ENV PATH="${VIRTUAL_ENV}/bin:${PATH}"
|
|
|
|
# create home directory and app user
|
|
RUN mkdir -p /home/app && \
|
|
addgroup --system app && \
|
|
adduser --system --group app
|
|
|
|
# add code while changing ownership
|
|
WORKDIR $APP_HOME
|
|
COPY --chown=app:app ../shared ./shared
|
|
COPY --chown=app:app ../web_ui/src ./src
|
|
|
|
# change to the app user
|
|
USER app
|
|
|
|
ENTRYPOINT [ "gunicorn", "src.main:server", "-b", "0.0.0.0:8050" ]
|