Debian 13 – Développer en PHP 8.0 et 8.4 sur le même poste

Debian 13 – Développer en PHP 8.0 et 8.4 sur le même poste

Je gère et maintient plusieurs applications web, mais malheureusement il y en a qui sont encore en CodeIgniter 3, qui s’arrête donc à la version de PHP 8.0.30.

Pour pouvoir continuer à les maintenir, (malgré le fait que cette version de PHP sont obsolète, et que les projets soient migrés), il est nécessaire de faire une petite configuration dans Apache, et d’ajouter les packages FPM.

Dans cette article, nous allons utiliser la version 8.4 de PHP pour les packages modernes.
Il sera nécessaire d’adapter, bien entendu à votre cas de figure, ainsi que le dossier contenant les fichiers et dans les directives du vhost.
Le repos utilisé dans cet article est un repos maintenu par une tierce personne. Il n’est en aucun cas un repos officielle de l’équipe Debian.

Tout d’abord, ajouter les clés GPG du repos dans le système, et ajouter les URL des repos, et faire un update du catalagogue apt.

sudo 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" | sudo tee /etc/apt/sources.list.d/php.list

sudo apt update

Une fois fait, installer les version de PHP-FPM souhaitées

sudo apt install -y php8.0 php8.0-fpm php8.0-cli php8.0-common php8.0-curl php8.0-mbstring php8.0-xml php8.0-zip php8.0-gd

sudo apt install -y php8.4 php8.4-fpm php8.4-cli php8.4-common php8.4-curl php8.4-mbstring php8.4-xml php8.4-zip php8.4-gd

Pour vérifier si l’installation s’est bien déroulée, on peut lancer les commandes suivantes. La version de PHP devrait être affichée

php8.0 -v
php8.4 -v

Installer Apache2 (si pas encore fait), et activer les différents modules et configuration Apache nécessaires

sudo apt install -y apache2
sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php8.0-fpm
sudo a2enconf php8.4-fpm
sudo systemctl restart apache2

Créer maintenant les deux dossiers qui contiendront les projets web

sudo mkdir /var/www/html/8.0
sudo mkdir /var/www/html/8.4

Dans le fichier 000-default.conf, écraser le contenu (si pas de directives spéciale à votre environnement) et mettre le contenu ci-dessous:

Pensez à faire une sauvegarde de votre fichier, dans le cas où vous avez apporté des modifications manuellement
<VirtualHost *:80>
    ServerName localhost  # Ou ton domaine par défaut
    DocumentRoot /var/www/html

    <Directory /var/www/html>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    # Pour le sous-dossier PHP 8.0
    <Directory /var/www/html/8.0>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted

        <FilesMatch \.php$>
            SetHandler "proxy:unix:/var/run/php/php8.0-fpm.sock|fcgi://localhost/"
        </FilesMatch>
    </Directory>

    # Pour le sous-dossier PHP 8.4 (ou 8.x)
    <Directory /var/www/html/8.4>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted

        <FilesMatch \.php$>
            SetHandler "proxy:unix:/var/run/php/php8.4-fpm.sock|fcgi://localhost/"
        </FilesMatch>
    </Directory>

    # Optionnel : Un handler par défaut pour les autres dossiers (ex. PHP système)
    <FilesMatch \.php$>
        SetHandler "proxy:unix:/var/run/php/php8.4-fpm.sock|fcgi://localhost/"
    </FilesMatch>
</VirtualHost>

Sauvegarder le tout, et redémarrer le service Apache

sudo systemctl restart apache2

Et voila ! Maintenant si vous allez à l’adresse http://localhost/8.0 et http://localhost/8.4, les projets prendront en charge la version de PHP souhaitée dans ces différents dossiers.

Pour la partie CLI (utilisation de PHP en ligne de commande dans le shell), une seule peut être définie par défaut (notamment pour utiliser composer par exemple). Pour changer de version, taper la commande suivante:

sudo update-alternatives --config php

Choisir ensuite la version de PHP, et le tour est joué.