Instalar php7 en debian y hacerlo convivir con php5 simultáneamente con php-fpm
Necesitaba instalar el nuevo PHP7 en un servidor donde recientemente tenía instalado un servidor en producción en Debian 8. Este servidor cumple con los servicios web y para eso tiene el conjunto de programas de servidor Apache, MySQL y PHP. Como la instalación se ha hecho mediante el repositorio estable de debian la versión que trae de php es la 5.6.
Sin embargo la idea es añadirle también la versión de PHP 7 que ha salido hace poco a disposición general. A continuación muestro como lo he hecho para que puedan funcionar las dos versiones distintamente.
El servicio PHP 5 está configurado como un sistema standalone, es decir no funciona como un módulo de apache, eso me permite tener mayor control, puesto que hago que cada virtualhost de Apache tenga su propia instancia de PHP y controlar así qué virtualhosts requiere más recursos. También me permite tener más pistas a la hora de ver qué ha podido suceder cuando ha habido algún problema sin afectar a los demás.
Así pues, asumo en esta muestra que ya tienes instalado y configurado en tu servidor PHP 5 en modo FPM y todo ello conectado con apache mediante socket o puerto local.
Preparación
Nos situamos en el directorio de fuentes:
cd /usr/src
Instalamos los paquetes necesarios:
apt-get -y install build-essential autoconf insserv bison git
Instalamos las librerías:
apt-get -y install libgmp-dev libmysqlclient-dev libfcgi-dev libfcgi0ldbl libmcrypt-dev libreadline-dev
Ajustamos el fallo de la localización del fichero gmp.h para compilar.
ln -s /usr/include/x86_64-linux-gnu/gmp.h /usr/include/gmp.h
Compilación
Clonamos el repositorio
git clone https://git.php.net/repository/php-src.git
cd php-src
Compilamos
./buildconf
./configure --prefix=/usr/local/php7 --localstatedir=/usr/local/var --sysconfdir=/usr/local/etc/php7 --with-config-file-path=/usr/local/etc/php7 --with-config-file-scan-dir=/usr/local/etc/php7/conf.d --mandir=/usr/local/php7/share/man --enable-mbstring --enable-zip --enable-bcmath --enable-pcntl --enable-ftp --enable-exif --enable-calendar --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-wddx --with-curl --with-mcrypt --with-iconv --with-gmp --with-pspell --with-gd --with-jpeg-dir=/usr --with-png-dir=/usr --with-zlib-dir=/usr --with-xpm-dir=/usr --with-freetype-dir=/usr --enable-gd-native-ttf --enable-gd-jis-conv --with-openssl --with-pdo-mysql=/usr --with-gettext=/usr --with-zlib=/usr --with-bz2=/usr --with-mysqli=/usr/bin/mysql_config --with-fpm-user=www-data --with-fpm-group=www-data --enable-fpm --enable-sockets --enable-intl --enable-mysqlnd --with-mysqli=shared,mysqlnd --enable-bcmath --enable-dba --with-gmp --with-imap --with-imap-ssl --with-mhash --with-readline --enable-shmop --enable-soap --with-xmlrpc --with-xsl=/usr --enable-opcache --with-kerberos
Nota: el paquete recode se ha quitado porque no es compatible con imap:
--with-recode=/usr
make
make install
Configuración
php.ini
cp /usr/src/php-src/php.ini-production /usr/local/etc/php7/php.ini
php-fpm.conf
cp /usr/local/etc/php7/php-fpm.conf.default /usr/local/etc/php7/php-fpm.conf
Editamos: /usr/local/etc/php7/php-fpm.conf
pid = run/php7-fpm.pid
www.conf
cp /usr/local/etc/php7/php-fpm.d/www.conf.default /usr/local/etc/php7/php-fpm.d/www.conf
Editamos: /usr/local/etc/php7/php-fpm.d/www.conf
Lo que hacemos es comentar el puerto 9000 y activar la conexión por socket.
;listen = 127.0.0.1:9000
listen = /var/run/php7-fpm.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
Servicio FPM
php7-fpm
Creamos el siguiente fichero: /etc/init.d/php7-fpm
if init_is_upstart; then
exit 1
fi
#
# Function to check the correctness of the config file
#
do_check()
{
# Run php-fpm with -t option to check the configuration file syntax
errors=$($DAEMON –fpm-config $CONFFILE -t 2>&1 | grep "\[ERROR\]" || true);
if [ -n "$errors" ]; then
echo "Please fix your configuration file…"
echo $errors
return 1
fi
return 0
}
#
# Function that starts the daemon/service
#
do_start()
{
# Return
# 0 if daemon has been started
# 1 if daemon was already running
# 2 if daemon could not be started
start-stop-daemon –start –quiet –pidfile $PIDFILE –exec $DAEMON –test > /dev/null \
|| return 1
start-stop-daemon –start –quiet –pidfile $PIDFILE –exec $DAEMON — \
$DAEMON_ARGS 2>/dev/null \
|| return 2
# Add code here, if necessary, that waits for the process to be ready
# to handle requests from services started subsequently which depend
# on this one. As a last resort, sleep for some time.
}
#
# Function that stops the daemon/service
#
do_stop()
{
# Return
# 0 if daemon has been stopped
# 1 if daemon was already stopped
# 2 if daemon could not be stopped
# other if a failure occurred
start-stop-daemon –stop –quiet –retry=QUIT/$TIMEOUT/TERM/5/KILL/5 –pidfile $PIDFILE –name $NAME
RETVAL="$?"
[ "$RETVAL" = 2 ] && return 2
# Wait for children to finish too if this is a daemon that forks
# and if the daemon is only ever run from this initscript.
# If the above conditions are not satisfied then add some other code
# that waits for the process to drop all resources that could be
# needed by services started subsequently. A last resort is to
# sleep for some time.
start-stop-daemon –stop –quiet –oknodo –retry=0/30/TERM/5/KILL/5 –exec $DAEMON
[ "$?" = 2 ] && return 2
# Many daemons don’
2) [ "$VERBOSE""$VERBOSE""$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME""$?""$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE""$DAEMON" "$NAME""Reloading $DESC" "$NAME""Reopening $DESC logs""Restarting $DESC" "$NAME""$?""$?""Usage: $SCRIPTNAME {start|stop|status|restart|reload|force-reload}"
Ajustamos los permisos del fichero
chmod 755 /etc/init.d/php7-fpm
Incluímos el servicio php7-fpm
/usr/lib/insserv/insserv php7-fpm
Creamos el fichero /lib/systemd/system/php7-fpm.service
Arrancamos el servicio php7-fpm
Si tu sistema soporta systemctl entonces debes activar lo siguiente:
systemctl enable php7-fpm.service
systemctl daemon-reload
service php7-fpm start
En caso que no, puedes hacer lo siguiente:
/etc/init.d/php7-fpm start
Con estos pasos ya puedes tener funcionado dos servicios de php, cada uno con su versión. A partir de ahí en cada virtualhost definimos mediante el módulo FastCGI a que socket debe conectarse y por consiguiente a que versión de PHP.
En este post solo hablo de la instalación de PHP7 para que pueda convivir con PHP5, no se explica como instalar y configurar PHP mediante FPM, en caso que pida es posible que haga otro post sobre la instalación de PHP-FPM, FastCGI y Apache.
Estás leyendo “Instalar php7 en debian y hacerlo convivir con php5 simultáneamente con php-fpm”, en Jorge Huerga
- Publicado:
- 11/03/16 a las 20:03H GMT +02:00
- Categoría:
- PHP
- Estadísticas:
- 1.508 veces visto
- Evaluación:
- Navegar entre entradas:
- « Cambiar mac address ddwrt
Extraer sólo los ficheros de una revisión SVN »
- 19/08/16 a las 20:03H GMT +02:00 1
[…] Como instalar en un debian 8 una instancia de php7 y php5 a la vez […]
- 09/09/17 a las 20:03H GMT +02:00 2
El script php7-fpm me da un error que no acabo de entender:
sed: -e expression #1, char 1: unknown command: `▒’
Gracias!
- 26/09/17 a las 20:03H GMT +02:00 3
Hola!, cuando te sale este error? cuando intentas arrancar el servicio?
XHTML:You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
¿Que es trackback?
Se trata de un enlace inverso que permite conocer qué enlaces apuntan hacia un determinado post; de ese modo avisa a otro weblog que se está citando uno de sus posts.
Básicamente, si un blog admite trackbacks quiere decir que es capaz de recibir un aviso de otro blog, de forma que dos de los artículos de ambos quedan relacionados entre sí, normalmente porque el segundo hace referencia al primero.
Los trackbacks a un artículo quedan reflejados habitualmente al pie del mismo, más o menos en el lugar en que aparecen los comentarios.
Una explicación menos técnica sería la siguiente: Es la continuación de un determinado artículo (post) en otro Blog distinto (o sea, hecho por otra persona). Que deja constancia de que lo está usando en el artículo original mediante un enlace a su blog en un apartado diferenciado de los comentarios.
fuente: wikipedia¿Que són los RSS?
RSS es un sencillo formato de datos que es utilizado para redifundir contenidos a suscriptores de un sitio web. El formato permite distribuir contenido sin necesidad de un navegador, utilizando un software diseñado para leer estos contenidos RSS (agregador). A pesar de eso, es posible utilizar el mismo navegador para ver los contenidos RSS. Las últimas versiones de los principales navegadores permiten leer los RSS sin necesidad de software adicional.
RSS es parte de la familia de los formatos XML desarrollado específicamente para todo tipo de sitios que se actualicen con frecuencia y por medio del cual se puede compartir la información y usarla en otros sitios web o programas. A esto se le conoce como redifusión web o sindicación web (una traducción incorrecta, pero de uso muy común).
fuente: wikipedia