# 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 --without model # 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 ./core ./core 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" ]