L’auteur a choisi le COVID-19 Relief Fund pour recevoir un don dans le cadre du programme Write for DOnations.
Le serveur web Apache utilise des hôtes virtuels pour gérer plusieurs domaines sur une seule instance. De même, PHP-FPM utilise un démon pour gérer plusieurs versions PHP sur une seule instance. Vous pouvez utiliser ensemble Apache et PHP-FPM pour héberger plusieurs applications Web PHP, chacune utilisant une version différente de PHP, toutes sur le même serveur, et toutes en même temps. C’est utile car différentes applications peuvent nécessiter différentes versions de PHP, mais certaines piles de serveurs, telles qu’une pile LAMP régulièrement configurée, ne peuvent gérer qu’une seule version. Combiner Apache avec PHP-FPM est également une solution plus économique que d’héberger chaque application sur sa propre instance.
PHP-FPM offre également des options de configuration pour la journalisation stderr
et stdout
, les redémarrages d’urgence et le lancement de processus adaptatifs, ce qui est utile pour les sites très chargés. En fait, l’utilisation d’Apache avec PHP-FPM est l’une des meilleures piles pour héberger des applications PHP, surtout en matière de performances.
Dans ce tutoriel, vous allez configurer deux sites PHP sur une seule instance. Chaque site utilisera son propre domaine, et chaque domaine déploiera sa propre version de PHP. Le premier, site1.your_domain
, déploiera PHP 7.0. La deuxième, site2.your_domain
, déploiera PHP 7.2.
A
dans nos paramètres DNS site1.your_domain
et site2.your_domain
.Une fois les conditions préalables remplies, vous allez maintenant installer les versions 7.0 et 7.2, ainsi que PHP-FPM et plusieurs extensions supplémentaires. Mais pour ce faire, vous devrez d’abord ajouter le référentiel sury php
à votre système.
Installez d’abord les différents paquets nécessaires, notamment curl
, wget
, and gnupg2
:
- sudo apt-get install curl wget gnupg2 ca-certificates lsb-release apt-transport-https -y
Les paquets ci-dessus vous permettront d’accéder au référentiel sury php
, et ce de manière sécurisée. sury php
est un référentiel tiers ou PPA (personal package archive ou dépôts personnels de paquets logiciels, en français). Il offre PHP 7.4, 7.3, 7.2, 7.1, et 7.0 pour le système d’exploitation Debian. Il offre également des versions plus récentes de PHP que les référentiels officiels de Debian 10 et vous permettra d’installer plusieurs versions de PHP sur le même système.
Ensuite, importez la clé du paquet :
- wget https://packages.sury.org/php/apt.gpg
- sudo apt-key add apt.gpg
Ajoutez maintenant le référentiel sury php
à votre système :
- echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php7.list
Mettez le référentiel à jour :
- sudo apt-get update -y
Ensuite, installez php7.0
, php7.0-fpm
, php7.0-mysql
, libapache2-mod-php7.0
et libapache2-mod-fcgid
avec les commandes suivantes
- sudo apt-get install php7.0 php7.0-fpm php7.0-mysql libapache2-mod-php7.0 libapache2-mod-fcgid -y
php7.0
est un meta package qui peut être utilisé pour exécuter des applications PHP.php7.0-fpm
fournit l’interprète Fast Process Manager qui fonctionne comme démon et reçoit des requêtes Fast/CGI.php7.0-mysql
connecte PHP à la base de données MySQL.libapahce2-mod-php7.0
fournit le module PHP pour le serveur Apache.libapache2-mod-fcgid
contient un mod_fcgid qui lance un certain nombre d’instances de programme CGI pour traiter les requêtes simultanées.Repérez maintenant le processus pour la version PHP 7.2. Installez php7.2
, php7.2-fpm
, php7.2-mysql
, et libapache2-mod-php7.2
:
- sudo apt-get install php7.2 php7.2-fpm php7.2-mysql libapache2-mod-php7.2 -y
Après avoir installé les deux versions PHP, lancez le service php7.0-fpm
- sudo systemctl start php7.0-fpm
Ensuite, vérifiez l’état du service php7.0-fpm
- sudo systemctl status php7.0-fpm
Vous verrez la sortie suivante :
Output● php7.0-fpm.service - The PHP 7.0 FastCGI Process Manager
Loaded: loaded (/lib/systemd/system/php7.0-fpm.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2020-04-04 08:51:47 UTC; 1min 17s ago
Docs: man:php-fpm7.0(8)
Main PID: 13016 (php-fpm7.0)
Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
Tasks: 3 (limit: 1149)
Memory: 19.1M
CGroup: /system.slice/php7.0-fpm.service
├─13016 php-fpm: master process (/etc/php/7.0/fpm/php-fpm.conf)
├─13017 php-fpm: pool www
└─13018 php-fpm: pool www
Apr 04 08:51:47 debian10 systemd[1]: Starting The PHP 7.0 FastCGI Process Manager...
Apr 04 08:51:47 debian10 systemd[1]: Started The PHP 7.0 FastCGI Process Manager.
En répétant ce processus, lancez maintenant le service php7.2-fpm
:
- sudo systemctl start php7.2-fpm
Vérifiez ensuite l’état du service php7.2-fpm
:
- sudo systemctl status php7.2-fpm
Vous verrez la sortie suivante :
Output● php7.2-fpm.service - The PHP 7.2 FastCGI Process Manager
Loaded: loaded (/lib/systemd/system/php7.2-fpm.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2020-04-04 08:52:52 UTC; 1min 32s ago
Docs: man:php-fpm7.2(8)
Process: 22207 ExecStartPost=/usr/lib/php/php-fpm-socket-helper install /run/php/php-fpm.sock /etc/php/7.2/fpm/pool.d/www.conf 72 (code=exite
Main PID: 22204 (php-fpm7.2)
Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
Tasks: 3 (limit: 1149)
Memory: 12.0M
CGroup: /system.slice/php7.2-fpm.service
├─22204 php-fpm: master process (/etc/php/7.2/fpm/php-fpm.conf)
├─22205 php-fpm: pool www
└─22206 php-fpm: pool www
Apr 04 08:52:52 debian10 systemd[1]: Starting The PHP 7.2 FastCGI Process Manager...
Apr 04 08:52:52 debian10 systemd[1]: Started The PHP 7.2 FastCGI Process Manager.
Et enfin, vous devez activer plusieurs modules pour que votre service Apache2 puisse fonctionner avec plusieurs versions PHP :
- sudo a2enmod actions fcgid alias proxy_fcgi
actions
est utilisé pour exécuter des scripts CGI sur la base de type de média ou de méthode de requête.
fcgid
est une alternative haute performance à mod_cgi
qui démarre un nombre suffisant d’instances du programme CGI pour traiter des requêtes simultanées.
alias
permet le mappage des différentes parties du système de fichiers hôte dans l’arborescence du document, et la redirection des URL.
proxy_fcgi
permet à Apache de transmettre des requêtes à PHP-FPM.
Redémarrez maintenant le service Apache pour appliquer vos modifications :
- sudo systemctl restart apache2
À ce stade, vous avez installé deux versions PHP sur votre serveur. Ensuite, vous allez créer une structure de répertoire pour chaque site web que vous voulez déployer.
Dans cette section, vous créerez un répertoire root de document et une page index pour chacun de vos deux sites Web.
Tout d’abord, créez des répertoires root de documents à la fois pour site1.your_domain
et site2.your_domain
- sudo mkdir /var/www/site1.your_domain
- sudo mkdir /var/www/site2.your_domain
Par défaut, le serveur Apache fonctionne comme un utilisateur www-data
et un groupe www-data
. Pour vous assurer que vous avez la propriété et les permissions correctes des répertoires root de votre site web, exécutez les commandes suivantes :
- sudo chown -R www-data:www-data /var/www/site1.your_domain
- sudo chown -R www-data:www-data /var/www/site2.your_domain
- sudo chmod -R 755 /var/www/site1.your_domain
- sudo chmod -R 755 /var/www/site2.your_domain
Ensuite, vous allez créer un fichier info.php
à l’intérieur du répertoire root de chaque site Web. Cela affichera les informations de version PHP de chaque site Web. Commencez avec site1
- sudo nano /var/www/site1.your_domain/info.php
Ajoutez la ligne suivante :
<?php phpinfo(); ?>
Enregistrez et fermez le fichier. Copiez maintenant le fichier info.php
que vous avez créé sur site2
- sudo cp /var/www/site1.your_domain/info.php /var/www/site2.your_domain/info.php
Votre serveur web devrait maintenant disposer des répertoires racine de documents dont chaque site a besoin pour fournir des données aux visiteurs. Ensuite, vous allez configurer votre serveur web Apache pour qu’il fonctionne avec deux versions PHP différentes.
Dans cette section, vous allez créer deux fichiers de configuration d’hôte virtuel. Cela permettra à vos deux sites web de fonctionner simultanément avec deux versions PHP différentes.
Pour qu’Apache puisse servir ce contenu, il est nécessaire de créer un fichier d’hôte virtuel avec les directives correctes. Au lieu de modifier le fichier de configuration par défaut situé à /etc/apache2/sites-available/000-default.conf
, vous allez en créer deux nouveaux dans le répertoire /etc/apache2/sites-available/
.
Commencez par créer un nouveau fichier de configuration d’hôte virtuel pour le site Web site1.your_domain
. Ici, vous allez indiquer à Apache de rendre le contenu en utilisant php7.0
:
- sudo nano /etc/apache2/sites-available/site1.your_domain.conf
Ajoutez le contenu suivant. Assurez-vous le chemin du répertoire du site Web, le nom du serveur et la version PHP correspondent à votre configuration :
<VirtualHost *:80>
ServerAdmin admin@site1.your_domain
ServerName site1.your_domain
DocumentRoot /var/www/site1.your_domain
DirectoryIndex info.php
<Directory /var/www/site1.your_domain>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
<FilesMatch \.php$>
# For Apache version 2.4.10 and above, use SetHandler to run PHP as a fastCGI process server
SetHandler "proxy:unix:/run/php/php7.0-fpm.sock|fcgi://localhost"
</FilesMatch>
ErrorLog ${APACHE_LOG_DIR}/site1.your_domain_error.log
CustomLog ${APACHE_LOG_DIR}/site1.your_domain_access.log combined
</VirtualHost>
Dans ce fichier, vous avez mis à jour le DocumentRoot
sur votre nouveau répertoire et ServerAdmin
à un email auquel l’administrateur du site your_domain
peut accéder. Vous avez également mis à jour ServerName
, qui établit le domaine de base pour cette configuration d’hôte virtuel, et vous avez ajouté une directive SetHandler
pour exécuter PHP en tant que serveur de processus fastCGI
Enregistrez et fermez le fichier.
Ensuite, créez un nouveau fichier de configuration d’hôte virtuel pour le site Web site2.your_domain
. Vous allez spécifier ce sous domaine pour déployer php7.2
- sudo nano /etc/apache2/sites-available/site2.your_domain.conf
Ajoutez le contenu suivant. Là encore, assurez-vous que le chemin d’accès au répertoire du site web, le nom du serveur et la version PHP correspondent à vos informations uniques :
<VirtualHost *:80>
ServerAdmin admin@site2.your_domain
ServerName site2.your_domain
DocumentRoot /var/www/site2.your_domain
DirectoryIndex info.php
<Directory /var/www/site2.your_domain>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
<FilesMatch \.php$>
# For Apache version 2.4.10 and above, use SetHandler to run PHP as a fastCGI process server
SetHandler "proxy:unix:/run/php/php7.2-fpm.sock|fcgi://localhost"
</FilesMatch>
ErrorLog ${APACHE_LOG_DIR}/site2.your_domain_error.log
CustomLog ${APACHE_LOG_DIR}/site2.your_domain_access.log combined
</VirtualHost>
Enregistrez et fermez le fichier lorsque vous avez terminé. Vérifiez ensuite le fichier de configuration Apache pour détecter toute erreur de syntaxe :
- sudo apachectl configtest
Vous verrez la sortie suivante :
OutputSyntax OK
Ensuite, activez les deux fichiers de configuration d’hôte virtuel :
- sudo a2ensite site1.your_domain
- sudo a2ensite site2.your_domain
Désactivez maintenant le site par défaut, puisque vous n’en aurez pas besoin :
- sudo a2dissite 000-default.conf
Enfin, redémarrez le service Apache pour implémenter vos changements :
- sudo systemctl restart apache2
Maintenant que vous avez configuré Apache pour servir chaque site, vous allez les tester pour vous assurer que les versions PHP adéquates tournent.
À ce stade, vous avez configuré deux sites web pour exécuter deux versions différentes de PHP. Testez maintenant les résultats.
Ouvrez votre navigateur web et consultez les deux sites http://site1.your_domain
et http://site2.your_domain
Vous verrez deux pages qui ressemblent à ceci :
Notez les titres. La première page indique que site1.your_domain
a déployé PHP version 7.0. La deuxième indique que site2.your_domain
a déployé PHP version 7.2.
Maintenant que vous avez testé vos sites, supprimez les fichiers info.php
. Étant donné qu’ils contiennent des informations sensibles sur votre serveur et sont accessibles aux utilisateurs non autorisés, ils constituent une menace de sécurité. Pour supprimer les deux fichiers, exécutez les commandes suivantes :
- sudo rm -rf /var/www/site1.your_domain/info.php
- sudo rm -rf /var/www/site2.your_domain/info.php
Vous disposez maintenant d’un seul serveur Debian 10 qui gère deux sites web avec deux versions PHP différentes. Cela dit, PHP-FPM n’est pas limité à cette seule application.
Vous avez maintenant combiné des hôtes virtuels et PHP-FPM pour servir plusieurs sites web et plusieurs versions de PHP sur un seul serveur. La seule limite pratique sur le nombre de sites PHP et les versions PHP que votre service Apache peut gérer est la puissance de traitement de votre instance.
À partir de là, vous pouvez envisager d’explorer les fonctionnalités les plus avancées de PHP-FPM, comme son processus de spawning adaptatif ou la façon dont il peut enregistrer sdtout
et stderr
. Sinon, vous pouvez maintenant sécuriser vos sites web. Pour ce faire, vous pouvez suivre notre tutoriel sur comment sécuriser vos sites avec des certificats TLS/SSL gratuits de Let’s Encrypt.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!