Christophe Ti

(Christophe TREMBLAY-GUILLOUX)

Ingénieur système Linux – TJM: 630 € HT

L’impression d’être entouré ou conseillé par des soi-disant « Expert Linux » (avant qu’ils ne disparaissent du radar) ?

Christophe est l’ULTIME expert en système Linux, hébergement web et développement Puppet que vous garderez dans vos contacts… à vie.

Comment installer PHP 8.1 sur Debian 11 ?

Les conseils privés de Christophe Ti

(réservé aux personnes intéressées)

Quelles sont les mystérieuses techniques que j’utilise pour mettre en œuvre un serveur Linux Debian (ou hébergement web), fiable, performant et sécurisé, sans devoir monter la garde jour et nuit ?
(pour le savoir, inscris-toi dans le formulaire ci-contre)

Ce petit tutoriel est un peu plus subtil que ceux trouvés ici ou là sur Internet, qui, souvent, ne permettent pas de comprendre comment bien installer PHP 8 ou supérieur.

1/ Pourquoi ne pas installer PHP 8.2 ou supérieur ?

Ce tutoriel a été rédigé en janvier 2023 et à cet instant, PHP 8.2 est très récent. Il n’était pas encore proposé pour Debian 12 qui pourrait sortir fin août 2023.

Entre temps, PHP 8.2 a été validé pour Debian 12, je ferai un autre tutoriel très similaire à celui-ci pour mettre PHP 8.2 sur Debian 11.

2/ Ne supprime pas PHP 7.4 !

Si PHP 7.4 est installé, ne le supprime pas, il peut y avoir des applications qui ne fonctionnent pas avec PHP 8. Nous allons donc installer PHP 8 à côté en plus.

Seul petit problème, certains packages Debian pour PHP 7.4 ont un nom générique par erreur. Par exemple, le package php-redis qui aurait dû avoir le nom php7.4-redis !

Pas de problème ! En réalité, nous allons upgrader aussi PHP 7.4 avec une version qui a renommé correctement ces packages qui pourraient poser problème. C’est la même personne qui s’occupe de maintenir ces packages alternatifs et des packages Debian donc c’est réputé stable. Ces nouveaux packages, ainsi que PHP 8 sont disponibles dans le dépôt « sury ».

3/ Mettre à jour son système et vérifier qu'il fonctionne toujours

Avant de se lancer pour de vrai, il faut vérifier que son système est à jour : évidement, tu travailles avec l’utilisateur root. Pas de sudo ridicule ici, tu es un vrai admin donc passe en root pour de bon.

				
					sudo su -
apt update
apt upgrade
				
			

Si besoin, relance le serveur :

				
					reboot
				
			

4/ IMPORTANT : Blocage de la version PHP 8.2

Donc, voici la partie dont personne ne te parlera dans aucun tutoriel, celle qui te permet de montrer que tu maîtrises ton système 😉

Un système dans Debian permet de configurer la priorité ou la préférence de choix dans l’installation de package. On va se servir de ce système pour empêcher l’installation de PHP 8.2.

Ajout d’une préférence d’installation de package :

Ajoute un fichier /etc/apt/preferences.d/php-sury et mets ceci dedans :

				
					Package: php8.1*
Pin: origin "packages.sury.org"
Pin-Priority: 500

Package: php7.4*
Pin: origin "packages.sury.org"
Pin-Priority: 500

Package: php-*
Pin: origin "packages.sury.org"
Pin-Priority: 500

Package: php*
Pin: origin "packages.sury.org"
Pin-Priority: -1

# debian 11, sauf si ça pose problème, mettre ceci, car upgrade libxml2 supposée non essentielle
Package: libxml2   
Pin: origin "packages.sury.org"
Pin-Priority: -1
				
			

5/ Ajout du nouveau dépôt de package « sury »

« sury » est un dépôt complémentaire à Debian pour installer des packages PHP plus récents de de bonne qualité.

Lance ces commandes :

				
					apt -y install apt-transport-https lsb-release ca-certificates curl
curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg
echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php-sury.list
apt update
				
			

6/ Mise à jour de PHP 7.4

Malheureusement, il est nécessaire de mettre à jour aussi les packages PHP 7.4 à cause de dépendances communes avec PHP 8.1 :

On met à jour le PHP installé, donc le 7.4 :

				
					apt upgrade
				
			

7/ Préparation à l'installation de PHP 8.1

Remarque :

L’extension json fait partie de php8 par défaut donc inutile de chercher une extension php8.x-json !

IMPORTANT : On simule l’installation de PHP 8.1 (option -s)

On met ici la même liste de package que l’on a déjà sur son système. Pour connaître sa propre liste, on tape :

				
					dpkg -l | grep php
				
			

On regarde les packages rendus pour former cette ligne (à adapter si besoin) :

				
					apt install -s php8.1-fpm php8.1-gd php8.1-redis php8.1-xml php8.1-intl php8.1-curl php8.1-imap php8.1-mbstring php8.1-mysql php8.1-zip
				
			

IMPORTANT IMPORTANT !!!

On scrute la sortie de la commande précédente à la recherche de la mention « REMOVED » pour voir quels packages vont être enlevés.

Pour mon cas, j’avais php-redis et php-igbinary dans ma liste. Il faut donc mettre leur équivalent remplaçant du dépôt « sury » :

				
					apt install php7.4-redis php7.4-igbinary
				
			

On relance la commande de test jusque ce que aucun package n’est prévu à la suppression :

				
					apt install -s php8.1-fpm php8.1-gd php8.1-redis php8.1-xml php8.1-intl php8.1-curl php8.1-imap php8.1-mbstring php8.1-mysql php8.1-zip
				
			

Si tout est OK, on passe à la suite.

8/ Installation de PHP 8.1

C’est donc la même commande mais sans le « -s » :

				
					apt install php8.1-fpm php8.1-gd php8.1-redis php8.1-xml php8.1-intl php8.1-curl php8.1-imap php8.1-mbstring php8.1-mysql php8.1-zip
				
			

Voilà, PHP 8.1 est installé avec PHP 7.4. Il restera bien sûr à configurer les pool PHP pour migrer les sites qui ont besoin.

Quelle est la mystérieuse ingénierie qui me permet d'obtenir un serveur Linux fiable et performant, sans devoir monter la garde jour et nuit ?