Cómo instalar PHP 7.4 en Ubuntu 20.04

La versión 7.4 de PHP incorporó características como: propiedades tipeadas, funciones flecha (arrow functions), separadores de números, referencias débiles entre otras. PHP-FPM es una administrador de procesos FastCGI diseñado para ser usado en sitios de alta demanda.

En el post de hoy vamos a instalar PHP 7.4, conjuntamente con PHP-FPM en Ubuntu 20.04.

Antes de continuar recomiendo ver Instalando LAMPP Stack en Ubuntu

Instalar PHP y PHP-FPM

PHP-FPM es usado conjuntamente con un servidor web como Apache o NGINX y se encarga de servir contenido dinámico, mientras el servidor web se encarga de servir el contenido estático.

PHP-FPM introduce el concepto de pools, cada pool puede recibir conexiones en un socket TPC/IP (IP:Puerto) o en socket UNIX, y puede ejecutarse bajo un usuario y grupo diferente. Cada pool tiene su fichero de configuración, por defecto en Ubuntu/Debian el fichero de configuración se puede encontrar en:

/etc/php/7.4/fpm/pool.d/www.conf

Algunas directivas importantes

  • listen: Dirección en la cual acepta peticiones el servicio PHP-FPM. Las sintaxis válidas son: 'ip.add.re.ss:port', 'port', '/path/to/unix/socket', por defecto tiene el valor de /run/php/php7.4-fpm.sock para el pool www, tenga en cuenta que si el servicio PHP-FPM está en un servidor diferente al servidor web entonces debe configurar está directiva a 'ip.add.re.ss:port' o 'port', si solo especifica el valor del puerto entonces el servicio recibe conexiones en cualquier dirección IP, en caso contrario solo en la dirección IP espeficada. Esta opción es obligatoria.
  • user: Usuario Unix bajo el cual se ejecutan los procesos FPM para un pool determinado. Esta opción es obligatoria.
  • group: Grupo Unix bajo el cual se ejecutan los procesos FPM para un pool determinado. Si no es establecido, el grupo del usuario por defecto será usado.
  • listen.allowed_clients: Lista de direcciones (IPv4 / IPv6) de clientes FastCGI que pueden conectarse. Tiene sentido solo para sockets TCP/IP. Cada direccion IP debe estar separada por una coma. Si este valor se deja en blanco, las conexiones se aceptan desde cualquier dirección IP.
  • request_terminate_timeout: El tiempo de espera para atender una sola solicitud después del cual se eliminará el proceso de trabajo (worker). Esta opción debe usarse cuando la opción ini 'max_execution_time' no detiene la ejecución del script por alguna razón. Un valor de '0' significa 'Desactivado'. Unidades disponibles: s (segundos) (predeterminado), m (minutos), h (horas) d (días). Valor predeterminado: 0.

Para más detalles sobre la configuración del servicio PHP-FPM consulte las directivas de configuración de PHP-FPM

Para instalar PHP conjuntamente con PHP-FPM ejecute el siguiente comando:

$ sudo apt install php-fpm
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  php-common php7.4-cli php7.4-common php7.4-fpm php7.4-json php7.4-opcache php7.4-readline
Suggested packages:
  php-pear
The following NEW packages will be installed:
  php-common php-fpm php7.4-cli php7.4-common php7.4-fpm php7.4-json php7.4-opcache php7.4-readline
0 upgraded, 8 newly installed, 0 to remove and 0 not upgraded.
Need to get 4,079 kB of archives.
After this operation, 18.1 MB of additional disk space will be used.
Do you want to continue? [Y/n] 

Una vez terminado el proceso puede explorar las configuraciones por defecto, aquí una muestra de las estructura de directorios:

/etc/php/7.4/
├── cli
│   └── conf.d
├── fpm
│   ├── conf.d
│   └── pool.d
└── mods-available

Administrar el servicio PHP-FPM

En esta parte aprenderemos cómo iniciar, detener o reiniciar el servicio fpm, para esto usaremos el sistema de inicialización systemd (systemd es un reemplazo para el sistema de inicialización SysV y también un conjunto de configuración y gestión de servicios para el sistema operativo GNU/Linux)

Comprobar estado

Luego de finalizar el proceso de instalación podemos comprobar el estado del servicio fpm ejecutando el siguiente comando

$ sudo systemctl status php7.4-fpm.service
● php7.4-fpm.service - The PHP 7.4 FastCGI Process Manager
     Loaded: loaded (/lib/systemd/system/php7.4-fpm.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2020-08-27 21:08:35 UTC; 1 weeks 1 days ago
       Docs: man:php-fpm7.4(8)
   Main PID: 707 (php-fpm7.4)
     Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
      Tasks: 3 (limit: 1075)
     Memory: 12.2M
     CGroup: /system.slice/php7.4-fpm.service
             ├─707 php-fpm: master process (/etc/php/7.4/fpm/php-fpm.conf)
             ├─766 php-fpm: pool www
             └─767 php-fpm: pool www

Aug 27 21:08:34 ubuntu systemd[1]: Starting The PHP 7.4 FastCGI Process Manager...
Aug 27 21:08:35 ubuntu systemd[1]: Started The PHP 7.4 FastCGI Process Manager.

Iniciar el servicio

Si el comando anterior nos hubiera mostrado la siguiente información (note el Active: inactive):

● php7.4-fpm.service - The PHP 7.4 FastCGI Process Manager
     Loaded: loaded (/lib/systemd/system/php7.4-fpm.service; enabled; vendor preset: enabled)
     Active: inactive (dead) since Sat 2020-09-05 01:36:38 UTC; 1s ago
       Docs: man:php-fpm7.4(8)
    Process: 707 ExecStart=/usr/sbin/php-fpm7.4 --nodaemonize --fpm-config /etc/php/7.4/fpm/php-fpm.conf (code=exited, status=0/SUCCESS)
    Process: 30653 ExecStopPost=/usr/lib/php/php-fpm-socket-helper remove /run/php/php-fpm.sock /etc/php/7.4/fpm/pool.d/www.conf 74 (code=exited, status=0/SUCCESS)
   Main PID: 707 (code=exited, status=0/SUCCESS)
     Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"

Aug 27 21:08:34 ubuntu systemd[1]: Starting The PHP 7.4 FastCGI Process Manager...
Aug 27 21:08:35 ubuntu systemd[1]: Started The PHP 7.4 FastCGI Process Manager.
Sep 05 01:36:38 ubuntu systemd[1]: Stopping The PHP 7.4 FastCGI Process Manager...
Sep 05 01:36:38 ubuntu systemd[1]: php7.4-fpm.service: Succeeded.
Sep 05 01:36:38 ubuntu systemd[1]: Stopped The PHP 7.4 FastCGI Process Manager.

entonces podemos iniciar el servicio con el siguiente comando:

$ sudo systemctl start php7.4-fpm.service

Reiniciar el servicio php7.4-fpm

Para aplicar cualquier modificación realizada al fichero de configuración debe reiniciar el servidor con el siguiente comando:

$ sudo systemctl restart php7.4-fpm.service

Refrescar configuraciones

Es preferible usar el siguiente comando para refrescar las configuraciónes ya que el servicio recargará las configuraciones sin perder las conexiones.

$ sudo systemctl reload php7.4-fpm.service

Detener el servidor

Si desea detener el servicio ejecute el siguiente comando:

$ sudo systemctl stop php7.4-fpm.service

Iniciar con el sistema operativo

Puede asegurarse de que el servicio php7.4-fpm se iniciará automáticamente después de un reinicio del sistema operativo ejecutando el siguiente comando:

$ sudo systemctl is-enabled php7.4-fpm.service
enabled

La salida del comando anterior es enabled o disabled, en caso de de que sea disable ejecute:

$ sudo systemctl enable php7.4-fpm.service 
Synchronizing state of php7.4-fpm.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable php7.4-fpm
Created symlink /etc/systemd/system/multi-user.target.wants/php7.4-fpm.service → /lib/systemd/system/php7.4-fpm.service.

Si desea que no se inicie con el sistema operativo ejecute:

$ sudo systemctl disable php7.4-fpm.service 
Synchronizing state of php7.4-fpm.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install disable php7.4-fpm
Removed /etc/systemd/system/multi-user.target.wants/php7.4-fpm.service.

YouTube video

Serie(s): Instalar LAMPP Stack en Ubuntu 20.04, 1 (2)

Los tutoriales aquí en LibreByte están disponible bajo una licencia de software libre. Si le gusta mi trabajo considere:
Comprar un Hosting/VPS o Servidor Dedicado en MCKHost

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.