Initialisation du projet.
This commit is contained in:
@@ -0,0 +1,25 @@
|
|||||||
|
# À définir pour éviter les problèmes sur les multi-projets Docker
|
||||||
|
COMPOSE_PROJECT_NAME="docker_php_image"
|
||||||
|
|
||||||
|
# Définitions des labels pour la publication de l'image
|
||||||
|
SERVER_IMAGE_TITLE_LABEL=""
|
||||||
|
SERVER_IMAGE_DESCRIPTION_LABEL=""
|
||||||
|
|
||||||
|
# Repository de l'image Docker
|
||||||
|
SERVER_IMAGE_REPOSITORY=""
|
||||||
|
|
||||||
|
# Apache
|
||||||
|
APACHE_PHP_IMAGE="php:8.5-apache"
|
||||||
|
|
||||||
|
# FrankenPHP
|
||||||
|
FRANKENPHP_IMAGE="dunglas/frankenphp:1.11.2-php8.5"
|
||||||
|
|
||||||
|
# Image du serveur PHP
|
||||||
|
#SERVER_PHP_IMAGE="${APACHE_PHP_IMAGE}"
|
||||||
|
SERVER_PHP_IMAGE="${FRANKENPHP_IMAGE}"
|
||||||
|
|
||||||
|
# Installation de Memcached
|
||||||
|
WITH_MEMCACHED="true"
|
||||||
|
|
||||||
|
# Installation de Redis
|
||||||
|
WITH_REDIS="true"
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
.env
|
||||||
+73
@@ -0,0 +1,73 @@
|
|||||||
|
ARG SERVER_PHP_IMAGE=unknown
|
||||||
|
ARG COMPOSER_IMAGE=composer:latest
|
||||||
|
ARG SERVER_IMAGE_TITLE_LABEL=unknown
|
||||||
|
ARG SERVER_IMAGE_DESCRIPTION_LABEL=unknown
|
||||||
|
|
||||||
|
# Image Composer
|
||||||
|
FROM ${COMPOSER_IMAGE} AS php_composer
|
||||||
|
|
||||||
|
# Image du serveur PHP à utiliser (Apache, FrankenPHP...)
|
||||||
|
FROM ${SERVER_PHP_IMAGE}
|
||||||
|
|
||||||
|
ARG SERVER_IMAGE_TITLE_LABEL
|
||||||
|
ARG SERVER_IMAGE_DESCRIPTION_LABEL
|
||||||
|
|
||||||
|
LABEL org.opencontainers.image.title="${SERVER_IMAGE_TITLE_LABEL}"
|
||||||
|
LABEL org.opencontainers.image.description="${SERVER_IMAGE_DESCRIPTION_LABEL}"
|
||||||
|
|
||||||
|
# Installation de Composer
|
||||||
|
COPY --from=php_composer /usr/bin/composer /usr/local/bin/composer
|
||||||
|
|
||||||
|
# Activation du mode rewrite d'Apache
|
||||||
|
ARG SERVER_PHP_IMAGE
|
||||||
|
RUN if echo "$SERVER_PHP_IMAGE" | grep -qi apache; then \
|
||||||
|
a2enmod rewrite headers; \
|
||||||
|
fi
|
||||||
|
|
||||||
|
RUN apt-get update && apt-get install -y \
|
||||||
|
nano \
|
||||||
|
git \
|
||||||
|
mariadb-client \
|
||||||
|
npm \
|
||||||
|
# Pour l'extension PHP intl
|
||||||
|
libicu-dev \
|
||||||
|
# Zip
|
||||||
|
unzip zip libzip-dev zlib1g-dev \
|
||||||
|
# GD
|
||||||
|
libpng-dev libjpeg-dev libwebp-dev libavif-dev libfreetype6-dev \
|
||||||
|
&& docker-php-ext-configure gd \
|
||||||
|
--with-freetype \
|
||||||
|
--with-jpeg \
|
||||||
|
--with-webp \
|
||||||
|
--with-avif \
|
||||||
|
&& docker-php-ext-install zip pdo_mysql gd sockets intl \
|
||||||
|
# Installation de PIE (PHP Installer for Extensions : https://github.com/php/pie)
|
||||||
|
&& curl -fL --output /tmp/pie.phar https://github.com/php/pie/releases/latest/download/pie.phar \
|
||||||
|
&& mv /tmp/pie.phar /usr/local/bin/pie \
|
||||||
|
&& chmod +x /usr/local/bin/pie
|
||||||
|
|
||||||
|
# Installation de Memcached
|
||||||
|
ARG WITH_MEMCACHED=false
|
||||||
|
RUN if [ "$WITH_MEMCACHED" = "true" ]; then \
|
||||||
|
apt-get install -y libmemcached-dev; \
|
||||||
|
pie install php-memcached/php-memcached; \
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Installation de Redis
|
||||||
|
ARG WITH_REDIS=false
|
||||||
|
RUN if [ "$WITH_REDIS" = "true" ]; then \
|
||||||
|
pie install phpredis/phpredis; \
|
||||||
|
fi
|
||||||
|
|
||||||
|
RUN apt-get clean \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
RUN usermod -u 1000 www-data && groupmod -g 1000 www-data
|
||||||
|
|
||||||
|
# Configuration pour Composer
|
||||||
|
RUN mkdir -p /var/www/.cache/composer && chown -R www-data:www-data /var/www/.cache
|
||||||
|
ENV COMPOSER_CACHE_DIR=/var/www/.cache/composer
|
||||||
|
|
||||||
|
# Configuration de NPM
|
||||||
|
RUN mkdir -p /var/www/.npm && chown -R www-data:www-data /var/www/.npm
|
||||||
|
ENV NPM_CONFIG_CACHE=/var/www/.npm
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
|
||||||
|
# Image Docker PHP
|
||||||
|
|
||||||
|
Cette image Docker fournit un environnement PHP basé sur l'un des serveurs suivants :
|
||||||
|
|
||||||
|
* Apache
|
||||||
|
* FrankenPHP
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
|
||||||
|
Le serveur PHP utilisé est défini en utilisant la variable d'environnement `SERVER_PHP_IMAGE` dans le fichier `.env`.
|
||||||
|
La variable `SERVER_IMAGE_REPOSITORY` doit également être renseignée afin de définir le tag de l'image Docker.
|
||||||
|
|
||||||
|
## Construction de l'image
|
||||||
|
|
||||||
|
Le script `./scripts/build-docker-image.sh` génère automatiquement la commande de construction Docker en fonction de la valeur de `SERVER_PHP_IMAGE`.
|
||||||
|
|
||||||
|
Exemple :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./scripts/build-docker-image.sh --debug --build
|
||||||
|
```
|
||||||
|
|
||||||
|
### Options
|
||||||
|
|
||||||
|
| Option | Description |
|
||||||
|
| --------- | ------------------------------------------------------ |
|
||||||
|
| `--debug` | Affiche la commande de construction de l'image. |
|
||||||
|
| `--build` | Exécute la construction de l'image Docker. |
|
||||||
Executable
+95
@@ -0,0 +1,95 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# ./scripts/build-docker-image.sh --debug --build
|
||||||
|
|
||||||
|
# Charge le fichier .env
|
||||||
|
rootDir=$(dirname "$BASH_SOURCE")
|
||||||
|
source $rootDir/../.env
|
||||||
|
|
||||||
|
isApache=false
|
||||||
|
isFrankenphp=false
|
||||||
|
phpVersion=""
|
||||||
|
serverVersion=""
|
||||||
|
serverName=""
|
||||||
|
withDebug=false
|
||||||
|
withBuild=false
|
||||||
|
|
||||||
|
for arg in "$@"; do
|
||||||
|
case "$arg" in
|
||||||
|
--debug)
|
||||||
|
withDebug=true
|
||||||
|
;;
|
||||||
|
--build)
|
||||||
|
withBuild=true
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
# Vérifie que le repository de l'image est définie
|
||||||
|
if [[ "$SERVER_IMAGE_REPOSITORY" == "" ]]; then
|
||||||
|
echo "Le repository de l'image est inconnu. Veuillez définir la variable d'environnement SERVER_IMAGE_REPOSITORY."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Détermine si l'image du serveur est Apache ou FrankenPHP
|
||||||
|
if [[ "$SERVER_PHP_IMAGE" == *"apache"* ]]; then
|
||||||
|
isApache=true
|
||||||
|
phpVersion="${SERVER_PHP_IMAGE#*:}"
|
||||||
|
phpVersion="${phpVersion%%-*}"
|
||||||
|
serverVersion="2.4"
|
||||||
|
serverName="Apache"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$SERVER_PHP_IMAGE" == *"frankenphp"* ]]; then
|
||||||
|
isFrankenphp=true
|
||||||
|
phpVersion="${SERVER_PHP_IMAGE##*-php}"
|
||||||
|
serverVersion="${SERVER_PHP_IMAGE#*:}"
|
||||||
|
serverVersion="${serverVersion%%-*}"
|
||||||
|
serverName="FrankenPHP"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Vérifie le numéro de la version PHP
|
||||||
|
if [[ ! "$phpVersion" =~ ^[0-9]+(\.[0-9]+)*$ ]]; then
|
||||||
|
echo "Version de PHP incorrecte : $phpVersion"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Vérifie le numéro de la version du serveur
|
||||||
|
if [[ ! "$serverVersion" =~ ^[0-9]+(\.[0-9]+)*$ ]]; then
|
||||||
|
echo "Version du serveur incorrecte : $serverVersion"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Détermine le titre de l'image
|
||||||
|
serverImageTitleLabel="Image PHP :phpVersion avec :serverName :serverVersion"
|
||||||
|
serverImageTitleLabel=${serverImageTitleLabel/:phpVersion/${phpVersion}}
|
||||||
|
serverImageTitleLabel=${serverImageTitleLabel/:serverName/${serverName}}
|
||||||
|
serverImageTitleLabel=${serverImageTitleLabel/:serverVersion/${serverVersion}}
|
||||||
|
|
||||||
|
# Détermine la description de l'image
|
||||||
|
serverImageDescriptionLabel="Installation d'un serveur :serverName avec la version :phpVersion de PHP. Inclus dans l'image : Composer, Node, NPM, MariaDB, Memchached, Redis et PIE (PHP Installer for Extensions)."
|
||||||
|
serverImageDescriptionLabel=${serverImageDescriptionLabel/:phpVersion/${phpVersion}}
|
||||||
|
serverImageDescriptionLabel=${serverImageDescriptionLabel/:serverName/${serverName}}
|
||||||
|
|
||||||
|
# Détermine le tag de l'image
|
||||||
|
dockerImageTag="${SERVER_IMAGE_REPOSITORY}:${phpVersion}-${serverName,,}-${serverVersion}"
|
||||||
|
|
||||||
|
buildCommand="docker build \
|
||||||
|
-f Dockerfile \
|
||||||
|
-t ${dockerImageTag} \
|
||||||
|
--build-arg SERVER_PHP_IMAGE=${SERVER_PHP_IMAGE} \
|
||||||
|
--build-arg SERVER_IMAGE_TITLE_LABEL=\"${serverImageTitleLabel}\" \
|
||||||
|
--build-arg SERVER_IMAGE_DESCRIPTION_LABEL=\"${serverImageDescriptionLabel}\" \
|
||||||
|
--build-arg WITH_MEMCACHED=true \
|
||||||
|
--build-arg WITH_REDIS=true \
|
||||||
|
.
|
||||||
|
"
|
||||||
|
|
||||||
|
if [[ "$withDebug" == "true" ]]; then
|
||||||
|
echo $buildCommand
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$withBuild" == "true" ]]; then
|
||||||
|
eval "$buildCommand"
|
||||||
|
echo "Build de l'image ${phpVersion}-${serverName,,}-${serverVersion} terminé."
|
||||||
|
fi
|
||||||
Reference in New Issue
Block a user