Introduction
PHP fait encore tourner la plus grande partie du web, et sur votre propre machine vous contrôlez la version, les extensions et chaque réglage. Ce guide couvre une installation de production sur Debian ou Ubuntu : les paquets de la distribution ou un PHP plus récent depuis un dépôt de confiance, Apache ou Nginx, des pools php-fpm dimensionnés selon votre mémoire, OPcache, et plusieurs versions de PHP côte à côte. Un serveur Kimsufi démarre à 9,99 €/mois HT.
Prérequis & exigences
- Un accès root ou sudo par SSH, et l'adresse IP de votre serveur.
- Debian ou Ubuntu, fraîchement installé et à jour.
- Un domaine qui pointe vers le serveur si le site sera public.
- Environ 1 Go d'espace disque libre pour PHP, un serveur web et une base de données.
| Charge | Serveur conseillé |
|---|---|
| Un ou deux sites, trafic modeste | Kimsufi KS-4 (stockage NVMe) |
| Plusieurs sites avec MariaDB sur la même machine | Kimsufi KS-5-A (32 Go, NVMe) |
| Application chargée ou nombreux sites | So you Start SYS-3 |
Quelle version de PHP installer ?
PHP accorde à chaque branche deux ans de support actif, puis deux ans de correctifs de sécurité seulement (versions supportées sur php.net). En novembre 2026 :
| Branche | Support actif jusqu'au | Correctifs de sécurité jusqu'au |
|---|---|---|
| PHP 8.2 | Terminé | 31 décembre 2026 |
| PHP 8.3 | Terminé | 31 décembre 2027 |
| PHP 8.4 | 31 décembre 2026 | 31 décembre 2028 |
| PHP 8.5 | 31 décembre 2027 | 31 décembre 2029 |
Ce que votre distribution installe par défaut :
| Distribution | PHP par défaut |
|---|---|
| Debian 12 (bookworm) | 8.2 |
| Debian 13 (trixie) | 8.4 |
| Ubuntu 24.04 LTS | 8.3 |
| Ubuntu 26.04 LTS | 8.5 |
Pour un nouveau serveur, visez PHP 8.4 ou 8.5. Sur Debian 13 ou Ubuntu 26.04, le paquet de la distribution est déjà une branche actuelle et supportée : utilisez-le. Sur Debian 12, PHP 8.2 arrive en fin de vie le 31 décembre 2026 : passez à Debian 13 ou installez un PHP plus récent depuis le dépôt décrit plus bas. Avant de choisir, vérifiez quelles versions votre application supporte (WordPress, Laravel, Symfony et Drupal le publient).
Mettre le système à jour
Actualisez d'abord la liste des paquets et appliquez les mises à jour en attente :
sudo apt update && sudo apt upgrade -yOption A : installer PHP depuis votre distribution
C'est la voie la plus simple, et les mises à jour de sécurité arrivent avec le reste du système :
sudo apt install -y php-fpm php-cli php-mysql php-curl php-gd php-mbstring php-xml php-zip php-intlLes paquets php-* sont des métapaquets qui pointent vers la branche par défaut de la distribution, par exemple php8.4-fpm sur Debian 13. Vérifiez ce que vous avez obtenu :
php -vOption B : installer un PHP plus récent depuis le dépôt Sury (Debian)
Quand votre distribution fournit une branche plus ancienne, le dépôt maintenu par Ondřej Surý, qui empaquette PHP pour Debian, propose les versions actuelles. Sur Debian, ajoutez-le comme l'indiquent ses instructions officielles :
sudo apt-get update
sudo apt-get -y install lsb-release ca-certificates curl
sudo curl -sSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb
sudo dpkg -i /tmp/debsuryorg-archive-keyring.deb
sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/debsuryorg-archive-keyring.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
sudo apt-get updateSur Ubuntu, le même mainteneur publie plutôt le PPA ondrej/php :
sudo add-apt-repository ppa:ondrej/php
sudo apt updateInstallez ensuite une branche précise par son nom :
sudo apt install -y php8.4-fpm php8.4-cli php8.4-mysql php8.4-curl php8.4-gd php8.4-mbstring php8.4-xml php8.4-zip php8.4-intlLes paquets de ce dépôt sont versionnés (php8.4-*, php8.5-*) : c'est ce qui permet plus tard d'avoir plusieurs versions côte à côte.
AlmaLinux et Rocky Linux : la source équivalente est le dépôt Remi. Son assistant de configuration donne les commandes exactes pour votre version et votre branche de PHP ; suivez-le plutôt que de recopier les commandes d'un ancien guide.
Installer un serveur web
PHP a besoin d'un serveur web devant lui. Avec php-fpm, PHP tourne comme un service à part et le serveur web lui transmet les requêtes PHP par un socket Unix.
Nginx (voir nos étapes d'installation de NGINX) :
sudo apt install -y nginxDans le bloc server de votre site, transmettez les fichiers PHP au socket FPM :
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.4-fpm.sock;
}Apache :
sudo apt install -y apache2
sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php8.4-fpm
sudo systemctl reload apache2Remplacez 8.4 par votre branche. Apache peut aussi faire tourner PHP comme module (libapache2-mod-php) : c'est plus simple, mais cela lie PHP au modèle de processus d'Apache et ne permet qu'une seule version. php-fpm est le meilleur choix dès qu'on dépasse un petit site unique.
Testez l'installation avec un fichier temporaire :
echo '<?php phpinfo();' | sudo tee /var/www/html/info.phpOuvrez http://ip-de-votre-serveur/info.php, vérifiez que la ligne « Server API » indique FPM/FastCGI, puis supprimez le fichier immédiatement : il expose toute votre configuration.
sudo rm /var/www/html/info.phpConfigurer php.ini pour la production
Il y a un php.ini par SAPI : celui de FPM est /etc/php/8.4/fpm/php.ini, celui de la ligne de commande /etc/php/8.4/cli/php.ini. Trouvez le fichier réellement chargé avec :
php --iniCes réglages comptent sur un serveur de production :
display_errors = Off
log_errors = On
expose_php = Off
memory_limit = 256M
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 60
date.timezone = Europe/Parisdisplay_errors = Off est le plus important : les erreurs affichées à l'écran révèlent aux visiteurs des chemins de fichiers et des morceaux de requêtes, tandis que log_errors les garde dans les journaux. expose_php = Off retire la version des en-têtes de réponse. post_max_size doit être au moins égal à upload_max_filesize, sinon les gros envois échouent. Réglez date.timezone sur votre fuseau. Rechargez ensuite FPM :
sudo systemctl reload php8.4-fpmDimensionner le pool php-fpm
Le pool par défaut, www, se trouve dans /etc/php/8.4/fpm/pool.d/www.conf. Son réglage le plus important est pm.max_children : le nombre maximal de processus PHP, donc le nombre maximal de requêtes que PHP traite en même temps (configuration de FPM sur php.net).
Dimensionnez-le à partir de la mémoire, pas au jugé :
- Mesurez la taille moyenne d'un processus PHP sous trafic réel :
ps -C php-fpm8.4 -o rss= | awk '{ sum += $1; n++ } END { if (n) print sum / n / 1024 " Mo" }'- Décidez combien de RAM PHP peut utiliser, après la base de données, le serveur web et le système.
- Divisez :
pm.max_children = RAM pour PHP ÷ taille moyenne d'un processus.
Par exemple, si les processus font en moyenne 60 Mo et que vous accordez 6 Go à PHP, pm.max_children vaut environ 100. Trop haut, un pic de trafic fait basculer le serveur en swap ; trop bas, les requêtes font la queue.
pm = dynamic
pm.max_children = 100
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
pm.max_requests = 500dynamic garde quelques processus inactifs prêts ; ondemand n'en démarre aucun avant l'arrivée des requêtes, ce qui économise de la mémoire sur les sites peu sollicités ; static garde un nombre fixe de processus. pm.max_requests recycle chaque processus après ce nombre de requêtes, ce qui contient les fuites de mémoire lentes de certaines extensions. Gardez le pool sur un socket Unix plutôt que sur un port TCP : un port FastCGI exposé permet l'exécution de code à distance.
Donnez à chaque site son propre pool (copiez www.conf en site1.conf, renommez le pool, définissez ses propres user, group et socket listen). Un site compromis ne peut alors pas lire les fichiers des autres, et vous voyez quel site consomme la mémoire.
Activer et régler OPcache
OPcache garde le code PHP compilé en mémoire pour qu'il ne soit pas recompilé à chaque requête. Il est installé avec PHP et activé par défaut, avec des tailles prudentes (réglages d'OPcache sur php.net). Pour un serveur qui fait tourner de vraies applications, augmentez-les dans /etc/php/8.4/fpm/conf.d/10-opcache.ini :
opcache.enable=1
opcache.memory_consumption=256
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=20000
opcache.validate_timestamps=1
opcache.revalidate_freq=2Les valeurs par défaut sont 128 Mo, 8 Mo et 10 000 fichiers : suffisant pour un petit site, juste pour un gros framework ou plusieurs applications. Avec validate_timestamps=1, PHP vérifie toutes les revalidate_freq secondes si des fichiers ont changé, et les déploiements s'appliquent d'eux-mêmes. Si vous déployez par script, vous pouvez mettre validate_timestamps=0 pour un peu plus de vitesse et recharger FPM après chaque déploiement.
Rechargez FPM et vérifiez que le cache est actif :
sudo systemctl reload php8.4-fpm
php -i | grep -i "opcache.enable"Faire tourner plusieurs versions de PHP côte à côte
Avec les paquets versionnés du dépôt Sury ou du PPA, chaque branche a son propre service FPM et son propre socket :
sudo apt install -y php8.3-fpm php8.4-fpm
sudo systemctl enable --now php8.3-fpm php8.4-fpmChaque site pointe ensuite vers le socket dont il a besoin, par exemple dans Nginx :
fastcgi_pass unix:/run/php/php8.3-fpm.sock; # application ancienne
fastcgi_pass unix:/run/php/php8.4-fpm.sock; # nouveaux sitesLa commande php utilisée dans votre shell et par les tâches cron se règle à part :
sudo update-alternatives --config phpC'est ainsi qu'une application ancienne reste sur sa branche pendant que les nouveaux sites tournent sur un PHP actuel. Prévoyez tout de même sa mise à niveau : une branche sortie du support de sécurité ne reçoit plus de correctifs.
Vérifier l'installation
php -v
php -m
systemctl status php8.4-fpmLa première commande affiche la version, la deuxième liste les extensions chargées, la troisième confirme que le service FPM tourne.
Sécuriser votre serveur dédié
- Ne laissez jamais phpinfo() en place. C'est la fuite la plus courante sur une installation neuve.
- Gardez PHP à jour avec
apt upgrade; les dépôts livrent vite les versions de sécurité. Les failles PHP critiques d'octobre 2026 montrent pourquoi. - Un pool par site, chacun sous son propre utilisateur, pour qu'une application compromise ne puisse pas lire les autres.
- Fermez tous les ports que vous ne servez pas. Notre guide de configuration du pare-feu détaille les règles.
Dépannage des problèmes courants
| Symptôme | Cause | Solution |
|---|---|---|
| Le navigateur télécharge le fichier .php | PHP n'est pas relié au serveur web | Vérifiez le chemin du socket dans fastcgipass (Nginx) ou lancez a2enconf php8.4-fpm (Apache) |
| 502 Bad Gateway | FPM arrêté, ou mauvais chemin de socket | systemctl status php8.4-fpm, puis comparez le socket de /run/php/ avec votre configuration |
| Class not found | Extension manquante | php -m pour lister celles qui sont chargées, puis installez le paquet php8.4- |
| Fichiers de plus de 2 Mo refusés | Limites d'envoi encore par défaut | Augmentez uploadmaxfilesize et postmaxsize, rechargez FPM |
| Modifications de php.ini ignorées | Mauvais fichier modifié, ou FPM non rechargé | Modifiez fpm/php.ini, puis systemctl reload php8.4-fpm |
| Le serveur swappe sous charge | pm.maxchildren trop élevé | Mesurez la taille des processus et recalculez |
| 500 avec une page blanche | Erreurs masquées, comme prévu | Lisez le journal d'erreurs du serveur web et celui de FPM dans /var/log/ |
D'autres cas figurent dans notre guide des erreurs courantes et solutions.
Conclusion
Vous avez maintenant une branche de PHP actuelle derrière Apache ou Nginx, un pool php-fpm dimensionné selon votre mémoire, OPcache réglé pour de vraies applications, et un moyen de garder un site ancien sur sa propre version. Le reste, c'est l'application : notre guide pour héberger un site web et notre guide e-commerce prennent le relais.
FAQ
Quelle version de PHP installer en 2026 ?
PHP 8.4 ou 8.5. Les deux ont un support actif (8.4 jusqu'à fin 2026, 8.5 jusqu'à fin 2027) puis deux ans de correctifs de sécurité. Vérifiez que votre application supporte la branche choisie.
Faut-il utiliser mod_php ou php-fpm ?
php-fpm dès qu'on dépasse un petit site unique. Il fonctionne avec Nginx et Apache, permet à chaque site d'avoir son propre pool et son propre utilisateur, et autorise plusieurs versions de PHP sur un même serveur. mod_php ne fonctionne que dans Apache et avec une seule version.
Comment installer un PHP plus récent que celui de ma distribution ?
Sur Debian, ajoutez le dépôt Sury ; sur Ubuntu, le PPA ondrej/php ; sur AlmaLinux ou Rocky Linux, le dépôt Remi. Ils fournissent des paquets versionnés comme php8.4-fpm.
Combien de processus php-fpm me faut-il ?
Divisez la mémoire que vous pouvez accorder à PHP par la taille moyenne d'un processus sous trafic réel. Mesurez cette taille avec ps plutôt que de la deviner, et gardez de la place pour la base de données et le système.
Comment faire tourner un serveur PHP en local ?
PHP inclut un serveur de développement : php -S localhost:8000 depuis votre répertoire de projet. Il est mono-thread et réservé au développement, jamais à quelque chose de public.
Déployez votre pile sur du bare metal Kimsufi bare metal à partir de 9,99 €/mois HT. Accès root, bande passante illimitée, protection DDoS intégrée.

