Configuración de PHP-FPM3>
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:
br>
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.
br>
br>
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