Monta tu WordPress 3: Configuración inicial de PHP-FPM y pool

Configuración de PHP-FPM

Esta es la tercera parte de una serie de artículos con el título Cómo montar tu propio WordPress en un serivdor VPS.

En esta sesión instalaremos algunas extensiones útiles de php y configuraremos el servicio principal. No parece fácil determinar que extensiones son esenciales y cuales opcionales, ya que diversas fuentes que he consultado me han ofrecido diferentes conjuntos. He recopilado una lo más consensuada posible:

Modulo
Para que sirve
Instalar
php-xmlrpc
Implementa el protocolo XML-RPC
Si
php-curl
Utilidad para conectarse con HTTP, FTP, etc…
Si
php-gd
Creación y manipulación de ficheros de imágenes
Si
php-mcrypt
Biblioteca de algoritmos de encriptación (obsoleta a partir de PHP 7.2.0)
Si
php-mbstring
Gestión de caracteres multibyte (UTF-8)
Si

Opcionales: php-dev, php-opcache, php-json, php-xml, php-xml-rss, php-cli

Archivos de configuración

A continuación vamos a editar la configuración de tres archivos, todos ubicados en el directorio /etc/php/7.0/fpm:

  • php-fpm.conf: Contiene información general sobre sobre el gestor de procesos FPM php: Donde se guarda los errores, ubicación de otros archivos de configuración numero de procesos, etc.
  • php.ini: Contiene la configuración general de PHP.
  • pool.d/www.conf: Contiene las directivas de cada uno de los Pools de PHP. PHP desde hace un tiempo es un servidor independiente del servidor web. Éste se comunica con Nginx mediante la tecnología fastcgi. Cada pool es un sistema para ejecutar procesos independientes de PHP. Existen dos métodos de conexión entre Nginx y PHP: mediante Unix sockets y mediante TCP sockets. Nosotros escogemos Unix sockets pues pues tenemos ambos servidores en una misma máquina virtual y su ejecución es más rápida que mediante los sockets TCP. Los archivos sockets los distinguiremos mediante la extension .sock y aquí puedes encontrar más información.

Primero instalamos PHP y los módulos necesarios (instalamos los 5 más comunes):

$ sudo apt-get install php-fpm php-xmlrpc php-curl php-gd php-mcrypt php-mbstring

Modificados php-fpm.conf con una configuración muy básica (lo que tiene pero sin comentarios):

$ cd /etc/php/7.0/fpm/
$ sudo mv php-fpm.conf php-fpm.conf.backup
$ sudo nano php-fpm.conf
[global]
pid = /run/php-fpm.pid
error_log = /var/log/php-fpm.log
include = /etc/php/7.0/fpm/pool.d/*.conf

El archivo php.ini es muy extenso y en general aceptaremos todas las opciones por defecto excepto dos relativas a la seguridad:

$ sudo cp php.ini php.ini.backup
$ sudo nano php.ini

; modificar las siguientes dos lineas
cgi.fix_pathinfo = 0 
allow_url_fopen = Off

Por último crearemos el archivo más importante de esta serie, ubicado en pool.d/, que es la configuración para el pool virtual de php-fpm para nuestro site. En el especificaremos el archivo socket que utilizamos para conectarnos con Nginx (sitename sera nuestro dominio sin .com, .net, etc…):

$ sudo mv pool.d/www.conf pool.d/www.conf.backup
$ sudo nano pool.d/sitename.conf
[sitename]

user = usuario-server
group = www-data

listen = /var/run/php/sitename.sock
listen.owner = usuario-server
listen.group = www-data
listen.mode = 0660

; Opciones para el process manager
pm = dynamic
pm.max_children = 5 	
pm.start_servers = 2 	
pm.min_spare_servers = 1
pm.max_spare_servers = 3
pm.max_requests = 500

php_admin_value[error_log] = /var/log/fpm-php_sitename_error.log
;php_admin_value[upload_max_filesize] = 25M
;php_admin_value[open_basedir] = /home/usuario-server:/tmp

Este archivo de configuración define el socket (archivo acabado en .sock) que vendría a representar un área de trabajo compartida entre NGINX y PHP. Es importante que este archivo coincida ya que sinó al reiniciar nuestro servidor y acceder a la página principal sólo veremos una página en blanco (un error un poco desesperante, hay que reconocerlo).

Por último reiniciar el servicio php-fpm:

$ sudo systemctl restart php7.0-fpm
Print Friendly, PDF & Email

Deja un comentario

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