Añadir otras versiones de PHP en ISPConfig 3.0.5

Actualizando owncloud me encontré con que este me recomendaba una versión superior de PHP a la que te instala por defecto el script de ISPConfig en Debian, la cual es la 5.4.45. En otras ocasiones he actualizado la versión por defecto de PHP del sistema, causando una serie de problemas de funcionamiento del servidor que hacía más factible recuperar de una copia de seguridad que arreglar el desastre realizado.

CapturaEchando un vistazo a las opciones que trae el ISPConfig veo que lleva un apartado que pone Additional PHP versions. Imaginé que esto era para asignar una versión diferente de la que viene por defecto en el sistema a unos dominios concretos.

En la imagen se aprecia en qué parte del panel de control se encuentra la mencionada opción.

Pero antes hemos de realizar unos pasos. Básicamente son los pasos de este tutorial pero con un par de modificaciones, pues yo no conseguía que me cambiara la versión del PHP en los sitios que quería.

Vamos a compilar la versión 5.6.0 de PHP-FPM. Realizamos los pasos:

mkdir /opt/php-5.6.0
mkdir /usr/local/src/php5-build
cd /usr/local/src/php5-build
wget http://de.php.net/get/php-5.6.0.tar.bz2/from/this/mirror -O php-5.6.0.tar.bz2
tar jxf php-5.6.0.tar.bz2
cd php-5.6.0/
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 libapache2-mod-fastcgi
ln -s /usr/lib/libc-client.a /usr/lib/x86_64-linux-gnu/libc-client.a
./configure --prefix=/opt/php-5.6.0 --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
make
make install
cp /usr/local/src/php5-build/php-5.6.0/php.ini-production /opt/php-5.6.0/lib/php.ini
cp /opt/php-5.6.0/etc/php-fpm.conf.default /opt/php-5.6.0/etc/php-fpm.conf

Editamos el archivo /opt/php-5.6.0/etc/php-fpm.conf y añadimos al final:

pid = run/php-fpm.pid
user = www-data
group = www-data
listen = 127.0.0.1:8999
include=/opt/php-5.6.0/etc/pool.d/*.conf

En mi caso, la linea 1 tuve que descomentarla solamente. Las líneas 2 y 3 ya estaban por defecto. El puerto de la línea 4 se puede poner cualquiera que no sea 9000 que esté libre. La línea 5 la puse al final.
Creamos el directorio pool.d y creamos el archivo /etc/init.d/php-5.6.0-fpm

mkdir /opt/php-5.6.0/etc/pool.d
vi /etc/init.d/php-5.6.0-fpm

Ahora copiamos y pegamos este texto dentro del archivo que acabamos de crear:

#! /bin/sh
### BEGIN INIT INFO
# Provides: php-5.6.0-fpm
# Required-Start: $all
# Required-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts php-5.6.0-fpm
# Description: starts the PHP FastCGI Process Manager daemon
### END INIT INFO
php_fpm_BIN=/opt/php-5.6.0/sbin/php-fpm
php_fpm_CONF=/opt/php-5.6.0/etc/php-fpm.conf
php_fpm_PID=/opt/php-5.6.0/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

Hacemos que el script sea ejecutable y lo movemos a system.d con los siguientes comandos:

chmod 755 /etc/init.d/php-5.6.0-fpm
insserv php-5.6.0-fpm
/etc/init.d/php-5.6.0-fpm start

Activamos el módulo fastcgi , reiniciamos apache y modificamos el archivo /opt/php-5.6.0/lib/php.ini de la siguiente manera:

a2enmod fastcgi
service apache2 restart
vi /opt/php-5.6.0/lib/php.ini

Pegamos el siguiente texto al final del archivo:

zend_extension=opcache.so
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
extension=memcache.so

Antes de hacer nada, instalamos los módulos APCu, memcache y memcached con los siguientes comandos:

apt-get -y install php-pear
cd /opt/php-5.6.0/etc
pecl -C ./pear.conf update-channels
pecl -C ./pear.conf install channel://pecl.php.net/apcu-4.0.6
pecl -C ./pear.conf install memcache
/etc/init.d/php-5.6.0-fpm reload

En principio ya está nuestra versión. Ahora la ponemos en el ISPConfig. Hacemos click en el orden en el que aparece en la imagen:

Captura2

En PHP Name ponemos el nombre que le vayamos a poner a esta versión. Yo he usado PHP 5.6.0.

Captura3

En la pestaña PHP-FPM Settings ponemos:

  • Path to the PHP-FPM init script: /etc/init.d/php-5.6.0-fpm
  • Path to the php.ini directory: /opt/php-5.6.0/lib/
  • Path to the PHP-FPM pool directory: /opt/php-5.6.0/etc/pool.d/

Captura4

Ahora ya podremos elegir un dominio en el que usar esta versión de PHP.