From c40d22427a7f393260dc0886bf8c2f8b44dceefd Mon Sep 17 00:00:00 2001 From: Ploc <391-ploc@users.noreply.framagit.org> Date: Fri, 18 Jun 2021 11:30:48 +0200 Subject: [PATCH 1/9] feat: expose container port --- Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/Dockerfile b/Dockerfile index bbee699..ce57106 100644 --- a/Dockerfile +++ b/Dockerfile @@ -19,5 +19,6 @@ WORKDIR /home/lutim RUN /bin/sh /home/lutim/docker/build.sh USER lutim +EXPOSE 8080 ENTRYPOINT ["/bin/sh", "/home/lutim/docker/entrypoint.sh"] \ No newline at end of file From e17a51d8d55c21cf51e7e40849c566a291e0a11e Mon Sep 17 00:00:00 2001 From: Ploc <391-ploc@users.noreply.framagit.org> Date: Fri, 18 Jun 2021 11:31:11 +0200 Subject: [PATCH 2/9] chore: update alpine package list on package install --- docker/build.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docker/build.sh b/docker/build.sh index fd1e763..1750c76 100644 --- a/docker/build.sh +++ b/docker/build.sh @@ -2,8 +2,7 @@ set -eu -apk update -apk add perl libpq perl-crypt-rijndael perl-io-socket-ssl perl-net-ssleay su-exec shared-mime-info libressl +apk --update add perl libpq perl-crypt-rijndael perl-io-socket-ssl perl-net-ssleay su-exec shared-mime-info libressl sh $(dirname $0)/install-dev-env.sh sh $(dirname $0)/install-imagemagick.sh From 87efb615bb2bd278e8a33d1dc88d6ca49a2aedf6 Mon Sep 17 00:00:00 2001 From: Ploc <391-ploc@users.noreply.framagit.org> Date: Fri, 3 Dec 2021 10:35:01 +0100 Subject: [PATCH 3/9] feat: container is able to run as non-root --- Dockerfile | 7 +++++-- docker/build.sh | 0 docker/entrypoint.sh | 0 3 files changed, 5 insertions(+), 2 deletions(-) mode change 100644 => 100755 docker/build.sh mode change 100644 => 100755 docker/entrypoint.sh diff --git a/Dockerfile b/Dockerfile index ce57106..71d22a1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,8 +12,11 @@ LABEL org.label-schema.build-date=$BUILD_DATE \ org.label-schema.version=$VERSION \ org.label-schema.schema-version="1.0" -RUN adduser -D lutim -COPY --chown=lutim:lutim . /home/lutim +RUN adduser -D lutim \ + && addgroup lutim root + +COPY . /home/lutim +RUN chmod -R g+rwX /home/lutim WORKDIR /home/lutim RUN /bin/sh /home/lutim/docker/build.sh diff --git a/docker/build.sh b/docker/build.sh old mode 100644 new mode 100755 diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh old mode 100644 new mode 100755 From 3dd1fdca56a173b20dd31eb6627b265d19ccb00a Mon Sep 17 00:00:00 2001 From: Ploc <391-ploc@users.noreply.framagit.org> Date: Fri, 18 Jun 2021 11:18:26 +0200 Subject: [PATCH 4/9] chore: use imagemagick package from alpine Use imagemagick package from alpine instead of rebuilding it from source. --- docker/build.sh | 4 +--- docker/install-imagemagick.sh | 40 ----------------------------------- 2 files changed, 1 insertion(+), 43 deletions(-) delete mode 100644 docker/install-imagemagick.sh diff --git a/docker/build.sh b/docker/build.sh index 1750c76..964ac57 100755 --- a/docker/build.sh +++ b/docker/build.sh @@ -2,11 +2,9 @@ set -eu -apk --update add perl libpq perl-crypt-rijndael perl-io-socket-ssl perl-net-ssleay su-exec shared-mime-info libressl +apk --update add perl libpq perl-crypt-rijndael perl-io-socket-ssl perl-net-ssleay su-exec shared-mime-info libressl imagemagick imagemagick-perlmagick sh $(dirname $0)/install-dev-env.sh -sh $(dirname $0)/install-imagemagick.sh - cpan notest Carton Config::FromHash carton install --without test diff --git a/docker/install-imagemagick.sh b/docker/install-imagemagick.sh deleted file mode 100644 index 5a4f73f..0000000 --- a/docker/install-imagemagick.sh +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/env sh - -# Instructions from https://imagemagick.org/script/perl-magick.php - -set -eu - -IM_VERSION=7.0.8-41 -SHA256_DIGEST=93f73a245c25194f757c075df9f2ec40010376200cc664c21646565b8690112c - -IM_DIR="ImageMagick-$IM_VERSION" -TARBALL="$IM_DIR.tar.gz" - -ORIG_DIR="$(pwd)" - -apk add libgomp libgcc libmagic \ - libjpeg libjpeg-turbo-dev \ - libpng libpng-dev \ - tiff tiff-dev \ - libwebp libwebp-dev - -mkdir -p /tmp/im-build -cd /tmp/im-build - -echo "$SHA256_DIGEST *$TARBALL" > SHA256SUM - -wget https://imagemagick.org/download/$TARBALL -O $TARBALL -sha256sum -c SHA256SUM - -tar xvf $TARBALL -cd $IM_DIR -./configure --with-perl --with-jpeg --with-png --with-tiff --with-webp -make -j$(nproc) -make install - -ldconfig /usr/local/lib -perl -MImage::Magick -le 'print Image::Magick->QuantumDepth' - -cd "$ORIG_DIR" -apk del libjpeg-turbo-dev libpng-dev tiff-dev libwebp-dev -rm -rf /tmp/im-build \ No newline at end of file From 7d845b9e6422f7d2d66d7dad4586ec00b83598fd Mon Sep 17 00:00:00 2001 From: Ploc <391-ploc@users.noreply.framagit.org> Date: Fri, 18 Jun 2021 12:18:40 +0200 Subject: [PATCH 5/9] chore: merge subshell into shell Merge install-dev-env.sh subshell into build.sh shell. --- docker/build.sh | 2 +- docker/install-dev-env.sh | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) delete mode 100644 docker/install-dev-env.sh diff --git a/docker/build.sh b/docker/build.sh index 964ac57..b6f83ad 100755 --- a/docker/build.sh +++ b/docker/build.sh @@ -3,7 +3,7 @@ set -eu apk --update add perl libpq perl-crypt-rijndael perl-io-socket-ssl perl-net-ssleay su-exec shared-mime-info libressl imagemagick imagemagick-perlmagick -sh $(dirname $0)/install-dev-env.sh +apk --update add --virtual .build-deps build-base perl-utils perl-dev postgresql-dev vim wget zlib-dev cpan notest Carton Config::FromHash carton install --without test diff --git a/docker/install-dev-env.sh b/docker/install-dev-env.sh deleted file mode 100644 index 2f219d7..0000000 --- a/docker/install-dev-env.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env sh - -apk --update add --virtual .build-deps build-base perl-utils perl-dev postgresql-dev vim wget zlib-dev \ No newline at end of file From 124ca306b40fbea75bae4a343c8e4e46ee58bf1c Mon Sep 17 00:00:00 2001 From: Ploc <391-ploc@users.noreply.framagit.org> Date: Fri, 18 Jun 2021 17:03:52 +0200 Subject: [PATCH 6/9] chore: merge shell into Dockerfile Merge build.sh shell into Dockerfile. --- Dockerfile | 7 ++++++- docker/build.sh | 13 ------------- 2 files changed, 6 insertions(+), 14 deletions(-) delete mode 100755 docker/build.sh diff --git a/Dockerfile b/Dockerfile index 71d22a1..f9c238a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -19,7 +19,12 @@ COPY . /home/lutim RUN chmod -R g+rwX /home/lutim WORKDIR /home/lutim -RUN /bin/sh /home/lutim/docker/build.sh +RUN apk --update add perl libpq perl-crypt-rijndael perl-io-socket-ssl perl-net-ssleay su-exec shared-mime-info libressl imagemagick imagemagick-perlmagick \ + && apk --update add --virtual .build-deps build-base perl-utils perl-dev postgresql-dev vim wget zlib-dev \ + && cpan notest Carton Config::FromHash \ + && carton install --without test \ + && apk del .build-deps \ + && rm -rf /var/cache/apk/* /root/.cpan* USER lutim EXPOSE 8080 diff --git a/docker/build.sh b/docker/build.sh deleted file mode 100755 index b6f83ad..0000000 --- a/docker/build.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env sh - -set -eu - -apk --update add perl libpq perl-crypt-rijndael perl-io-socket-ssl perl-net-ssleay su-exec shared-mime-info libressl imagemagick imagemagick-perlmagick -apk --update add --virtual .build-deps build-base perl-utils perl-dev postgresql-dev vim wget zlib-dev - -cpan notest Carton Config::FromHash -carton install --without test - -# Remove dev env -apk del .build-deps -rm -rf /var/cache/apk/* /root/.cpan* \ No newline at end of file From 17c862ae19513d2d48076537e7f06c10e24c7962 Mon Sep 17 00:00:00 2001 From: Ploc <391-ploc@users.noreply.framagit.org> Date: Fri, 3 Dec 2021 10:48:38 +0100 Subject: [PATCH 7/9] chore: update alpine docker source image Update alpine docker source image from version 3.9 to version 3.15. --- Dockerfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index f9c238a..4df2b64 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM alpine:3.9 +FROM alpine:3.15 ARG BUILD_DATE ARG VCS_REF @@ -19,8 +19,8 @@ COPY . /home/lutim RUN chmod -R g+rwX /home/lutim WORKDIR /home/lutim -RUN apk --update add perl libpq perl-crypt-rijndael perl-io-socket-ssl perl-net-ssleay su-exec shared-mime-info libressl imagemagick imagemagick-perlmagick \ - && apk --update add --virtual .build-deps build-base perl-utils perl-dev postgresql-dev vim wget zlib-dev \ +RUN apk --update add perl libpq perl-crypt-rijndael perl-io-socket-ssl perl-net-ssleay su-exec shared-mime-info libretls imagemagick imagemagick-perlmagick \ + && apk --update add --virtual .build-deps build-base perl-utils perl-dev postgresql14-dev vim wget zlib-dev \ && cpan notest Carton Config::FromHash \ && carton install --without test \ && apk del .build-deps \ From 4486b32da583cd0d20d09591e72b3c5e5687d271 Mon Sep 17 00:00:00 2001 From: Ploc <391-ploc@users.noreply.framagit.org> Date: Fri, 18 Jun 2021 18:35:57 +0200 Subject: [PATCH 8/9] fix: image label name Fix the label "name" of the image so that kaniko build does not fail: > error building image: error building stage: failed to execute command: failed to process "Let's Upload That Image": unexpected end of statement while looking for matching single-quote --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 4df2b64..2dc9be7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,7 +4,7 @@ ARG BUILD_DATE ARG VCS_REF ARG VERSION LABEL org.label-schema.build-date=$BUILD_DATE \ - org.label-schema.name="Let's Upload That Image" \ + org.label-schema.name="Lets Upload That Image" \ org.label-schema.url="https://lut.im/" \ org.label-schema.vcs-ref=$VCS_REF \ org.label-schema.vcs-url="https://git.framasoft.org/luc/lutim" \ From 52b436657fa035bd50f38a87235a3095fe37fa62 Mon Sep 17 00:00:00 2001 From: Ploc <391-ploc@users.noreply.framagit.org> Date: Fri, 18 Jun 2021 18:28:19 +0200 Subject: [PATCH 9/9] fix: follow hadolint hints Follow hadolint best practices in order to have a docker build that is as reliable as possible. - first best practice is to "Pin versions in apk add. Instead of `apk add ` use `apk add =`" (see [DL3018](https://github.com/hadolint/hadolint/wiki/DL3018)) - second best practice is to use "`--no-cache` switch to avoid the need to use `--update`" --- Dockerfile | 20 ++++++++++++++++++-- docker/entrypoint.sh | 6 +++--- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index 2dc9be7..e809dcb 100644 --- a/Dockerfile +++ b/Dockerfile @@ -19,8 +19,24 @@ COPY . /home/lutim RUN chmod -R g+rwX /home/lutim WORKDIR /home/lutim -RUN apk --update add perl libpq perl-crypt-rijndael perl-io-socket-ssl perl-net-ssleay su-exec shared-mime-info libretls imagemagick imagemagick-perlmagick \ - && apk --update add --virtual .build-deps build-base perl-utils perl-dev postgresql14-dev vim wget zlib-dev \ +RUN apk --no-cache add perl~=5 \ + libpq~=14 \ + perl-crypt-rijndael~=1 \ + perl-io-socket-ssl~=2 \ + perl-net-ssleay~=1 \ + su-exec~=0.2 \ + shared-mime-info~=2 \ + libretls~=3 \ + imagemagick~=7 \ + imagemagick-perlmagick~=7 \ + bash~=~5 \ + && apk --no-cache add --virtual .build-deps build-base~=0.5 \ + perl-utils~=5 \ + perl-dev~=5 \ + postgresql14-dev~=14 \ + vim~=8 \ + wget~=1 \ + zlib-dev~=1 \ && cpan notest Carton Config::FromHash \ && carton install --without test \ && apk del .build-deps \ diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh index 4fe4050..360d818 100755 --- a/docker/entrypoint.sh +++ b/docker/entrypoint.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash set -eu @@ -14,7 +14,7 @@ then echo "" echo "You can then install the build dependencies with this command" echo " sh ~lutim/docker/install-dev-env.sh" - + tail -f /dev/null exit 0 fi @@ -28,7 +28,7 @@ then DB_HOST=$(perl utilities/read_conf.pl pgdb/host db) DB_PORT=$(perl utilities/read_conf.pl pgdb/port 5432) fi -if [ -n "$DB_HOST" -a -n "$DB_PORT" ] +if [ -n "$DB_HOST" ] && [ -n "$DB_PORT" ] then while ! nc -vz "${DB_HOST}" "${DB_PORT}"; do echo "Waiting for database..."