Cómo compilar e instalar PHP 7.4 como PHP-FPM y FastCGI para ISPConfig 3 en Ubuntu 18.04 LTS
Ubuntu 18.04 viene con PHP 7.2 como versión PHP por defecto. Las principales versiones de PHP no son 100% compatibles entre sí, por lo que un sitio web puede requerir una versión de PHP más nueva o más antigua para funcionar. ISPConfig lo soporta para usar múltiples versiones de PHP en el mismo servidor, la versión de PHP puede ser seleccionada para cada sitio web individualmente en la configuración del sitio web. Este tutorial muestra cómo instalar PHP 7.4 en modo FPM y FCGI junto a PHP 7.2 en un servidor Ubuntu 18. Las versiones adicionales de PHP se instalan en la carpeta /opt, por lo que su instalación no afecta a la versión de PHP por defecto
1 Nota preliminar
Voy a instalar PHP 7.4. Ten en cuenta que PHP-FPM puede utilizarse tanto en servidores Apache como Nginx, mientras que FastCGI sólo está disponible para servidores Apache.
2 Instalar los prerrequisitos
Instala los requisitos previos para construir PHP y el editor nano que utilizaré para editar los archivos de configuración:
apt -y install build-essential nano net-tools autoconf
apt -y install libfcgi-dev libfcgi0ldbl libjpeg-turbo8-dev libmcrypt-dev libssl-dev libc-client2007e libc-client2007e-dev libxml2-dev libbz2-dev libcurl4-openssl-dev libjpeg-dev libpng-dev libfreetype6-dev libkrb5-dev libpq-dev libxml2-dev libxslt1-dev libzip-dev libsqlite3-dev libonig-dev
ln -s /usr/lib/libc-client.a /usr/lib/x86_64-linux-gnu/libc-client.a
cd /usr/include
ln -s x86_64-linux-gnu/curl
(El último comando es necesario si construyes PHP con –with-imap, porque de lo contrario ./configure se detendrá con el siguiente error:
checking for crypt in -lcrypt... yes
configure: error: Cannot find imap library (libc-client.a). Please check your c-client installation.
root@server1:/tmp/php-7.4.0
)
3 Compilar PHP 7.4 como PHP-FPM y Fastcgi
Descarga y extrae el archivo PHP:
cd /tmp
wget https://www.php.net/distributions/php-7.4.0.tar.gz
tar xfz php-7.4.0.tar.gz
cd php-7.4.0
Configura y compila PHP 7.4 como sigue (puedes ajustar el comando . /configure a tus necesidades, echa un vistazo a
./configure --help
para ver todas las opciones disponibles; si utilizas un comando . /configure diferente, es posible que se necesiten bibliotecas adicionales, o que el proceso de compilación falle):
./configure --prefix=/opt/php-7.4 --with-pdo-pgsql --with-zlib-dir --with-freetype --enable-mbstring --enable-soap --enable-calendar --with-curl --with-zlib --enable-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 --with-zip --with-pdo-mysql --with-mysqli --with-mysql-sock=/var/run/mysqld/mysqld.sock --with-jpeg --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-intl --with-pear --enable-fpm
El último interruptor(–enable-fpm) asegura que esta versión de PHP funcionará con PHP-FPM.
make
make install
Copia los archivos en las ubicaciones correctas:
cp php.ini-production /opt/php-7.4/lib/php.ini cp /opt/php-7.4/etc/php-fpm.conf.default /opt/php-7.4/etc/php-fpm.conf cp /opt/php-7.4/etc/php-fpm.d/www.conf.default /opt/php-7.4/etc/php-fpm.d/www.conf
Ajusta /opt/php-7.4/etc/php-fpm.conf
sed -i 's/;pid = run\/php-fpm.pid/pid = run\/php-fpm.pid/g' /opt/php-7.4/etc/php-fpm.conf
Luego actualiza /opt/php-7.4/etc/php-fpm.d/www.conf:
cp /opt/php-7.4/etc/php-fpm.d/www.conf.default /opt/php-7.4/etc/php-fpm.d/www.conf
Si ya tienes instaladas otras versiones de PHP, comprueba que el puerto no esté ya en uso:
netstat -tapn | grep -E ".*899.*php-fpm"
Si utilizas nginx como servidor web, ajusta /opt/php-7.4/lib/php.ini:
sed -i 's/;date.timezone =/date.timezone = "Europe\/Berlin"/g' /opt/php-7.4/lib/php.ini
sed -i 's/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/g' /opt/php-7.4/lib/php.ini
3.1 Crear el archivo de unidad systemd
A continuación, crearemos el archivo de unidad del sistema que se utiliza para iniciar y detener el demonio PHP-FPM.
nano /lib/systemd/system/php-7.4-fpm.service
con el siguiente contenido:
[Unit]
Description=The PHP 7.4 FastCGI Process Manager
After=network.target
[Service]
Type=simple
PIDFile=/opt/php-7.4/var/run/php-fpm.pid
ExecStart=/opt/php-7.4/sbin/php-fpm --nodaemonize --fpm-config /opt/php-7.4/etc/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID
[Install]
WantedBy=multi-user.target
Habilita el servicio y recarga systemd:
systemctl enable php-7.4-fpm.service
systemctl daemon-reload
Por último, inicia PHP-FPM.
systemctl start php-7.4-fpm.service
Para habilitar el Zend OPcache:
echo zend_extension=opcache.so >> /opt/php-7.4/lib/php.ini
3.2 Habilitar Memcache (opcional)
Instala memcache con estos comandos
cd /opt/php-7.4/etc
../bin/pecl -C ./pear.conf update-channels
../bin/pecl -C ./pear.conf install memcached
y habilitar memache
echo extension=memcached.so >> /opt/php-7.4/lib/php.ini
3.3 Instalar la extensión xDebug (opcional)
El módulo xDebug es una extensión de depuración para PHP. La instalación es opcional.
Instala xDebug con estos comandos
cd /opt/php-7.4/etc
../bin/pecl -C ./pear.conf update-channels
../bin/pecl -C ./pear.conf install xdebug
y habilita xDebug
echo zend_extension=/opt/php-7.4/lib/php/extensions/no-debug-non-zts-20190902/xdebug.so >> /opt/php-7.4/lib/php.ini
Finalmente reinicia el demonio php-fpm:
systemctl start php-7.4-fpm.service
Prueba la versión de PHP:
cd /opt/php-7.4/bin
./php --version
3.4 Habilitar PHP 7.4 en ISPConfig
En ISPConfig 3.1, puedes configurar la nueva versión de PHP en Sistema > Versiones adicionales de PHP. En la pestaña Nombre, sólo tienes que rellenar un nombre para la versión de PHP (por ejemplo, PHP 7.4) – esta versión de PHP aparecerá con este nombre en la configuración del sitio web en ISPConfig:
Ve a la pestaña Configuración de FastCGI pestaña y rellena los campos como se indica a continuación:
Path to the PHP FastCGI binary: /opt/php-7.4/bin/php-cgi
Path to the php.ini directory: /opt/php-7.4/lib
A continuación, ve a la pestaña Configuración de PHP-FPM y rellena los campos como se indica a continuación:
Path to the PHP-FPM init script: php-7.4-fpm
Path to the php.ini directory: /opt/php-7.4/lib
Path to the PHP-FPM pool directory: /opt/php-7.4/etc/php-fpm.d
5 Enlaces
- PHP: http: //www.php.net/
- ISPConfig: http: //www.ispconfig.org/
- Debian: http: //www.debian.org/