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
Contenido Relacionado
- Cómo instalar Apache en Ubuntu 20.04
- Instalar y configurar Apache HTTP server
- Servidor Web Apache
- NGINX como proxy reverso
- ¿Cómo instalar NGINX en Alpine Linux?
- Servidor Web NGINX
- Posts sobre PHP
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.
Instalar LAMPP Stack en Ubuntu 20.04, 1 (2)
- Cómo instalar PHP 7.4 en Ubuntu 20.04
- Cómo instalar Apache en Ubuntu 20.04