From 46963c85435d4254f1b0c19b9838b6078bdfc429 Mon Sep 17 00:00:00 2001
From: David Trattnig <david@subsquare.at>
Date: Sun, 5 Feb 2023 11:06:07 +0100
Subject: [PATCH] refact: improve docker build with Poetry & perms

---
 Dockerfile | 47 +++++++++++++++++++++++++++++------------------
 1 file changed, 29 insertions(+), 18 deletions(-)

diff --git a/Dockerfile b/Dockerfile
index f72e9dc..c64ace7 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,35 +1,46 @@
-FROM python:3.9-slim
-LABEL maintainer="David Trattnig <david.trattnig@subsquare.at>"
+FROM python:3.10-slim as base
+LABEL maintainer="David Trattnig <david@subsquare.at>"
 
-# System Dependencies
+ENV UID=1000
+ENV GID=1000
+ENV USER=app
+
+# Configure Poetry
+ENV POETRY_VERSION=1.3.2
+ENV POETRY_HOME=/opt/poetry
+ENV POETRY_VENV=/opt/poetry-venv
+ENV POETRY_CACHE_DIR=/opt/.cache
 
+# System Dependencies
 RUN apt-get update && apt-get -y install \
     apt-utils \
     build-essential \
     pip
-RUN python3 -m pip install --upgrade pip
-RUN pip install poetry
 
-# Construct Image
+# Setup Poetry
+RUN python3 -m venv $POETRY_VENV \
+    && $POETRY_VENV/bin/pip install -U pip setuptools \
+    && $POETRY_VENV/bin/pip install poetry==${POETRY_VERSION}
+ENV PATH="${PATH}:${POETRY_VENV}/bin"
 
-RUN mkdir -p /srv
-RUN mkdir -p /srv/src
-RUN mkdir -p /srv/config
-RUN mkdir -p /var/log/aura
+# Base Structure
+RUN mkdir -p /srv/src/aura_engine_api /srv/config /srv/logs /etc/aura
+COPY pyproject.toml poetry.lock README.md Makefile /srv/
 
-COPY src /srv/src
+WORKDIR /srv
+
+# Init Application
+COPY ./src/aura_engine_api /srv/src/aura_engine_api
 COPY ./config/sample/gunicorn/sample-docker.gunicorn.conf.py /srv/config/gunicorn.conf.py
 COPY ./config/sample.engine-api.docker.ini /srv/config/engine-api.ini
-COPY pyproject.toml /srv
-COPY poetry.lock /srv
-COPY README.md /srv
-COPY Makefile /srv
+RUN poetry install --no-interaction --no-ansi
 
-WORKDIR /srv
-RUN poetry install --without dev --no-interaction
+# Update Permissions
+RUN set -e \
+      && adduser --home /srv --no-create-home --system --uid ${UID} --group ${USER} \
+      && chown -R ${UID}:${GID} /srv /etc/aura
 
 # Start Service
-
 EXPOSE 8008
 ENTRYPOINT ["make"]
 CMD ["run"]
-- 
GitLab