Parfois, un SysAdmin reçoit des requêtes étranges. Par exemple :il y a quelques jours, mon client a besoin de télécharger un nouveau site, ce nouveau site a besoin de PHP7.4 alors que son serveur fonctionne avec PHP7.2. J'ai alors installé 7.4 mais tous les autres VirtualHosts (du moins les plus importants) ont cassé sous php7.4. Au départ, je pensais à une sorte de conteneurs, mais j'ai trouvé quelque chose de plus simple. Voici comment exécuter différentes versions de PHP sur le même serveur.
Ma configuration
Je crée ou réutilise toujours une machine virtuelle pour tous mes articles ici. Parce qu'il faut toujours tester avant de casser quelque chose d'important.
Pour ce tutoriel, j'ai créé une nouvelle installation d'un ¿ancien ? Serveur Ubuntu 18.04. J'aurai un site, sitio1 (sitio est un site en espagnol) qui nécessite PHP 7.2 ; et un autre site nécessitant PHP 7.4, sitio2 .
1. Ajouter le référentiel php Ondrej
À mon époque, vous deviez modifier les fichiers de configuration à la main. Mais maintenant, nous avons ce package software-properties-common pour gérer facilement vos sources de logiciels de distribution et de fournisseurs de logiciels indépendants.
Notre première étape consiste donc à installer ce package :
sudo apt-get install software-properties-common
Notre deuxième étape consiste à ajouter le référentiel en exécutant :
sudo add-apt-repository ppa:ondrej/php
Faites attention aux messages à l'écran et suivez les instructions. Puis lancez
sudo apt-get update
2. Installez deux versions PHP différentes
2.1. PHP 7.2
Le but de ce tutoriel est de vous montrer comment j'ai réussi à faire tourner différentes versions de php sur le même serveur. Je n'installe (presque) aucun module php mais si vous lisez ceci, vous en avez sûrement besoin, le support de mysql par exemple. N'oubliez pas de les installer.
sudo apt-get install php7.2 php7.2-fpm libapache2-mod-php7.2 libapache2-mod-fcgid
2.2 PHP 7.4
Répétez maintenant le processus avec php 7.4. N'oubliez pas d'installer les modules php nécessaires.
sudo apt-get install php7.4 php7.4-fpm libapache2-mod-php7.4
3. Démarrer les services fpm
Maintenant, nous devons démarrer le service fpm pour les deux versions
sudo systemctl start php7.2-fpm sudo systemctl start php7.4-fpm
Vous pouvez ensuite vérifier l'état de ces services en cours d'exécution :
statut sudo systemctl php7.x-fpm
4. Création des hôtes virtuels
4.1 Données VirtualHost
Nous allons créer les premiers répertoires sous /var/www pour chaque VirtualHost.
mkdir /var/www/sitio1 mkdir /var/www/sitio2 chown -R www-data:www-data /var/www
Deuxièmement, créez un fichier php sur chaque répertoire avec le contenu suivant uniquement pour afficher les informations php :
<?php
phpinfo();
?>
4.2 Configuration de l'hôte virtuel
Nous devons créer un fichier .conf pour chaque site, avec le contenu suivant :
nano /etc/apache2/sites-available/sitio1.conf <VirtualHost *:80> ServerAdmin admin@sitio1 ServerName sitio1 DocumentRoot /var/www/sitio1 DirectoryIndex info.php <Directory /var/www/sitio1> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> <FilesMatch \.php$> # this part do the trick SetHandler "proxy:unix:/run/php/php7.2-fpm.sock|fcgi://localhost" </FilesMatch> ErrorLog ${APACHE_LOG_DIR}/sitio1_error.log CustomLog ${APACHE_LOG_DIR}/sitio1_access.log combined </VirtualHost>
Créez ensuite un autre fichier /etc/apache2/sites-available/sitio2.conf en modifiant les informations appropriées (sitio1 devient sitio2, php7.2 devient php7.4 etc)
5. Ajouter des informations DNS
Ou pas. Je veux dire, dans la vraie vie, vous devrez créer des enregistrements DNS appropriés pour les deux sites. Comme ce n'est qu'à des fins de test et d'apprentissage, je ne crée que des enregistrements sur mon /etc/hosts
dossier. L'adresse IP de cette machine virtuelle est 192.168.122.14
Sachez que je suis capable de résoudre sitio1 et sitio2.
6. Tout activer
Nous devons activer certains modules apache nécessaires pour gérer cette configuration. Ensuite, pour activer ces hôtes virtuels, et enfin pour démarrer apache :
sudo a2enmod actions fcgid alias proxy_fcgi sudo a2ensite sitio1 sudo a2ensite sitio2 sudo systemctl start apache2
Vous pouvez également tester la configuration pour les fautes d'orthographe, les modules manquants ou tout autre problème avec apachetcl configtest
.
7. temps d'essai
Nous devons maintenant faire pointer un navigateur vers http://sitio1 et http://sitio2 et vérifier s'ils exécutent la bonne version de PHP :
Yay!. Et voici comment exécuter différentes versions de PHP sur le même serveur. Maintenant, je suis curieux de savoir quelles autres combinaisons je pourrais essayer.
Bonus :ubuntus plus ancien
Mon client a en fait Ubuntu 16 qui n'est plus pris en charge en avril 2021. Le référentiel que j'ai dû ajouter était ppa:tomvlk/php-archive