Serait-il possible de lancer PHP 7 et PHP 5 simultanément dans Apache 2.4 sur Debian 9? Je voudrais pouvoir sélectionner la version de PHP que je souhaite utiliser par virtualhost. Je pense que cela serait utile étant donné que certains de mes sites Web utilisent encore des fonctionnalités PHP obsolètes. Cela me permet d’effectuer des mises à niveau par site. Comment puis-je obtenir quelque chose comme ça?
Par exemple
ServerAdmin webmaster@localhost ServerName mywebsite.com DocumentRoot /var/www/mywebsite.com # UsePHP 7
Et
ServerAdmin webmaster@localhost ServerName mywebsite2.com DocumentRoot /var/www/mywebsite2.com # UsePHP 5
Commençons par le début. Je suppose que vous préféreriez utiliser php-fpm au lieu du module Apache.
Première installation d’Apache:
sudo apt-get update sudo apt-get install apache2
Ensuite, installez plusieurs PHP:
Debian 9:
Installez PHP 7:
sudo apt-get install php7.0-cli php7.0-fpm php-pear libapache2-mod-fastcgi
Configurez les référentiels:
sudo apt-get install apt-transport-https sudo curl https://packages.sury.org/php/apt.gpg | apt-key add - sudo echo 'deb https://packages.sury.org/php/ stretch main' > /etc/apt/sources.list.d/deb.sury.org.list sudo apt-get update
Installez PHP 5:
sudo apt-get install php5.6-cli php5.6-fpm
Debian 8:
Installez PHP 5:
sudo apt-get install php5 php5-fpm php-pear libapache2-mod-fastcgi
Configurez les référentiels:
Modifiez /etc/apt/sources.list
et ajoutez les lignes suivantes à la fin du fichier:
deb http://packages.dotdeb.org jessie all deb-src http://packages.dotdeb.org jessie all
Installer la clé GPG:
wget https://www.dotdeb.org/dotdeb.gpg sudo apt-key add dotdeb.gpg sudo apt-get update
Installez PHP 7:
sudo apt-get install php7.0 php7.0-fpm
Passez ensuite de prefork et activez les modules nécessaires:
Pour Debian 8:
a2dismod php5 mpm_prefork
Pour Debian 9:
a2dismod php7 mpm_prefork
Suivant pour les deux:
a2enmod actions fastcgi alias proxy_fcgi mpm_worker systemctl restart apache2
Changez le contenu de /etc/apache2/mods-enabled/fastcgi.conf
pour le suivant:
AddHandler fcgid-script fcg fcgi fpl Require all granted
Créez maintenant des dossiers racine de documents pour les sites Web:
mkdir -p /var/www/example.com/public_html mkdir -p /var/www/test.com/public_html
Ajoutez les utilisateurs sys pour ces sites Web:
sudo useradd example --home-dir /var/www/example.com sudo useradd test --home-dir /var/www/test.com
Configurez la propriété:
sudo chown -R example.example /var/www/example.com sudo chown -R test.test /var/www/test.com
Par exemple, le site Web example.com
utilisera PHP 5 et le site Web test.com
utilisera PHP 7.
Créez des fichiers de configuration pour les sites Web:
Site Web sur PHP 5:
touch /etc/apache2/sites-available/example.com.conf ln -s /etc/apache2/sites-available/example.com.conf /etc/apache2/sites-enabled/example.com.conf cat /etc/apache2/sites-available/example.com.conf ServerAdmin webmaster@localhost ServerName example.com ServerAlias www.example.com DocumentRoot /var/www/example.com/public_html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined AddType application/x-httpd-fastphp5 .php Action application/x-httpd-fastphp5 /php5-fcgi Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi-example.com FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi-example.com -socket /var/run/php5-fpm-example.com.sock -pass-header Authorization
Site Web sur PHP 7:
touch /etc/apache2/sites-available/test.com.conf ln -s /etc/apache2/sites-available/test.com.conf /etc/apache2/sites-enabled/test.com.conf cat /etc/apache2/sites-available/test.com.conf ServerAdmin webmaster@localhost ServerName test.com ServerAlias www.test.com DocumentRoot /var/www/test.com/public_html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined AddHandler php7-fcgi .php Action php7-fcgi /php7-fcgi virtual Alias /php7-fcgi /usr/lib/cgi-bin/php7-fcgi-test.com FastCgiExternalServer /usr/lib/cgi-bin/php7-fcgi-test.com -socket /var/run/php/php7.0-fpm-test.com.sock -pass-header Authorization
Créez des configurations de pool (j’ai utilisé ce qui suit):
Site Web sur PHP 5:
cat /etc/php5/fpm/pool.d/example.com.conf [example.com] user = example group = example listen = /var/run/php5-fpm-example.com.sock listen.owner = www-data listen.group = www-data php_admin_value[disable_functions] = exec,passthru,shell_exec,system php_admin_flag[allow_url_fopen] = off pm = dynamic pm.max_children = 5 pm.start_servers = 2 pm.min_spare_servers = 1 pm.max_spare_servers = 3 chdir = /
Site Web sur PHP 7:
cat /etc/php/7.0/fpm/pool.d/test.com.conf [test.com] user = test group = test listen = /var/run/php/php7.0-fpm-test.com.sock listen.owner = www-data listen.group = www-data php_admin_value[disable_functions] = exec,passthru,shell_exec,system php_admin_flag[allow_url_fopen] = off pm = dynamic pm.max_children = 5 pm.start_servers = 2 pm.min_spare_servers = 1 pm.max_spare_servers = 3 chdir = /
Redémarrez les services apache et php-fpm:
sudo systemctl restart apache2 php5-fpm php7.0-fpm
Prendre plaisir!
Il semble que cela soit possible, suite à la réponse étonnante d’Elvis.
Mais je préférerais utiliser deux serveurs virtuels avec un hôte virtuel chacun, plutôt que deux hôtes virtuels sur un serveur. Ce serait tellement plus facile à configurer.