La versión 7.3 de PHP incorporó características como: Sintaxis Heredoc y Nowdoc más flexibles. 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.3, conjuntamente con PHP-FPM en Debian 10.
Contenido Relacionado
- Instalando LAMPP Stack en Ubuntu]
- 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.3/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.3-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.
- requestterminatetimeout: 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 ‘maxexecutiontime’ 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:
# apt install php-fpm
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
libsodium23 php-common php7.3-cli php7.3-common php7.3-fpm php7.3-json php7.3-opcache php7.3-readline
Suggested packages:
php-pear
The following NEW packages will be installed:
libsodium23 php-common php-fpm php7.3-cli php7.3-common php7.3-fpm php7.3-json php7.3-opcache php7.3-readline
0 upgraded, 9 newly installed, 0 to remove and 0 not upgraded.
Need to get 4,194 kB of archives.
After this operation, 18.0 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:
# tree -d /etc/php/
/etc/php/
└── 7.3
├── 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
# systemctl status php7.3-fpm
● php7.3-fpm.service - The PHP 7.3 FastCGI Process Manager
Loaded: loaded (/lib/systemd/system/php7.3-fpm.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2021-04-02 22:39:42 CEST; 1min 55s ago
Docs: man:php-fpm7.3(8)
Main PID: 27203 (php-fpm7.3)
Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
Tasks: 3 (limit: 2296)
Memory: 16.6M
CGroup: /system.slice/php7.3-fpm.service
├─27203 php-fpm: master process (/etc/php/7.3/fpm/php-fpm.conf)
├─27204 php-fpm: pool www
└─27205 php-fpm: pool www
Apr 02 22:39:42 webserver systemd[1]: Starting The PHP 7.3 FastCGI Process Manager...
Apr 02 22:39:42 webserver systemd[1]: Started The PHP 7.3 FastCGI Process Manager.
Iniciar el servicio
Si el comando anterior nos hubiera mostrado la siguiente información (note el Active: inactive):
● php7.3-fpm.service - The PHP 7.3 FastCGI Process Manager
Loaded: loaded (/lib/systemd/system/php7.3-fpm.service; enabled; vendor preset: enabled)
Active: inactive (dead) since Fri 2021-04-02 22:42:17 CEST; 2s ago
Docs: man:php-fpm7.3(8)
Process: 27203 ExecStart=/usr/sbin/php-fpm7.3 --nodaemonize --fpm-config /etc/php/7.3/fpm/php-fpm.conf (code=exited, status=0/SUCCESS)
Main PID: 27203 (code=exited, status=0/SUCCESS)
Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
Apr 02 22:39:42 webserver systemd[1]: Starting The PHP 7.3 FastCGI Process Manager...
Apr 02 22:39:42 webserver systemd[1]: Started The PHP 7.3 FastCGI Process Manager.
Apr 02 22:42:17 webserver systemd[1]: Stopping The PHP 7.3 FastCGI Process Manager...
Apr 02 22:42:17 webserver systemd[1]: php7.3-fpm.service: Succeeded.
Apr 02 22:42:17 webserver systemd[1]: Stopped The PHP 7.3 FastCGI Process Manager.
entonces podemos iniciar el servicio con el siguiente comando:
# systemctl start php7.3-fpm
Reiniciar el servicio php-fpm
Para aplicar cualquier modificación realizada al fichero de configuración debe reiniciar el servidor con el siguiente comando:
$ sudo systemctl restart php7.3-fpm
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.3-fpm
Detener el servidor
Si desea detener el servicio ejecute el siguiente comando:
$ sudo systemctl stop php7.3-fpm
Iniciar con el sistema operativo
Puede asegurarse de que el servicio php-fpm se iniciará automáticamente después de un reinicio del sistema operativo ejecutando el siguiente comando:
$ sudo systemctl is-enabled php7.3-fpm
enabled
La salida del comando anterior es enabled o disabled, en caso de de que sea disable ejecute:
$ sudo systemctl enable php7.3-fpm
Synchronizing state of php7.3fpm.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable php7.3-fpm
Created symlink /etc/systemd/system/multi-user.target.wants/php7.3-fpm.service → /lib/systemd/system/php7.3-fpm.service.
Si desea que no se inicie con el sistema operativo ejecute:
$ sudo systemctl disable php7.3-fpm
Synchronizing state of php7.3-fpm.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install disable php7.3-fpm
Removed /etc/systemd/system/multi-user.target.wants/php7.3-fpm.service.