GNU/Linux >> Tutoriels Linux >  >> Linux

Comment exécuter différentes versions de PHP sur le même serveur

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


Linux
  1. Exécutez plusieurs versions de PHP pour différents domaines dans NGNIX

  2. Comment utiliser deux versions différentes de Wine sur la même installation ?

  3. Comment obtenir les versions de MySQL/Apache/PHP

  4. Comment exécuter plusieurs versions de PHP avec Nginx sur Ubuntu ?

  5. Comment attribuer différentes adresses IP statiques à une même machine en fonction de son OS ?

Comment installer différentes versions de PHP (5.6, 7.x et 8.0) dans Ubuntu

Comment installer plusieurs conteneurs Discourse sur le même serveur

Comment auto-héberger plusieurs sites WordPress sur le même serveur avec Docker

Comment changer le nom d'hôte du serveur dans Ubuntu

Comment changer le fuseau horaire sur le serveur Ubuntu 18.04 ?

Comment vérifier la version de PHP sous Linux