Cómo instalar PHP 7.4 en Ubuntu 20.04

Español English

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

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

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