Le but du tutoriel est de faire tourner plusieurs versions de PHP sur le même serveur Apache. A la fin de ce tutoriel vous serez capable de tester votre site sur autant de versions de PHP que vous avez installé en modifiant une petite ligne dans votre Vhost, c'est pas beau ça? :)
En premier lieu si vous n'avez pas de serveur Apache d'installer, nous allons l'installer :
apt-get install apache2
apt-get install mysql-server
apt-get install php5 php-pear
apt-get install php5-mysql
Nous installons ensuite Php-fpm qui est une alternative à FastCGI avec de meilleures performances :
apt-get install php5-fpm
Pour qu'Apache puisse communiquer avec Php5 Fpm nous devons installer ce module ci :
apt-get install libapache2-mod-fastcgi
Il est possible qu'il mette une erreur comme quoi il ne connait pas ce module, il faut alors modifier votre fichier /etc/apt/sources.list et rajoutez non-free à chaque fin de lignes. De base Debian ne donne que les programmes entièrement libre, le fait de rajoutez non-free permet d'avoir aussi accès au non-libre. Il faut aussi que nous activions le module action d'Apache :
a2enmod actions
Nous allons modifier le module qui se trouve dans /etc/apache2/mods-enable/fast-cgi.conf:
AddHandler fastcgi-script .fcgi #FastCgiWrapper /usr/lib/apache2/suexec FastCgiIpcDir /var/lib/apache2/fastcgi Action php5-fcgi /php5-fcgi Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization Require all granted
Nous devrions maintenant avoir un PHP qui fonctionne bien, faites un test en créant un index.php avec un php.info();
Nous allons maintenant installer notre seconde version de PHP, pour cela on se rend dans /opt, puis on va télécharger sur le site de php.net la version de PHP que l'on veut:
cd /opt
wget http://fr2.php.net/get/php-7.0.9.tar.gz/from/this/mirror
tar -xvf mirror
Maintenant que votre archive est décompressée on va passer à l'installation manuelle de cette nouvelle version de PHP, pour cela on va avoir besoin de certains paquets :
apt-get install build-essential nano
apt-get install libfcgi-dev libfcgi0ldbl libjpeg62-turbo-dbg libmcrypt-dev
libssl-dev libc-client2007e libc-client2007e-dev libxml2-dev libbz2-dev libcurl4-openssl-dev
libjpeg-dev libpng12-dev libfreetype6-dev libkrb5-dev libpq-dev libxml2-dev libxslt1-dev
ln -s /usr/lib/libc-client.a /usr/lib/x86_64-linux-gnu/libc-client.a
Nous pouvons maintenant lancer l'installation:
cd php-7.0.9
./configure --prefix=/opt/php-7.0.9 --with-pdo-pgsql --with-zlib-dir --with-freetype-dir
--enable-mbstring --with-libxml-dir=/usr --enable-soap --enable-calendar --with-curl
--with-mcrypt --with-zlib --with-gd --with-pgsql --disable-rpath --enable-inline-optimization
--with-bz2 --with-zlib --enable-sockets --enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex
--enable-exif --enable-bcmath --with-mhash --enable-zip --with-pcre-regex --with-pdo-mysql
--with-mysqli --with-mysql-sock=/var/run/mysqld/mysqld.sock --with-jpeg-dir=/usr --with-png-dir=/usr
--enable-gd-native-ttf --with-openssl --with-fpm-user=www-data --with-fpm-group=www-data
--with- libdir=/lib/x86_64-linux-gnu --enable-ftp --with-imap --with-imap-ssl --with-kerberos
--with-gettext --with-xmlrpc --with-xsl --enable-opcache --enable-fpm
La seule option à modifier est le --prefix qui doit pointer à l’endroit où vous avez télécharger votre PHP.
make
make install
Apres l'installation :
cp /opt/php-7.0.9/etc/php-fpm.conf.default /opt/php-7.0.9/etc/php-fpm.conf
cp /opt/php-7.0.9/etc/php-fpm.d/www.conf.default /opt/php-7.0.9/etc/php-fpm.d/www.conf
Nous allons maintenant devoir créer deux choses , le script d'initialisation dans init.d puis le service dans systemd.
vi /etc/init.d/php-7.0.9-fpm
On colle ceci :
On rend le script exécutable.
insserv php-7.0.9-fpm
Création du lien système d'initialisation.Et maintenant pour le service :
vi /lib/systemd/system/php-7.0.9-fpm.service
On colle ça :
[Unit]
Description=The PHP 7 FastCGI Process Manager
After=network.target
[Service]
Type=simple
PIDFile=/opt/php-7.0.9/var/run/php-fpm.pid
ExecStart=/opt/php-7.0.9/sbin/php-fpm --nodaemonize --fpm-config /opt/php-7.0.9/etc/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID
[Install]
WantedBy=multi-user.targetsystemctl enable php-7.0.9-fpm.service systemctl daemon-reload
On active le service et on reload le tout.Maintenant le test final :
/etc/init.d/php-7.0.9-fpm start
Si il met une erreur comme quoi il a un problème avec le PID il est possible qu'il n'ai pas créé le fichier PID dans /opt/php-7.0.9/var/run/php-fpm.pid, il faut alors le créé. Normalement on a une ligne qui s'affiche de ce genre :
/etc/init.d/php-7.0.9-fpm start
Starting php-fpm done
Nous avons maintenant 2 versions de PHP d’installer maintenant il faut qu'elles puissent cohabiter place à la dernière partie......
Nous allons utiliser les Vhosts d'Apache ainsi que le module proxy d'Apache qui va nous permettre de charger des conf de php.fpm différentes en fonction du Vhost.
a2enmod proxy
a2enmod proxy_fcgi
Nous allons aller modifier la configuration de nos php.fpm.
vi /etc/php5/fpm/pool.d/www.conf
La ligne qui nous intéresse est celle ci : listen = /var/run/php5-fpm.sock
Nous allons modifier par :listen = 127.0.0.1:8889
En gros on lui dit de faire la liaison avec apache sur un port défini sur lui même.On fait pareil pour notre 2e version de PHP mais sur un port différent évidemment, c'est là qu'est toute la subtilité ^^ :
vi /opt/php-7.0.9/etc/php-fpm.d/www.conf
On modifie :
listen = 127.0.0.1:8888
Il faut maintenant configurer nos vhosts :
vi /etc/apache2/sites-enables/php5.conf
On rajoute cette ligne : ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:8889/var/www/html/$1
Pareil pour le second Vhosts :
vi /etc/apache2/sites-enabled/php7.conf
On met :
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:8888/var/www/html/$1
Si vous allez sur un php.info avec l'un ou l'autre des vhosts vous devriez avoir maintenant deux versions différentes sur le même serveur.
Si vous avez la moindre question n'hésitez pas à la poser dans les commentaires ;)