Move the new Dockerfile to Dockerfile.experimental
authorCode-Otto <redacted>
Fri, 12 Apr 2024 15:35:19 +0000 (17:35 +0200)
committerCode-Otto <redacted>
Fri, 12 Apr 2024 15:35:19 +0000 (17:35 +0200)
 - Moved new Dockerfile to Dockerfile.experimental
 - Restored previous Dockerfile and added pip/pipenv cache cleanup
 - Dockerfile can now choose between su-exec/gosu via an environment variable

Dockerfile
Dockerfile.experimental [new file with mode: 0644]
entrypoint.sh

index 2d874decccb8290d995cf8394484d4142b742458..855b0889612585aa76cf1a99b2ffb1418ff1be2d 100644 (file)
@@ -1,6 +1,6 @@
 ARG BUILD_DIR=/build
 
-# Client Build Container
+# Build Container
 FROM --platform=$BUILDPLATFORM python:3.11-slim-bullseye AS build
 
 ARG BUILD_DIR
@@ -16,31 +16,14 @@ RUN npm ci
 COPY client ./client
 RUN npm run build
 
-# Pipenv Build Container
-FROM python:3.11-alpine3.19 as pipenv-build
-
-ARG BUILD_DIR
-
-ENV APP_PATH=/app
-
-RUN apk add --no-cache build-base rust cargo libffi libffi-dev libssl3 openssl-dev
-
-RUN pip install --no-cache-dir pipenv
-
-WORKDIR ${APP_PATH}
-
-COPY LICENSE Pipfile Pipfile.lock ./
-RUN mkdir .venv
-RUN pipenv install --deploy --ignore-pipfile && \
-    pipenv --clear
-
 # Runtime Container
-FROM python:3.11-alpine3.19
+FROM python:3.11-slim-bullseye
 
 ARG BUILD_DIR
 
 ENV PUID=1000
 ENV PGID=1000
+ENV EXEC_TOOL=gosu
 
 ENV APP_PATH=/app
 ENV FLATNOTES_PATH=/data
@@ -48,13 +31,21 @@ ENV FLATNOTES_PATH=/data
 RUN mkdir -p ${APP_PATH}
 RUN mkdir -p ${FLATNOTES_PATH}
 
-RUN apk add --no-cache su-exec libssl3 libgcc curl
+RUN apt update && apt install -y \
+    curl \
+    gosu \
+    && rm -rf /var/lib/apt/lists/*
+
+RUN pip install --no-cache-dir pipenv
 
 WORKDIR ${APP_PATH}
 
+COPY LICENSE Pipfile Pipfile.lock ./
+RUN pipenv install --deploy --ignore-pipfile --system && \
+    pipenv --clear
+
 COPY server ./server
 COPY --from=build ${BUILD_DIR}/client/dist ./client/dist
-COPY --from=pipenv-build ${APP_PATH}/.venv/lib/python3.11/site-packages/ /usr/local/lib/python3.11/site-packages/
 
 VOLUME /data
 EXPOSE 8080/tcp
diff --git a/Dockerfile.experimental b/Dockerfile.experimental
new file mode 100644 (file)
index 0000000..de217a1
--- /dev/null
@@ -0,0 +1,66 @@
+ARG BUILD_DIR=/build
+
+# Client Build Container
+FROM --platform=$BUILDPLATFORM python:3.11-slim-bullseye AS build
+
+ARG BUILD_DIR
+
+RUN mkdir ${BUILD_DIR}
+WORKDIR ${BUILD_DIR}
+
+RUN apt update && apt install -y npm
+
+COPY package.json package-lock.json .htmlnanorc ./
+RUN npm ci
+
+COPY client ./client
+RUN npm run build
+
+# Pipenv Build Container
+FROM python:3.11-alpine3.19 as pipenv-build
+
+ARG BUILD_DIR
+
+ENV APP_PATH=/app
+
+RUN apk add --no-cache build-base rust cargo libffi libffi-dev libssl3 openssl-dev
+
+RUN pip install --no-cache-dir pipenv
+
+WORKDIR ${APP_PATH}
+
+COPY LICENSE Pipfile Pipfile.lock ./
+RUN mkdir .venv
+RUN pipenv install --deploy --ignore-pipfile && \
+    pipenv --clear
+
+# Runtime Container
+FROM python:3.11-alpine3.19
+
+ARG BUILD_DIR
+
+ENV PUID=1000
+ENV PGID=1000
+ENV EXEC_TOOL=su-exec
+
+ENV APP_PATH=/app
+ENV FLATNOTES_PATH=/data
+
+RUN mkdir -p ${APP_PATH}
+RUN mkdir -p ${FLATNOTES_PATH}
+
+RUN apk add --no-cache su-exec libssl3 libgcc curl
+
+WORKDIR ${APP_PATH}
+
+COPY server ./server
+COPY --from=build ${BUILD_DIR}/client/dist ./client/dist
+COPY --from=pipenv-build ${APP_PATH}/.venv/lib/python3.11/site-packages/ /usr/local/lib/python3.11/site-packages/
+
+VOLUME /data
+EXPOSE 8080/tcp
+HEALTHCHECK --interval=60s --timeout=10s CMD curl -f http://localhost:8080/health || exit 1
+
+COPY entrypoint.sh /
+RUN chmod +x /entrypoint.sh
+ENTRYPOINT [ "/entrypoint.sh" ]
index 30a5bad4d6f634b5241262a2bc8c2a968abea64a..d9fbf3c628944389d2e7bd4a6b3737c2a047a2fc 100644 (file)
@@ -31,7 +31,7 @@ if [ `id -u` -eq 0 ] && [ `id -g` -eq 0 ]; then
     chown -R ${PUID}:${PGID} ${FLATNOTES_PATH}
 
     echo Starting flatnotes as user ${PUID}...
-    exec su-exec ${PUID}:${PGID} ${flatnotes_command}
+    exec ${EXEC_TOOL} ${PUID}:${PGID} ${flatnotes_command}
       
 else
     echo "A user was set by docker, skipping file permission changes."
git clone https://git.99rst.org/PROJECT