fix: 🧑💻 update build time and size of qa image
This commit is contained in:
parent
8cafe3320a
commit
3a8d0a1635
2 changed files with 101 additions and 84 deletions
|
|
@ -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
|
||||
Loading…
Add table
Reference in a new issue