diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..4fc93d7 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,35 @@ +FROM python:3.11-slim as python-base +ENV PYTHONUNBUFFERED=1 \ + PYTHONDONTWRITEBYTECODE=1 \ + POETRY_HOME="/opt/poetry" \ + POETRY_VIRTUALENVS_IN_PROJECT=true \ + POETRY_NO_INTERACTION=1 \ + PYSETUP_PATH="/opt/venv" \ + VENV_PATH="/opt/venv/.venv" +ENV PATH="$POETRY_HOME/bin:$VENV_PATH/bin:$PATH" + +FROM python-base as builder-base +RUN apt-get update && \ + apt-get install -y --no-install-recommends \ + curl build-essential gcc libffi-dev libssl-dev \ + libxml2-dev libxslt1-dev zlib1g-dev libxslt-dev \ + gcc libjpeg-dev zlib1g-dev libwebp-dev + +RUN curl -sSL https://install.python-poetry.org | python3 - +WORKDIR $PYSETUP_PATH +COPY poetry.lock pyproject.toml ./ +RUN poetry install + +FROM python-base as production +RUN apt-get update && \ + apt-get install -y --no-install-recommends \ + libjpeg-dev libxslt1-dev libxml2-dev libxslt-dev +COPY --from=builder-base /opt /opt +COPY . /app/ +RUN groupadd --gid 1000 foxhole \ + && useradd --uid 1000 --gid foxhole --shell /bin/bash foxhole +RUN chown -R 1000:1000 /app +USER foxhole +WORKDIR /app +EXPOSE 7000 +CMD ["./misc/start.sh"] diff --git a/misc/start.sh b/misc/start.sh new file mode 100755 index 0000000..50911d8 --- /dev/null +++ b/misc/start.sh @@ -0,0 +1,2 @@ +#!/bin/sh +uvicorn app.main:app --port 7000