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.
Echando 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:
[code language="bash"] [/code]
[code language="xml"] [/code]
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
[code language="bash"]mkdir /opt/php-5.6.0/etc/pool.d vi /etc/init.d/php-5.6.0-fpm [/code]
Ahora copiamos y pegamos este texto dentro del archivo que acabamos de crear:
[code language="xml"] #! /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[/code]
Hacemos que el script sea ejecutable y lo movemos a system.d con los siguientes comandos:
[code language="bash"] 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 [/code]
Activamos el módulo fastcgi , reiniciamos apache y modificamos el archivo /opt/php-5.6.0/lib/php.ini de la siguiente manera:
[code language="bash"] a2enmod fastcgi service apache2 restart vi /opt/php-5.6.0/lib/php.ini [/code]
Pegamos el siguiente texto al final del archivo:
[code language="xml"] 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 [/code]
Antes de hacer nada, instalamos los módulos APCu, memcache y memcached con los siguientes comandos:
[code language="bash"] 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 [/code]
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:
En PHP Name ponemos el nombre que le vayamos a poner a esta versión. Yo he usado PHP 5.6.0.
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/
Ahora ya podremos elegir un dominio en el que usar esta versión de PHP.
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