Ubuntu 18.04 Serveur : Comment mettre à jour PHP en toute sécurité

Pour passer à la dernière version de PHP sur Ubuntu 18.04 Server, commencez par vérifier le support et la compatibilité du système d'exploitation et des applications, puis testez le nouveau PHP sur un serveur Ubuntu pris en charge avant de procéder au changement. Ajouter simplement des dépôts externes et effectuer une mise à niveau complète des paquets, comme par le passé, ne garantit pas la version de PHP souhaitée ni que le serveur web l'utilise.

Points à vérifier en premier sur Ubuntu 18.04

La maintenance générale de sécurité pour Ubuntu 18.04 LTS a pris fin en mai 2023. La maintenance de sécurité étendue (ESM) d'Ubuntu Pro fournit des correctifs de sécurité supplémentaires pour les paquets concernés, mais cela ne signifie pas un support pour tous les dépôts externes ni pour toutes les versions de PHP. Vérifiez la période de support d'Ubuntu 18.04 et la couverture de votre abonnement et de vos paquets actuels.

Vous devriez faire la distinction entre les versions supportées par le projet PHP et les paquets pour lesquels la distribution fournit des correctifs de sécurité. Même si les numéros de version des paquets Ubuntu restent les mêmes, des correctifs de sécurité peuvent être appliqués, alors que les paquets externes ne reçoivent pas automatiquement les garanties Ubuntu Pro. Vérifiez à la fois les versions PHP officiellement supportées et la politique du fournisseur du paquet.

À long terme, il est recommandé d’installer une version LTS d’Ubuntu supportée sur un nouveau serveur et de déplacer le service. Lors de la mise à niveau du serveur existant sur place, vous ne pouvez pas sauter de versions LTS, vous devez donc passer de 18.04 à 20.04 en premier et procéder séquentiellement. Pour des étapes détaillées, voir Guide de mise à niveau d’Ubuntu Server.

Vérifiez la configuration actuelle de PHP et du serveur web

Avant de modifier le serveur de production, enregistrez la version de l'interface en ligne de commande (CLI), les extensions chargées et les paquets installés. Les commandes suivantes permettent de récupérer des informations, mais certaines commandes peuvent échouer si PHP n'est pas installé.

lsb_release -a
php -v
php --ini
php -m
dpkg -l 'php*' | grep '^ii'
apt-cache policy php

php -v est la version CLI. La version et les paramètres du module Apache ou de PHP-FPM (FastCGI Process Manager) utilisé pour les requêtes web peuvent être différents. Dans Apache, vérifiez les modules actifs avec apache2ctl -M, et dans les configurations de sites Nginx ou Apache, vérifiez la socket ou l'adresse vers laquelle FastCGI pointe. L'utilisation de PHP-FPM doit être vérifiée conjointement avec la liste des services et les paramètres du serveur web.

systemctl list-units --type=service --all 'php*-fpm.service'
sudo apache2ctl -M

Sur les serveurs qui n'utilisent pas Apache, il n'est pas nécessaire d'exécuter la deuxième commande. Sauvegardez les fichiers de configuration, les fichiers du site, les bases de données et les fichiers téléversés, et examinez les procédures de restauration. Conservez en sécurité les paramètres contenant des mots de passe ou des informations personnelles.

Choisir une nouvelle version et préparer un environnement de test

  1. Vérifiez quelles versions de PHP sont prises en charge par l'application, les plugins et les dépendances. Les changements de version majeure de PHP peuvent provoquer un comportement incompatible, alors consultez le guide de migration PHP de la version actuelle à la version cible.
  2. Sélectionnez une combinaison Ubuntu et PHP prise en charge et préparez un serveur de test séparé de l'environnement de production. Utilisez des sauvegardes restaurables et faites attention à la protection des données réelles des utilisateurs.
  3. Enregistrez les extensions PHP requises et trouvez les paquets adaptés au nouvel environnement. Le besoin de pilotes de base de données, de traitement d'images, de XML, de ZIP, etc., varie selon l'application.
  4. Sur le serveur de test, vérifiez la connexion, les bases de données, les téléversements de fichiers, les tâches planifiées et les écrans principaux, et consultez les journaux d'erreurs. S'il y a des problèmes, modifiez l'application et les extensions, puis testez à nouveau.

Exemple : Installer PHP 8.3 sur un serveur de test Ubuntu 24.04

Ci-dessous, un exemple d'installation de PHP 8.3 CLI et PHP-FPM sur un nouveau serveur de test Ubuntu 24.04 LTS, et non Ubuntu 18.04. PHP 8.3 ne signifie pas toujours qu'il s'agit de la dernière version. Vérifiez la période de support pour la version d'Ubuntu sélectionnée et la liste des paquets PHP 8.3 pour Ubuntu 24.04, et ajoutez uniquement les extensions requises par votre application.

Tout d'abord, examinez les paquets candidats et le plan de modification. S'il n'y a pas de candidats ou si la liste de suppression/modification est différente de ce qui est prévu, n'installez pas et vérifiez le dépôt et les dépendances.

sudo apt update
apt-cache policy php8.3-cli php8.3-fpm
apt-get -s install php8.3-cli php8.3-fpm

Si les résultats sur le serveur de test sont appropriés, installez et vérifiez l'état. La commande ci-dessous ne configure pas le serveur web pour utiliser automatiquement PHP-FPM.

sudo apt install php8.3-cli php8.3-fpm
php8.3 -v
php8.3 -m
systemctl status php8.3-fpm --no-pager

Par exemple, si une application nécessite des connexions MySQL ou MariaDB, examinez php8.3-mysql séparément dans cet environnement. Comme les fichiers de configuration et les extensions peuvent différer entre le CLI et le FPM, vérifiez les paramètres et les services du nouveau FPM. Après avoir installé le paquet, ajustez les paramètres FastCGI du serveur web pour correspondre au socket FPM du serveur de test, et après avoir passé la vérification de la configuration du serveur web, rechargez-le. La méthode du module Apache est configurée séparément et ne doit pas être confondue avec FPM.

Vérifier la configuration web et rétablir le service en cas de problème

Vous ne pouvez pas vérifier la version PHP d'un site web en utilisant uniquement la version CLI. Vérifiez les paramètres actifs du serveur web ainsi que les services FPM et les journaux, et dans un environnement de test restreint, confirmez via la page d'état de l'application ou les outils d'administration si les requêtes web utilisent le nouveau PHP. Ne laissez pas une page phpinfo() qui expose les paramètres détaillés du serveur dans un emplacement accessible au public.

Avant la transition réelle, planifiez une fenêtre de maintenance, la synchronisation des données et les points de récupération. Après avoir changé de services, vérifiez les fonctions clés ainsi que les journaux d'erreurs du serveur web et de PHP. En cas de problème, revenez aux paramètres de connexion du serveur web précédemment sauvegardés, effectuez des vérifications de configuration et rechargez, ou redirigez le trafic vers le serveur pré-transition. Si la structure de la base de données a changé, le simple retour à la version PHP précédente peut ne pas restaurer la fonctionnalité, donc les plans de sauvegarde et de restauration des données doivent être utilisés ensemble.

Soyez prudent avec les dépôts externes et les mises à jour complètes.

La méthode précédente dans cet article a ajouté ppa:ondrej/php et exécuté apt-get upgrade. Le fait que les dépôts externes prennent actuellement en charge Ubuntu 18.04 et la version PHP souhaitée est déterminé par le fournisseur, et ajouter simplement un dépôt ne garantit pas la maintenance de la sécurité. apt-get upgrade affecte non seulement PHP mais aussi d'autres paquets qui peuvent être mis à jour.

Avant d'ajouter ou de supprimer des dépôts sur un serveur de production, examinez les sources des paquets, les dépendances qui peuvent changer et les méthodes de récupération. Vous devriez également vérifier comment le serveur web gère PHP séparément, car activer uniquement une version différente du module Apache tout en laissant l'ancien module PHP tel quel peut provoquer des conflits de configuration.