Version 1.0
Auteurs :Till Brehm
Suivez howtoforge sur Twitter
ISPConfig 3 a une fonctionnalité intégrée pour prendre en charge plusieurs versions PHP sur un serveur et sélectionner la version PHP optimale pour un site Web. Cette fonctionnalité fonctionne avec PHP-FPM et FastCGI. Ce tutoriel montre comment construire PHP 5.6 en tant que PHP-FPM et une version FastCGI sur un serveur Debian Wheezy. Ces builds PHP 5.5 incluent Zend OPcache et APCu.
1 Remarque préliminaire
Je vais installer PHP 5.6.36, la dernière version de PHP 5 au moment d'écrire ces lignes. Je montrerai également comment créer des extensions PHP supplémentaires telles que APCu et Memcache. Le chargeur ioncube n'est pas disponible pour php 5.6 pour le moment, je vais donc laisser de côté cette étape.
Veuillez noter que PHP-FPM peut être utilisé sur les serveurs Apache et nginx, tandis que FastCGI n'est disponible que pour les serveurs Apache.
PHP-FPM et FastCGI s'excluent mutuellement dans PHP 5.6, c'est pourquoi je montre deux façons de construire PHP, une pour PHP-FPM, une pour FastCGI, mais vous pouvez compiler PHP deux fois pour obtenir les deux, une fois avec --enable-fpm et une fois avec --enable-cgi (assurez-vous d'utiliser des répertoires de base différents, tels que /opt/php-5.6.36 pour PHP-FPM et /opt/phpfcgi-5.6.36 pour FastCGI).
2 Compiler PHP 5.6.36 (PHP-FPM)
Téléchargez et extrayez PHP 5.6.36 :
mkdir /opt/php-5.6.36
mkdir /usr/local/src/php5-build
cd /usr/local/src/php5-build
wget http://de2.php.net/get/php-5.6.36.tar.bz2/from/this/mirror -O php-5.6.36.tar.bz2
tar jxf php-5.6.36.tar.bz2
cd php-5.6.36/
Installez les prérequis pour compiler PHP5 :
apt-get install build-essential
apt-get build-dep php5
apt-get install libfcgi-dev libfcgi0ldbl libjpeg62-dbg libmcrypt-dev libssl-dev libc-client2007e libc-client2007e-dev
ln -s /usr/lib/libc-client.a /usr/lib/x86_64-linux-gnu/libc-client.a
(La dernière commande est nécessaire si vous construisez PHP avec --with-imap, car sinon ./configure s'arrêtera avec l'erreur suivante :
checking for crypt in -lcrypt... yes
configure: error: Cannot find imap library (libc-client.a). Please check your c-client installation.
[email protected]:/usr/local/src/php5-build/php-5.6.36#
)
Configurez et compilez PHP 5.6.36 comme suit (vous pouvez ajuster la commande ./configure à vos besoins, jetez un œil à
./configure --help
pour voir toutes les options disponibles ; si vous utilisez une commande ./configure différente, il est possible que des bibliothèques supplémentaires soient requises ou que le processus de construction échoue) :
./configure --prefix=/opt/php-5.6.36 --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-mysql --with-pdo-mysql --with-mysqli --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
Le dernier commutateur (--enable-fpm) garantit que cette version de PHP fonctionnera avec PHP-FPM.
make
make install
Copiez php.ini et php-fpm.conf aux bons emplacements :
cp /usr/local/src/php5-build/php-5.6.36/php.ini-production /opt/php-5.6.36/lib/php.ini
cp /opt/php-5.6.36/etc/php-fpm.conf.default /opt/php-5.6.36/etc/php-fpm.conf
Ouvrez /opt/php-5.6.36/etc/php-fpm.conf et ajustez les paramètres suivants - dans la ligne d'écoute, vous devez utiliser un port inutilisé (par exemple, 8999 ; le port 9000 peut déjà être utilisé par le PHP-FPM par défaut de Debian ), et vous devez ajouter la ligne include=/opt/php-5.6.36/etc/pool.d/*.conf à la fin :
vi /opt/php-5.6.36/etc/php-fpm.conf
[...] pid = run/php-fpm.pid [...] user = www-data group = www-data [...] listen = 127.0.0.1:8999 [...] include=/opt/php-5.6.36/etc/pool.d/*.conf
Créez le répertoire du pool pour PHP-FPM :
mkdir /opt/php-5.6.36/etc/pool.d
Créez ensuite un script d'initialisation pour PHP-FPM :
vi /etc/init.d/php-5.6.36-fpm
#! /bin/sh ### BEGIN INIT INFO # Provides: php-5.6.36-fpm # Required-Start: $all # Required-Stop: $all # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: starts php-5.6.36-fpm # Description: starts the PHP FastCGI Process Manager daemon ### END INIT INFO php_fpm_BIN=/opt/php-5.6.36/sbin/php-fpm php_fpm_CONF=/opt/php-5.6.36/etc/php-fpm.conf php_fpm_PID=/opt/php-5.6.36/var/run/php-fpm.pid php_opts="--fpm-config $php_fpm_CONF" wait_for_pid () { try=0 while test $try -lt 35 ; do case "$1" in 'created') if [ -f "$2" ] ; then try='' break fi ;; 'removed') if [ ! -f "$2" ] ; then try='' break fi ;; esac echo -n . try=`expr $try + 1` sleep 1 done } case "$1" in start) echo -n "Starting php-fpm " $php_fpm_BIN $php_opts if [ "$?" != 0 ] ; then echo " failed" exit 1 fi wait_for_pid created $php_fpm_PID if [ -n "$try" ] ; then echo " failed" exit 1 else echo " done" fi ;; stop) echo -n "Gracefully shutting down php-fpm " if [ ! -r $php_fpm_PID ] ; then echo "warning, no pid file found - php-fpm is not running ?" exit 1 fi kill -QUIT `cat $php_fpm_PID` wait_for_pid removed $php_fpm_PID if [ -n "$try" ] ; then echo " failed. Use force-exit" exit 1 else echo " done" echo " done" fi ;; force-quit) echo -n "Terminating php-fpm " if [ ! -r $php_fpm_PID ] ; then echo "warning, no pid file found - php-fpm is not running ?" exit 1 fi kill -TERM `cat $php_fpm_PID` wait_for_pid removed $php_fpm_PID if [ -n "$try" ] ; then echo " failed" exit 1 else echo " done" fi ;; restart) $0 stop $0 start ;; reload) echo -n "Reload service php-fpm " if [ ! -r $php_fpm_PID ] ; then echo "warning, no pid file found - php-fpm is not running ?" exit 1 fi kill -USR2 `cat $php_fpm_PID` echo " done" ;; *) echo "Usage: $0 {start|stop|force-quit|restart|reload}" exit 1 ;; esac
Rendez le script d'initialisation exécutable et créez les liens de démarrage du système :
chmod 755 /etc/init.d/php-5.6.36-fpm
insserv php-5.6.36-fpm
Démarrez enfin PHP-FPM :
/etc/init.d/php-5.6.36-fpm start
Tant qu'il n'y a pas de pools dans /opt/php-5.6.36/etc/pool.d, vous obtiendrez cet avertissement que vous pouvez ignorer :
[email protected]:/usr/local/src/php5-build/php-5.6.36# /etc/init.d/php-5.6.36-fpm start
Starting php-fpm [29-Aug-2014 13:21:12] WARNING: Nothing matches the include pattern '/opt/php-5.6.36/etc/pool.d/*.conf' from /opt/php-5.6.36/etc/php-fpm.conf at line 528.
done
[email protected]:/usr/local/src/php5-build/php-5.6.36#
Pour activer Zend OPcache, ouvrez /opt/php-5.6.36/lib/php.ini...
vi /opt/php-5.6.36/lib/php.ini
... et ajoutez la ligne suivante à la fin :
[...] zend_extension=opcache.so
C'est tout - si vous le souhaitez, vous pouvez maintenant installer des modules supplémentaires comme APCu, memcache, memcached et ioncube.
Les modules APCu, memcache et memcached peuvent être installés via PEAR que nous devons d'abord installer et initialiser :
apt-get -y install php-pear
cd /opt/php-5.6.36/etc
pecl -C ./pear.conf update-channels
APCu peut maintenant être installé comme suit :
pecl -C ./pear.conf install channel://pecl.php.net/apcu-4.0.6
Acceptez toutes les valeurs par défaut. Ensuite, ouvrez /opt/php-5.6.36/lib/php.ini...
vi /opt/php-5.6.36/lib/php.ini
... et ajoutez la ligne extension=apcu.so à la fin du fichier (vous pouvez également configurer des paramètres APCu supplémentaires) :
[...] extension=apcu.so apc.enabled=1 apc.shm_size=128M apc.ttl=0 apc.gc_ttl=600 apc.enable_cli=1 apc.mmap_file_mask=/tmp/apc.XXXXXX ;apc.mmap_file_mask=/dev/zero ;apc.shm_segments = 5
L'extension Memcache peut être installée comme suit :
pecl -C ./pear.conf install memcache
Ouvrez /opt/php-5.6.36/lib/php.ini...
vi /opt/php-5.6.36/lib/php.ini
... et ajoutez la ligne extension=memcache.so à la fin du fichier :
[...] extension=memcache.so
Rechargez ensuite PHP-FPM :
/etc/init.d/php-5.6.36-fpm reload
Dans ISPConfig 3.0.5, vous pouvez configurer la nouvelle version PHP sous Système> Versions PHP supplémentaires. Dans l'onglet Nom, il vous suffit de saisir un nom pour la version de PHP (par exemple, PHP 5.6.36) - cette version de PHP sera répertoriée sous ce nom dans les paramètres du site Web dans ISPConfig :
Allez dans l'onglet Paramètres PHP-FPM (l'onglet Paramètres FastCGI peut être laissé vide) et remplissez les champs comme suit :