diff --git a/PHP8.5/QA/Dockerfile b/PHP8.5/QA/Dockerfile index 04347ab..a4d44d0 100644 --- a/PHP8.5/QA/Dockerfile +++ b/PHP8.5/QA/Dockerfile @@ -1,101 +1,118 @@ -FROM php:8.5-cli-trixie +# Stage n°1: builder. +# Cette étape ne sert qu'à l'installation et la compilation des extensions php. +# Une fois fait, on copie les fichiers compilés vers le stage base, +# et on supprime celui-là qui n'est donc plus utile, on gagne à peu près ~586MB. +FROM php:8.5.4-cli-alpine AS builder +# Utilisation de l'image docker php:8.5-cli-alpine: https://hub.docker.com/layers/library/php/8.5.4-cli-alpine/images +# Bien plus légère que l'ancienne image php:8.5.4-apache-trixie. +# Récupération de la valeur de l'argument passé lors de la commande pour utiliser notre proxy. ARG http_proxy -ENV http_proxy=${http_proxy} -ENV https_proxy=${http_proxy} -ENV HTTP_PROXY=${http_proxy} -ENV HTTPS_PROXY=${http_proxy} +# Définit des variables d'environnement dans l'image sous plusieurs formats car ça peu varier selon les outils. +ENV http_proxy=${http_proxy} \ + https_proxy=${http_proxy} \ + HTTP_PROXY=${http_proxy} \ + HTTPS_PROXY=${http_proxy} -RUN apt-get update -qq && \ - apt-get install -qy \ - # Common - nano \ - vim \ - # GD - libfreetype6-dev \ - libjpeg62-turbo-dev \ - libpng-dev \ - libwebp-dev \ - libxpm-dev \ - # INTL - zlib1g-dev libicu-dev g++ \ - # XSL - libxslt-dev \ - # ZIP - libzip-dev \ - unzip \ +# Installation des packages nécessaires à la compilation des extensions php. +RUN apk add --no-cache \ + freetype-dev jpeg-dev libpng-dev libwebp-dev libxpm-dev \ + zlib-dev icu-dev libxslt-dev libzip-dev \ + imagemagick-dev \ + libmemcached-dev cyrus-sasl-dev \ + openldap-dev \ + oniguruma-dev gettext-dev gmp-dev \ + linux-headers \ + g++ autoconf libtool pkgconfig alpine-sdk + +# Installation des extensions php natives. +RUN docker-php-ext-configure gd --enable-gd --with-webp --with-jpeg --with-xpm --with-freetype \ + && docker-php-ext-configure zip --with-zip \ + && docker-php-ext-install -j"$(nproc)" \ + exif \ + gd \ + gettext \ + intl \ + mysqli \ + pdo_mysql \ + xsl \ zip \ - #GMP - libgmp-dev \ - # Imagick - libmagick++-dev \ - libmagickwand-dev \ - # Memcached - libmemcached-dev \ - # ldap - ldap-utils libldap2-dev \ - # locales - locales + bcmath \ + ldap \ + gmp -# LOCALES -ENV DEBIAN_FRONTEND=noninteractive -RUN echo "fr_FR.UTF-8 UTF-8" > /etc/locale.gen && \ - locale-gen fr_FR.UTF-8 && \ - dpkg-reconfigure locales && \ - /usr/sbin/update-locale LANG=fr_FR.UTF-8 -ENV LC_ALL=fr_FR.UTF-8 -ENV LANG=fr_FR.UTF-8 -ENV LANGUAGE=fr_FR.UTF-8:fr -# END LOCALES +# PECL maintenant déprécié, on installe directement les extensions souhaitées depuis github. +RUN \ + curl -fsSL https://github.com/Imagick/imagick/archive/refs/tags/3.8.1.tar.gz -o /tmp/imagick.tar.gz \ + && tar -xzf /tmp/imagick.tar.gz -C /tmp \ + && cd /tmp/imagick-3.8.1 \ + && phpize && ./configure && make -j"$(nproc)" && make install \ + && rm -rf /tmp/imagick* \ + \ + && curl -fsSL https://github.com/php-memcached-dev/php-memcached/archive/refs/tags/v3.4.0.tar.gz -o /tmp/memcached.tar.gz \ + && tar -xzf /tmp/memcached.tar.gz -C /tmp \ + && cd /tmp/php-memcached-3.4.0 \ + && phpize && ./configure && make -j"$(nproc)" && make install \ + && rm -rf /tmp/memcached* \ + \ + && curl -fsSL https://github.com/krakjoe/pcov/archive/refs/tags/v1.0.12.tar.gz -o /tmp/pcov.tar.gz \ + && tar -xzf /tmp/pcov.tar.gz -C /tmp \ + && cd /tmp/pcov-1.0.12 \ + && phpize && ./configure && make -j"$(nproc)" && make install \ + && rm -rf /tmp/pcov* -RUN docker-php-ext-configure gd \ - --enable-gd \ - --with-webp \ - --with-jpeg \ - --with-xpm \ - --with-freetype +# Stage n°2: base. +# Image finale qui sera utilisée sans compilateurs. +FROM php:8.5.4-cli-alpine AS base -RUN docker-php-ext-configure intl -RUN docker-php-ext-configure zip --with-zip -RUN docker-php-ext-configure ldap -RUN docker-php-ext-install exif gd gettext intl mysqli pdo_mysql xsl zip bcmath ldap gmp +# Récupération de la valeur de l'argument passé lors de la commande pour utiliser notre proxy. +ARG http_proxy -# PECL PROXY HACK -RUN if [ -n "${http_proxy}" ]; then \ - pear config-set http_proxy "${http_proxy}"; \ - fi +# Définit des variables d'environnement dans l'image sous plusieurs formats car ça peu varier selon les outils. +ENV http_proxy=${http_proxy} \ + https_proxy=${http_proxy} \ + HTTP_PROXY=${http_proxy} \ + HTTPS_PROXY=${http_proxy} \ + LC_ALL=fr_FR.UTF-8 \ + LANG=fr_FR.UTF-8 \ + LANGUAGE=fr_FR.UTF-8:fr -RUN pecl channel-update pecl.php.net +# Installation des packages runtime + utilitaires + outils QA. +RUN apk add --no-cache \ + ca-certificates curl \ + git unzip zip \ + freetype libjpeg libpng libwebp libxpm \ + icu-libs libxslt libzip \ + imagemagick \ + libmemcached \ + libldap \ + musl-locales musl-locales-lang \ + oniguruma \ + gmp gettext-libs \ + nodejs npm -RUN pecl install imagick-3.8.1 && docker-php-ext-enable imagick -RUN pecl install memcached-3.4.0 && docker-php-ext-enable memcached +# Copie des extensions compilées depuis le stage builder. +COPY --from=builder /usr/local/lib/php/extensions/ /usr/local/lib/php/extensions/ +COPY --from=builder /usr/local/etc/php/conf.d/ /usr/local/etc/php/conf.d/ -# DEV -RUN apt-get install -qy git - -## DEPRECATED -> composer audit -# local-php-security-checker -RUN mkdir /tools && \ - curl -L https://github.com/fabpot/local-php-security-checker/releases/download/v2.0.4/local-php-security-checker_2.0.4_linux_amd64 -o /tools/local-php-security-checker && \ - chmod +x /tools/local-php-security-checker +# Active les extensions copiées. +RUN docker-php-ext-enable imagick memcached pcov +# Vérification des vulnérabilités avec local-php-security-checker (déprécié mais conservé pour compatibilité). +RUN mkdir /tools \ + && curl -fsSL https://github.com/fabpot/local-php-security-checker/releases/download/v2.0.4/local-php-security-checker_2.0.4_linux_amd64 \ + -o /tools/local-php-security-checker \ + && chmod +x /tools/local-php-security-checker ENV PATH="$PATH:/tools" -RUN pecl install pcov && docker-php-ext-enable pcov -RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer --version=2.9.5 -## NODE -> penser a bun -RUN apt-get update -qq && \ - apt-get install -qy \ - ca-certificates curl gnupg \ - && mkdir -p /etc/apt/keyrings \ - && curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \ - && echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_24.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list -## END NODE -RUN apt-get update -qq && apt-get install -y nodejs && npm install -g audit-ci@^6 -#END DEV +# Installation composer. +RUN curl -fsSL https://getcomposer.org/installer \ + | php -- --install-dir=/usr/local/bin --filename=composer --version=2.9.5 -RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* -COPY php-production.ini /usr/local/etc/php/conf.d/app.ini +# audit-ci via npm. +RUN npm install -g audit-ci@^6 -WORKDIR /project +COPY ./conf/php-production.ini /usr/local/etc/php/conf.d/app.ini + +WORKDIR /project \ No newline at end of file diff --git a/PHP8.5/QA/php-production.ini b/PHP8.5/QA/conf/php-production.ini similarity index 100% rename from PHP8.5/QA/php-production.ini rename to PHP8.5/QA/conf/php-production.ini