From d7cd59c80fc70e15f78c131cb96ab68b12d3a579 Mon Sep 17 00:00:00 2001 From: Anojh Thayaparan Date: Sat, 20 Jan 2024 20:55:41 -0800 Subject: [PATCH 1/4] Fix Docker builds for circular dependency in project Due to the circular dependency of livewire JS module from composer, without intermediate build stages the Docker build fails during the vite build stage due to missing module. The changes here allow composer install to run then copies the vendor folder to an intermediate stage in order to complete the vite build with the livewire dependency being present. Then the contents are copied back in another intermediate stage to the php environment to complete the build. Signed-off-by: Anojh Thayaparan --- alpine/5/Dockerfile | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/alpine/5/Dockerfile b/alpine/5/Dockerfile index 574f18f..fe75533 100644 --- a/alpine/5/Dockerfile +++ b/alpine/5/Dockerfile @@ -3,7 +3,7 @@ ARG BAK_STORAGE_PATH=/var/www/app/docker-backup-storage/ ARG BAK_PUBLIC_PATH=/var/www/app/docker-backup-public/ # Get Invoice Ninja and install nodejs packages -FROM --platform=$BUILDPLATFORM node:lts-alpine as build +FROM --platform=$BUILDPLATFORM node:lts-alpine as nodebuild # Download Invoice Ninja ARG INVOICENINJA_VERSION @@ -30,9 +30,7 @@ RUN cp -r dist/tinymce_6.4.2/* /var/www/app/public/tinymce_6.4.2/ # Download and extract the latest react application # # Prepare php image -FROM php:${PHP_VERSION}-fpm-alpine as prod - -COPY --from=build / / +FROM php:${PHP_VERSION}-fpm-alpine as phpbuild LABEL maintainer="David Bomba " @@ -90,7 +88,7 @@ ARG BAK_PUBLIC_PATH ENV INVOICENINJA_VERSION $INVOICENINJA_VERSION ENV BAK_STORAGE_PATH $BAK_STORAGE_PATH ENV BAK_PUBLIC_PATH $BAK_PUBLIC_PATH -COPY --from=build --chown=$INVOICENINJA_USER:$INVOICENINJA_USER /var/www/app /var/www/app +COPY --from=nodebuild --chown=$INVOICENINJA_USER:$INVOICENINJA_USER /var/www/app /var/www/app USER $UID WORKDIR /var/www/app @@ -98,7 +96,24 @@ WORKDIR /var/www/app # Do not remove this ENV ENV IS_DOCKER true RUN /usr/local/bin/composer install --no-dev --no-scripts --no-interaction -RUN /usr/local/bin/composer dump-autoload --optimize --no-dev --classmap-authoritative --no-scripts --no-interaction +RUN /usr/local/bin/composer dump-autoload --optimize --no-dev --classmap-authoritative --no-scripts --no-interaction + +FROM --platform=$BUILDPLATFORM nodebuild AS dependencybuild + +COPY --from=phpbuild /var/www/app/vendor /var/www/app/vendor + +# Install node packages +ARG BAK_STORAGE_PATH +ARG BAK_PUBLIC_PATH +RUN --mount=target=/var/www/app/node_modules,type=cache \ + npm install \ + && npm run production \ + && mv /var/www/app/storage $BAK_STORAGE_PATH \ + && mv /var/www/app/public $BAK_PUBLIC_PATH + +FROM phpbuild as prodbuild + +COPY --from=dependencybuild --chown=$INVOICENINJA_USER:$INVOICENINJA_USER /var/www/app /var/www/app WORKDIR /var/www/app/ From 6faf1dc135a19bfa024aad172969f538ac96c58d Mon Sep 17 00:00:00 2001 From: Anojh Thayaparan Date: Sat, 20 Jan 2024 21:00:49 -0800 Subject: [PATCH 2/4] Rename final build stage to prod for CI/CD pipeline setup --- alpine/5/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/alpine/5/Dockerfile b/alpine/5/Dockerfile index fe75533..e66db1b 100644 --- a/alpine/5/Dockerfile +++ b/alpine/5/Dockerfile @@ -111,7 +111,7 @@ RUN --mount=target=/var/www/app/node_modules,type=cache \ && mv /var/www/app/storage $BAK_STORAGE_PATH \ && mv /var/www/app/public $BAK_PUBLIC_PATH -FROM phpbuild as prodbuild +FROM phpbuild as prod COPY --from=dependencybuild --chown=$INVOICENINJA_USER:$INVOICENINJA_USER /var/www/app /var/www/app From 6887e2b30aa503af2aa75b84f8157e5c3cb60e11 Mon Sep 17 00:00:00 2001 From: Anojh Thayaparan Date: Sat, 20 Jan 2024 21:09:28 -0800 Subject: [PATCH 3/4] Revert old approach --- alpine/5/Dockerfile | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/alpine/5/Dockerfile b/alpine/5/Dockerfile index e66db1b..5d5ede4 100644 --- a/alpine/5/Dockerfile +++ b/alpine/5/Dockerfile @@ -115,16 +115,6 @@ FROM phpbuild as prod COPY --from=dependencybuild --chown=$INVOICENINJA_USER:$INVOICENINJA_USER /var/www/app /var/www/app -WORKDIR /var/www/app/ - -# Install node packages -ARG BAK_STORAGE_PATH -ARG BAK_PUBLIC_PATH -RUN npm install -RUN npm run production -RUN mv /var/www/app/storage $BAK_STORAGE_PATH -RUN mv /var/www/app/public $BAK_PUBLIC_PATH - # Override the environment settings from projects .env file ENV APP_ENV production ENV LOG errorlog From fd01abb0a032b8bd12ab3971adec280084187826 Mon Sep 17 00:00:00 2001 From: Anojh Thayaparan Date: Sat, 20 Jan 2024 23:55:07 -0800 Subject: [PATCH 4/4] set workdir to fix npm install step --- alpine/5/Dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/alpine/5/Dockerfile b/alpine/5/Dockerfile index 5d5ede4..5ab90b5 100644 --- a/alpine/5/Dockerfile +++ b/alpine/5/Dockerfile @@ -100,6 +100,8 @@ RUN /usr/local/bin/composer dump-autoload --optimize --no-dev --classmap-authori FROM --platform=$BUILDPLATFORM nodebuild AS dependencybuild +WORKDIR /var/www/app + COPY --from=phpbuild /var/www/app/vendor /var/www/app/vendor # Install node packages