From 5d2f00cd6486f9ab9a5122bddb45cd096443042c Mon Sep 17 00:00:00 2001 From: Karl Muller Date: Tue, 13 May 2025 08:29:27 +0000 Subject: [PATCH] feat: add multistage Docker build --- .gitlab-ci.yml | 2 +- Dockerfile | 43 +++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 42 insertions(+), 3 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 219a6c1..01d9726 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -7,7 +7,7 @@ include: file: 'security/security.yml' - project: 'ldc-web/shared-ci' ref: 'main' - file: 'build/build.yml' + file: 'build/docker-multistage.yml' - project: 'ldc-web/shared-ci' ref: 'main' file: 'test/test.yml' diff --git a/Dockerfile b/Dockerfile index 303e014..e63c3e0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,44 @@ +FROM composer:2.8 AS vendor + +ARG GITLAB_USER +ARG GITLAB_PASSWORD + +COPY database/ database/ + +COPY composer.json composer.json +COPY composer.lock composer.lock + +RUN composer config gitlab-token.lab.s-web.fr ${GITLAB_USER} ${GITLAB_PASSWORD} +RUN composer install \ + --ignore-platform-reqs \ + --no-interaction \ + --no-plugins \ + --no-scripts \ + --no-dev \ + --prefer-dist + +FROM node:20.18 AS frontend + +ARG GITLAB_PASSWORD + +RUN mkdir -p /app/public/build + +COPY package*.json tsconfig.json vite.config.ts .eslintrc.json .stylelintrc.json /app/ +COPY resources/ /app/resources/ +WORKDIR /app +RUN npm config set @ldc-web:registry https://lab.s-web.fr/api/v4/packages/npm/ +RUN npm config set -- '//lab.s-web.fr/api/v4/packages/npm/:_authToken' "${GITLAB_PASSWORD}" +RUN npm ci && npm run prod + FROM registry.s-web.fr/ldc-web/projets/ldc-web-images-docker/ldcweb-production-8.3:latest -COPY --chown=www-data:www-data . /app/srcs + +ARG USER=www-data + +COPY --chown=${USER}:${USER} . /app/srcs +COPY --chown=${USER}:${USER} ./resources/favicon /app/srcs/public +COPY --from=vendor --chown=${USER}:${USER} /app/vendor/ /app/srcs/vendor/ +COPY --from=frontend --chown=${USER}:${USER} /app/public/build/ /app/srcs/public/build/ + USER root RUN chmod -R 755 /app/srcs/storage -USER www-data +USER ${USER}