Introducción
PHP es un lenguaje script de propósito general que es usado fundamentalmente para desarrollo web.Sitios como Wikipedia y Facebook usan PHP como parte de su infraestructura de desarrollo. Si te inicias en el mundo de PHP encontrarás:
Características de la comunidad como:
- Desarrollo activo
- Gran comunidad
- Buena documentación, libros y blogs
Características del lenguaje como:
- Acceso a BD: MySQL, PostgreSQL, SQLite, Firebird, MSSQL, SQL Server …
- Espacio de nombres (Namespaces)
- Programación Orientada a Objetos
- Reflexión (Reflection)
- Manipuladores de ficheros (File handlers)
- Procesamiento de texto (PCRE)
- Manipulación de errores
- Manipulación de excepciones
- Funciones anónimas
- Generadores (Generators)
- Funciones varíadicas
- Desempaquetador de argumentos
- Ligera curva de aprendizaje y más
¿Por qué compilar desde el código fuente?
Compilar desde el código es una buena opción si desea:
- Actualizar a la última versión
- Obtener beneficios de las últimas caractéristicas del lenguaje
- Corregir errores de versiones anteriores
- Personalizar el proceso de instalación
Objetivos
Después de terminar este tutorial Ud. sera capaz de compilar PHP
Prerrequisitos
Este tutorial asume que Ud. tiene
- Algún conocimiento sobre GNU/Linux
- Esta familiarizado con la consola y el intérprete de comandos
- Está familiarizado con el proceso de compilación
Descargar PHP
La versión de PHP disponible en el momento de escribir este tutorial es la 5.6.12, para descargarla teclee:
$ wget http://us1.php.net/distributions/php-5.6.12.tar.xz
Descompactar
Podemos descompactar el fichero descargado anteriormente usando la herramienta tar
$ tar xJvf php-5.6.12.tar.xz
donde:
x = extraer
J = permite manipular extensiones xz
v = verboso
f = fichero
Instalando Colección de Compiladores GNU y herramientas esenciales
# yum -y install gcc gcc-c++ make automake autoconf bison flex libtool libstdc++-devel
Instalando dependencias
Compilaremos PHP con soporte XML, SSL, PCRE, SQLite, bzip2, curl, GD, mcrypt …. mcrypt está disponible en el repositorio EPEL entonces tecleamos:
# yum -y install epel-release && \ yum -y install libxml2-devel openssl openssl-devel pcre-devel \ sqlite-devel bzip2-devel libcurl-devel libicu-devel gd-devel \ readline-devel libmcrypt-devel systemd-devel
Descargar php-build.sh script de Github
php-build.sh facilita el proceso de compilación de PHP. Habilita las extensiones más comunes: curl, openssl, intl, mysql, pcre, … y permite instalar PHP en un DIR elegido por Ud. ofrece la posibilidad de compilar PHP con soporte para Apache (prefork o worker) o con soporte para PHP-FPM.
Ud. puede modificar php-build.sh de acuerdo a sus necesidades.
Si compila PHP con soporte para PHP-FPM debe editar el script php-build.sh y establecer el usuario y grupo bajo el cual correrá el servicio PHP-FPM.
# wget https://raw.githubusercontent.com/yoander/sysadmin/master/shscript/php-build.sh && \ chmod a+x php-build.sh
Compilar PHP con soporte para PHP-FPM y systemd
PHP-FPM (FastCGI Process Manager) es una implementación alternativa del protocolo FastCGI ques es parte oficial de PHP a partir de la versión 5.3.3.
systemd es un reemplazo al sistema de inicialización SysV. systemd además es una suite de administración de servicios y configuraciones para el sistema operativo GNU/Linux.
Primero creamos los DIR necesarios que se usaran durante el proceso de compilación.
# mkdir -p /etc/php/conf.d /usr/lib/php/modules /usr/share/pear
Creamos el enlace simbólico para la librería PCRE con el objetivo de evitar el siguiente error: «configure: error: Could not find libpcre.(a|so) in /usr»
# ln -s /usr/lib64/libpcre.so.1.2.0 /usr/lib/libpcre.so
luego compilamos
# ./php-build.sh -fs php-5.6.12
donde -f = soporte PHP-FPM, s = integración con systemd
Instalar
# cd php-5.6.12 && make install
Creando fichero de configuración
El código fuente de PHP viene con 2 versiones del fichero .ini. Debido a que estamos compilando PHP en un servidor de PROD tecleamos:
# cp -v php.ini-production /etc/php/php.ini
Ajuste las directivas de acuerdo a sus necesidades
Creando el fichero de configuración para PHP-FPM
# cp -pv /etc/php/php-fpm.conf.default /etc/php/php-fpm.conf
Editamos el fichero /etc/php/php-fpm.conf
Para permitir que el servicio php-fpm escuche por todas las interfaces establecemos el valor de la directiva listen a:
listen 9000
Para restringir el acceso al servicio php-fpm y solo permitir determinadas IPs establecemos la directiva listen.allowed_clients a:
listen.allowed_clients = 127.0.0.1,192.168.0.106,192.168.0.107,192.168.0.108
Habilitamos OPcache
OPcache mejora el rendimiento de sus aplicaciones al almacenar el código precompilado en la memoria compartida permitiendo servir mayor número de peticiones por segundo.
# echo "zend_extension=opcache.so" > /etc/php/conf.d/20-opcache.ini
Creamos el servicio de inicialización PHP-FPM
# cp -v ./sapi/fpm/php-fpm.service /usr/lib/systemd/system/php-fpm.service
Si el usuario y el grupo bajo los cuales se ejecutará el servicio php-fpm no existe entonces deben crease.
# groupadd --system www-data && \ useradd --system -m -d /var/www -s /usr/sbin/nologin -g www-data www-data
Los comandos anteriores crean el usuario y el grupo www-data
-m = Crea el DIR HOME si no existe
-d = DIR HOME para el usuario en cuestion
-s = login shell (no login shell debido a que el usuario www-data no se autenticará en el sistema operativo)
-g = a que grupo pertenecerá el usuario en cuestión
Por razones de seguridad cambiaremos el propietario y el grupo para el DIR /var/www
# chown root:root -c /var/www/ && chmod 755 /var/www/
Iniciar PHP-FPM con el sistema operativo
# systemctl enable php-fpm
Iniciar el servicio PHP-FPM
# systemctl start php-fpm
Chequear el servicio PHP-FPM
# systemctl status php-fpm
Crear el fichero info.php
# echo '<?php phpinfo();' > /var/www/info.php
NGINX
NGINX es un servidor web con excelente rendimiento y bajo consumo de memoria. NGINX puede usarse como proxy reverso y como balanceador de carga. En este ejemplo usaremos NGINX como proxy reverso para comprobar nuestro servicio PHP-FPM.
Instalando NGINX
NGINX está disponible a través EPEL repo
# yum -y install epel-release && yum -y install nginx
Editamos /etc/nginx/nginx.conf
Buscamos la seccion server y agregamos el siguiente bloque
location ~ \.php$ { root /var/www; fastcgi_split_path_info ^(.+.php)(/.+)$; fastcgi_pass 192.168.0.104:9000; fastcgi_index index.php; include fastcgi.conf; }
192.168.0.104 es la IP donde el servicio php-fpm está escuchando
Iniciar NGINX con el sistema operativo
# systemctl enable nginx
Iniciar el servicio NGINX
# systemctl start nginx
Chequear el servicio NGINX
# systemctl status nginx
Abriendo los puertos 80 (NGINX) y 9000 (php-fpm)
FirewallD es el muro cortafuegos por defecto en CentOS 7.
Añadimos a nuestro muro cortafuegos el rango de IPs que tendrán acceso al NGINX y al servicio PHP-FPM.
# firewall-cmd --permanent --zone=trusted --add-source=192.168.0.0/24
Refrescamos las reglas del muro cortafuegos
# firewall-cmd --reload
Probar
Teclee en su navegador
$ firefox http://192.168.0.106/info.php
192.168.0.106 es la IP donde el servidor NGINX está escuchando.
Conclusiones
Ahora que has aprendido como compilar PHP puedes obtener todas las ventajas (corrección de errores, mejoras de rendimiento, últimas funcionalidades) sin esperar a que los empaquetadores de su distribución actualicen la versión de PHP.
Compilando PHP desde el código fuente, 10 (11)
- Cómo compilar PHP 7.1 en Ubuntu 16.04
- pbt – Una herramienta para compilar PHP
- Cómo Compilar/Instalar PHP-7.2 en CentOS
- Cómo compilar PHP-7.3 en Debian GNU/Linux
- ¿Cómo Compilar PHP 7.4 en Ubuntu 18.04?
- ¿Cómo Compilar PHP 8 en Debian 10?
- Compilar php 5.5 con soporte apache prefork
- Compilar PHP-5.6 con soporte para Apache Worker
- Compilar php-5.6 con soporte fpm
- Compilar PHP-5.6 en Centos 7
- Compilar PHP 7 en Debian 8