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.
ChargeServeur conseillé
Un ou deux sites, trafic modesteKimsufi KS-4 (stockage NVMe)
Plusieurs sites avec MariaDB sur la même machineKimsufi KS-5-A (32 Go, NVMe)
Application chargée ou nombreux sitesSo 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 :

BrancheSupport actif jusqu'auCorrectifs de sécurité jusqu'au
PHP 8.2Terminé31 décembre 2026
PHP 8.3Terminé31 décembre 2027
PHP 8.431 décembre 202631 décembre 2028
PHP 8.531 décembre 202731 décembre 2029

Ce que votre distribution installe par défaut :

DistributionPHP par défaut
Debian 12 (bookworm)8.2
Debian 13 (trixie)8.4
Ubuntu 24.04 LTS8.3
Ubuntu 26.04 LTS8.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 :

bash
sudo apt update && sudo apt upgrade -y

Option 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 :

bash
sudo apt install -y php-fpm php-cli php-mysql php-curl php-gd php-mbstring php-xml php-zip php-intl

Les 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 :

bash
php -v

Option 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 :

bash
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 update

Sur Ubuntu, le même mainteneur publie plutôt le PPA ondrej/php :

bash
sudo add-apt-repository ppa:ondrej/php
sudo apt update

Installez ensuite une branche précise par son nom :

bash
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-intl

Les 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) :

bash
sudo apt install -y nginx

Dans le bloc server de votre site, transmettez les fichiers PHP au socket FPM :

nginx
location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php8.4-fpm.sock;
}

Apache :

bash
sudo apt install -y apache2
sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php8.4-fpm
sudo systemctl reload apache2

Remplacez 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 :

bash
echo '<?php phpinfo();' | sudo tee /var/www/html/info.php

Ouvrez 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.

bash
sudo rm /var/www/html/info.php

Configurer 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 :

bash
php --ini

Ces réglages comptent sur un serveur de production :

ini
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/Paris

display_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 :

bash
sudo systemctl reload php8.4-fpm

Dimensionner 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é :

  1. Mesurez la taille moyenne d'un processus PHP sous trafic réel :
bash
ps -C php-fpm8.4 -o rss= | awk '{ sum += $1; n++ } END { if (n) print sum / n / 1024 " Mo" }'
  1. Décidez combien de RAM PHP peut utiliser, après la base de données, le serveur web et le système.
  2. 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.

ini
pm = dynamic
pm.max_children = 100
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
pm.max_requests = 500

dynamic 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 :

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=2

Les 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 :

bash
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 :

bash
sudo apt install -y php8.3-fpm php8.4-fpm
sudo systemctl enable --now php8.3-fpm php8.4-fpm

Chaque site pointe ensuite vers le socket dont il a besoin, par exemple dans Nginx :

nginx
fastcgi_pass unix:/run/php/php8.3-fpm.sock;   # application ancienne
fastcgi_pass unix:/run/php/php8.4-fpm.sock;   # nouveaux sites

La commande php utilisée dans votre shell et par les tâches cron se règle à part :

bash
sudo update-alternatives --config php

C'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

bash
php -v
php -m
systemctl status php8.4-fpm

La 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ômeCauseSolution
Le navigateur télécharge le fichier .phpPHP n'est pas relié au serveur webVérifiez le chemin du socket dans fastcgipass (Nginx) ou lancez a2enconf php8.4-fpm (Apache)
502 Bad GatewayFPM arrêté, ou mauvais chemin de socketsystemctl status php8.4-fpm, puis comparez le socket de /run/php/ avec votre configuration
Class not foundExtension manquantephp -m pour lister celles qui sont chargées, puis installez le paquet php8.4-
Fichiers de plus de 2 Mo refusésLimites d'envoi encore par défautAugmentez uploadmaxfilesize et postmaxsize, rechargez FPM
Modifications de php.ini ignoréesMauvais fichier modifié, ou FPM non rechargéModifiez fpm/php.ini, puis systemctl reload php8.4-fpm
Le serveur swappe sous chargepm.maxchildren trop élevéMesurez la taille des processus et recalculez
500 avec une page blancheErreurs masquées, comme prévuLisez 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.