Déploiement PHP sur Kubernetes : guide pratique étape par étape

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction : Pourquoi déployer PHP dans Kubernetes ?

\n\n

De nombreux développeurs perçoivent encore PHP comme un langage pour l'hébergement « classique » avec FTP et phpMyAdmin. Cependant, dans la culture DevOps moderne, les applications PHP sont de plus en plus souvent exécutées dans des conteneurs, et leur gestion incombe à Kubernetes (K8s). Cela offre non seulement une mise à l'échelle automatique et une tolérance aux pannes, mais aussi une uniformité de l'environnement à toutes les étapes, du développement à la production.

\n\n

Dans ce guide, nous allons voir concrètement comment préparer un projet PHP pour un déploiement dans Kubernetes : de la création d'une image Docker à la rédaction des manifestes et au lancement dans le cluster. Vous apprendrez à rendre le conteneur léger, à configurer correctement php-fpm et à tout lier avec Nginx. C'est parti !

\n\n

Étape 1 : Préparation de l'application PHP et de l'image Docker

\n\n

Avant de charger le code dans K8s, il faut l'empaqueter dans une image Docker. Prenons un projet PHP typique en PHP pur (sans framework) : un script simple qui affiche un message de bienvenue et phpinfo.

\n\n

1.1. Structure du projet

\n\n

Créons une structure minimale :

\n\n
my-php-app/\n├── src/\n│   └── index.php\n├── docker/\n│   ├── php.Dockerfile\n│   └── nginx.conf\n└── k8s/\n    ├── deployment.yaml\n    └── service.yaml\n
\n\n

1.2. Code de l'application PHP

\n\n

Fichier src/index.php :

\n\n
<?php\necho "<h1>Bonjour, Kubernetes !</h1>";\necho "<p>Version PHP : " . phpversion() . "</p>";\necho "<p>Serveur : " . gethostname() . "</p>";\n?>\n
\n\n

1.3. Dockerfile pour PHP-FPM

\n\n

Créons docker/php.Dockerfile :

\n\n
FROM php:8.2-fpm-alpine\n\n# Installation des dépendances (si nécessaire)\nRUN docker-php-ext-install pdo pdo_mysql\n\n# Copie du code de l'application\nCOPY ./src /var/www/html\n\n# Droits d'accès (important pour FPM)\nRUN chown -R www-data:www-data /var/www/html\n\nWORKDIR /var/www/html\n\nEXPOSE 9000\nCMD ["php-fpm"]\n
\n\n

Pourquoi alpine ? Il donne une image d'environ 30 Mo au lieu de 200+ Mo sur Debian. C'est crucial pour un chargement rapide dans le cluster.

\n\n

1.4. Configuration Nginx

\n\n

PHP-FPM ne peut pas servir les fichiers statiques directement : un serveur web est nécessaire. Créons docker/nginx.conf :

\n\n
server {\n    listen 80;\n    server_name _;\n    root /var/www/html;\n\n    index index.php index.html;\n\n    location / {\n        try_files $uri $uri/ /index.php?$query_string;\n    }\n\n    location ~ \\.php$ {\n        fastcgi_pass 127.0.0.1:9000;\n        fastcgi_index index.php;\n        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;\n        include fastcgi_params;\n    }\n}\n
\n\n

Dans Kubernetes, nous lancerons Nginx et PHP-FPM dans un même Pod (en tant que conteneurs sidecar) ou comme des services séparés. Pour simplifier, nous utiliserons un Pod avec deux conteneurs.

\n\n

Étape 2 : Construction et publication des images

\n\n

Construisons l'image PHP-FPM et l'image Nginx avec notre configuration. Dans un projet réel, on pourrait utiliser une seule image en combinant Nginx et PHP avec supervisord, mais nous allons faire « correctement » en les séparant.

\n\n

Construction de l'image PHP :

\n
docker build -t my-php-app:latest -f docker/php.Dockerfile .\n
\n\n

Construction de l'image Nginx :

\n

Créons un Dockerfile séparé pour Nginx :

\n
FROM nginx:alpine\nCOPY docker/nginx.conf /etc/nginx/conf.d/default.conf\nCOPY ./src /var/www/html\n
\n\n
docker build -t my-nginx:latest -f docker/nginx.Dockerfile .\n
\n\n

Ensuite, chargez les images dans un registre (Docker Hub, GitLab Container Registry, etc.) :

\n
docker tag my-php-app:latest your-registry/my-php-app:latest\ndocker push your-registry/my-php-app:latest\n
\n\n

Étape 3 : Manifestes Kubernetes

\n\n

Voici la partie la plus intéressante : décrivons comment Kubernetes va lancer notre application.

\n\n

3.1. Deployment (manifeste principal

Blogs

Book Recommendations