Ce fichier explique comment utiliser le système de configuration pour personnaliser votre image Docker PHP-Apache avec mlocati/php-extension-installer.
Le fichier config.json est le cœur de la configuration. Voici ce que chaque section contrôle :
La version de PHP à utiliser pour l'image de base.
- Exemple :
"8.3"utilisera l'imagephp:8.3-apache-bookworm - Versions disponibles : Consultez Docker Hub - PHP pour les versions disponibles
Liste des outils système à installer avec apt-get.
- Outils recommandés :
git: gestion de versioncurl: téléchargements HTTPunzip,zip: gestion des archives
Note : Les bibliothèques de développement (-dev) ne sont plus nécessaires. Le système mlocati/php-extension-installer les gère automatiquement.
Toutes les extensions PHP (Core + PECL) à installer.
Avantage : mlocati/php-extension-installer gère automatiquement :
- Les dépendances système nécessaires
- La compilation pour AMD64 et ARM64
- L'activation des extensions
Extensions courantes :
- Base de données :
pdo_mysql,mysqli,pdo_pgsql - Images :
gd,imagick - Archives :
zip - Internationalisation :
intl,gettext - Performance :
opcache,apcu - Autres :
soap,ldap,bcmath,sockets
Liste complète : Extensions disponibles
Paramètres de configuration PHP (équivalent du fichier php.ini).
- Paramètres courants :
memory_limit: mémoire maximale allouée à un script PHPupload_max_filesize: taille maximale d'un fichier uploadépost_max_size: taille maximale des données POSTmax_execution_time: durée maximale d'exécution d'un script (en secondes)date.timezone: fuseau horaire par défaut
- Modifiez
config.jsonselon vos besoins - Commitez et poussez sur la branche
main - GitHub Actions va automatiquement :
- Vérifier le flag
[skip ci]dans le message de commit - Incrémenter automatiquement la version PATCH
- Générer le
dockerfileà partir du template (avec mises à jour de sécurité) - Configurer QEMU pour l'émulation ARM64
- Construire l'image pour
linux/amd64etlinux/arm64sans cache (garantit les derniers correctifs) - Publier l'image sur
ghcr.io/mouette03/webappavec les tags ::latest(dernière version):vX.Y.Z(version sémantique)
- Nettoyer les anciennes images non-taggées
- Vérifier le flag
Avec Python :
# Générer le dockerfile
python generate_dockerfile.py
# Construire l'image
docker build -t mon-image-test .
# Tester l'image
docker run -p 8080:80 mon-image-testAvec PowerShell (Windows) :
# Générer le dockerfile
.\generate_dockerfile.ps1
# Construire l'image
docker build -t mon-image-test .
# Tester l'image
docker run -p 8080:80 mon-image-testLe template dockerfile.template inclut automatiquement :
apt-get update && apt-get upgrade -yApplique tous les correctifs de sécurité disponibles pour Apache, libxml2, et autres composants système.
Important : Les builds sont effectués sans cache (no-cache: true) pour garantir que apt-get upgrade récupère toujours les dernières versions. Cela évite d'utiliser des paquets mis en cache qui pourraient être vulnérables.
COPY --from=mlocati/php-extension-installer:latest /usr/bin/install-php-extensions /usr/local/bin/Utilise l'installateur officiel qui :
- Installe les bibliothèques système à jour
- Compile les extensions avec les versions patchées
- Fonctionne de manière fiable sur AMD64 et ARM64
apt-get clean && rm -rf /var/lib/apt/lists/*Réduit la taille de l'image et la surface d'attaque potentielle.
Commentaires de configuration pour mitiger les vulnérabilités connues si SSL est activé.
Utilisation de la syntaxe HEREDOC pour une configuration plus lisible et moins sujette aux erreurs.
{
"php_version": "8.3",
"system_tools": [
"git",
"curl",
"unzip",
"zip"
],
"php_extensions": [
"gd",
"zip",
"pdo_mysql",
"mysqli",
"intl",
"imagick",
"apcu"
],
"php_ini_settings": {
"memory_limit": "256M",
"upload_max_filesize": "64M",
"post_max_size": "80M",
"max_execution_time": "300",
"date.timezone": "UTC"
}
}- Format JSON : Le fichier
config.jsonne supporte PAS les commentaires. Utilisez uniquement la syntaxe JSON valide. - Encodage : Les fichiers sont en UTF-8.
- Extensions : Toutes les extensions (Core et PECL) vont dans
php_extensions. Pas besoin de distinguer ! - Dépendances automatiques : mlocati installe automatiquement les bibliothèques système nécessaires.
- Cause : Le script
generate_dockerfile.pyn'a pas été exécuté ou a produit un dockerfile invalide - Solution : Vérifiez que GitHub Actions exécute bien le script avant la construction
- Cause : Extension non supportée par mlocati ou nom incorrect
- Solution : Vérifiez la liste des extensions supportées
- Cause : Émulation QEMU plus lente que natif
- Solution : Normal, le cache GitHub Actions accélère les builds suivants
- Cause : Syntaxe JSON invalide (virgule manquante, guillemets, etc.)
- Solution : Validez votre JSON avec un validateur en ligne