From d2f94c7bec2c497cc6b6050d88b0244caaef0e86 Mon Sep 17 00:00:00 2001
From: Jan Dittberner <jan@dittberner.info>
Date: Sun, 19 Feb 2023 15:53:00 +0100
Subject: [PATCH] Fix Dockerfile for poetry

---
 Dockerfile | 68 ++++++++++++++++++++++++++++++++----------------------
 gva.sh     |  2 +-
 2 files changed, 41 insertions(+), 29 deletions(-)

diff --git a/Dockerfile b/Dockerfile
index 53ba4cc..be47096 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,51 +1,63 @@
 ARG DEBIAN_RELEASE=buster
-FROM debian:$DEBIAN_RELEASE
-LABEL maintainer="Jan Dittberner <jan@dittberner.info>"
+FROM debian:$DEBIAN_RELEASE AS builder
+
+ARG GVAAPP=gva
+ARG POETRY_VERSION=1.3.1
 
 ENV LC_ALL=C.UTF-8
 ENV LANG=C.UTF-8
+ENV DEBIAN_FRONTEND=noninteractive
 
 RUN apt-get update \
-    && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
-    build-essential \
-    dumb-init \
-    gettext \
-    git \
-    python3-dev \
-    python3-pip \
-    python3-setuptools \
-    python3-virtualenv \
-    python3-wheel \
-    && apt-get clean \
-    && rm -rf /var/lib/apt/lists/*.*
+    && apt-get install -y --no-install-recommends \
+      build-essential \
+      curl \
+      git \
+      libpq-dev \
+      python3-dev \
+      python3-setuptools \
+      python3-virtualenv \
+      python3-wheel
 
-RUN python3 -m pip install --prefix=/usr/local pipenv
+RUN curl -sSL https://install.python-poetry.org | POETRY_HOME=/root/.local POETRY_VERSION=$POETRY_VERSION python3 - \
+    && /root/.local/bin/poetry config virtualenvs.in-project true
+
+WORKDIR /srv/$GVAAPP
+
+COPY poetry.lock pyproject.toml /srv/$GVAAPP/
+
+RUN /root/.local/bin/poetry install --only=main
+
+FROM debian:$DEBIAN_RELEASE
+LABEL maintainer="Jan Dittberner <jan@dittberner.info>"
 
 RUN apt-get update \
-    && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
-    libpq-dev \
-    postgresql-client \
+    && apt-get install -y --no-install-recommends \
+       ca-certificates \
+       dumb-init \
+       gettext \
+       postgresql-client \
+       python3 \
+       python3-pip \
+       python3-wheel \
     && apt-get clean \
-    && rm -rf /var/lib/apt/lists/*.*
-
-ARG GVAGID=2000
-ARG GVAUID=2000
+    && rm -rf /var/cache/apt/archives /var/lib/apt/lists/*
 
 ARG GVAAPP=gva
+ARG GVAGID=2000
+ARG GVAUID=2000
 
 VOLUME /srv/$GVAAPP/media /srv/$GVAAPP/static
 
 WORKDIR /srv/$GVAAPP
 
-COPY Pipfile Pipfile.lock /srv/$GVAAPP/
-
 RUN addgroup --gid $GVAGID $GVAAPP ; \
-    adduser --home /home/$GVAAPP --shell /bin/bash --uid $GVAUID --gid $GVAGID --disabled-password --gecos "User for gnuviechadmin component $GVAAPP" $GVAAPP
+    adduser --home /home/$GVAAPP --shell /bin/bash --uid $GVAUID --gid $GVAGID --disabled-password \
+            --gecos "User for gnuviechadmin component $GVAAPP" $GVAAPP
+
+COPY --chown=$GVAAPP:$GVAAPP --from=builder /srv/$GVAAPP/.venv /srv/$GVAAPP/.venv
 
 USER $GVAAPP
-RUN python3 -m virtualenv --python=python3 /home/$GVAAPP/$GVAAPP-venv ; \
-    /home/$GVAAPP/$GVAAPP-venv/bin/python3 -m pip install -U pip ; \
-    VIRTUAL_ENV=/home/$GVAAPP/$GVAAPP-venv pipenv install --deploy --ignore-pipfile --dev
 
 VOLUME /srv/$GVAAPP
 
diff --git a/gva.sh b/gva.sh
index 4b0f3c2..3ca009c 100755
--- a/gva.sh
+++ b/gva.sh
@@ -15,7 +15,7 @@ done
 
 echo " db is ready"
 
-. /home/gva/gva-venv/bin/activate
+. /srv/gva/.venv/bin/activate
 cd /srv/gva/gnuviechadmin
 python3 manage.py compilemessages
 python3 manage.py collectstatic --noinput