¿Cómo instalar un servidor LEMP en CentOS 7 con FastCGI?

Actualizado el 14 de septiembre, 2016. Por BlueHosting.

Este documente describe cómo instalar una infraestructura LEMP (Linux, Nginx —Engine x, MariaDB y PHP) en CentOS 7 usando php-fastcgi. También incluye la configuración como php-fastcgi como un servicio de systemd para lograr una administración más sencilla.

Antes de comenzar con esta guía, por favor considere una configuración inicial en su servidor que provea al menos los requisitos mínimos de seguridad y estabilidad.

Configurar el Hostname

Antes de comenzar con la instalación y configuración de los componentes descritos en esta guía, asegúrese de tener un hostname establecido. Ingrese los siguientes comandos para asegurarse de que está configurado adecuadamente:

hostname
hostname -f

El primer comando debería mostrar el hostname corto, y el segundo debería mostrar el nombre de dominio completamente calificado (o FQDN, por sus siglas en inglés).

Preparar el sistema

Asegúrese de que su sistema está actualizado usando yum:

yum update

Esto asegura que todo el software esté actualizado y ejecutándose en su última versión.

Instalar Nginx desde EPEL

La manera más sencilla y rápida de instalar Nginx es usando el repositorio de paquetes adicionales para Enterprise Linux o EPEL (Extra Packages for Enterprise Linux, por sus siglas en inglés). Puede instalar EPEL usando rpm y luego instalar Nginx como sigue:

sudo yum install epel-release
yum update
yum install nginx

Estos comandos instalan el repositorio EPEL, obtienen los metadatos desde el nuevo repositorio y luego instalan Nginx.

Configurar Nginx

Arrancar Nginx con systemd

Después de descargar Nginx, este necesita ser activado e iniciado en systemd. Puede hacerlo con los siguientes comandos de systemctl:

systemctl enable nginx.service
systemctl start nginx.service

Luego puede verificar el estatus para asegurarse de que está en ejecución cuando lo considere necesario. El siguiente comando le indica el estatus actual de Nginx:

systemctl status nginx.service

Configurar los hosts virtuales en Nginx

Una vez que tenga Nginx instalado, deberá configurar sus directivas server para especificar sus bloques de servidor. Cada bloque de servidor necesita tener una directiva server y una directiva location. Puede hacer esto de varias formas, ya sea a través de distintos archivos con bloques server o todos los bloques en el archivo /etc/nginx/nginx.conf. En este ejemplo, usaremos el enfoque de varios archivos. Por defecto, Nginx usa el directorio /etc/nginx/conf.d y sus archivos de configuración terminan con la extensión .conf:

Extracto del archivo: /etc/nginx/conf.d/ejemplo.com.conf

server {
listen  80;
server_name www.ejemplo.com ejemplo.com;
access_log /var/www/ejemplo.com/logs/access.log;
error_log /var/www/ejemplo.com/logs/error.log;

location / {
    root  /var/www/ejemplo.com/public_html;
    index index.html index.htm index.php;
    }
}

Cualquier sitio web adicional que quisiera alojar puede ser añadido como un nuevo archivo dentro de su directorio /etc/nginx/conf.d/. Una vez que haya establecido la configuración, necesitará crear los directorios para sus archivos de public_html y sus logs:

mkdir -p /var/www/example.com/{public_html,logs}

Una vez que haya configurado sus hosts virtuales, necesitará reiniciar nginx para que los cambios surtan efecto:

systemctl restart nginx.service

Desplegar PHP con FastCGI

Si usted está usando código PHP para su aplicación, entonces necesitará implementar "PHP-FastCGI" para permitir que Nginx pueda manejar e interpretar el código PHP correctamente. Puede instalar esto a través de YUM desde los repositorios EPEL que instalamos en pasos previos:

yum install php-cli php spawn-fcgi

Una vez que PHP-FastCGI esté instalado, puede crear un script para iniciar y controlar el proceso php-cgi. Cree un archivo /usr/bin/php-fastcgi en su editor favorito y coloque las siguientes líneas en el archivo:

Extracto del archivo: /usr/bin/php-fastcgi

#!/bin/sh
if [ `grep -c "nginx" /etc/passwd` = "1" ]; then 
    FASTCGI_USER=nginx
elif [ `grep -c "www-data" /etc/passwd` = "1" ]; then 
    FASTCGI_USER=www-data
elif [ `grep -c "http" /etc/passwd` = "1" ]; then 
    FASTCGI_USER=http
else 
# Configure la variable FASTCGI_USER a continuación para el usuario 
# con el que quiere ejecutar los procesos php-fastcgi

FASTCGI_USER=
fi

/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 6 -u $FASTCGI_USER -f /usr/bin/php-cgi

Una vez que el archivo /usr/bin/php-fastcgi haya sido creado, necesitará asegurarse de que el script es ejecutable:

chmod +x /usr/bin/php-fastcgi

Puede entonces ejecutar el archivo de forma manual, o para una administración más sencilla, puede configurar un servicio systemd.

Configurar PHP-FastCGI como un servicio

Cuando PHP-FastCGI se instala, no es creado automáticamente como un servicio de systemd en CentOS. Si usted quiere tener un mejor control de PHP-FastCGI con systemd, puede configurar PHP-FastCGI como un servicio de systemd. Para hacerlo deberá crear un archivo de servicio que apunte al archivo /usr/bin/php-fastcgi que usted creó:

Archivo: /etc/systemd/system/php-fastcgi.service

[Unit]
Description=php-fastcgi systemd service script

[Service]
Type=forking
ExecStart=/usr/bin/php-fastcgi start

[Install]
WantedBy=multi-user.target

Una vez creado el archivo, necesitará volver a cargar los demonios de systemd, habilitar el servicio e iniciarlo:

systemctl daemon-reload
systemctl enable php-fastcgi.service
systemctl start php-fastcgi.service

¡Ahora tendrá PHP-FastCGI instalado como un servicio de systemd!

Instalar MariaDB

Por último, pero no menos importante, su infraestructura LEMP requiere una base de datos. MySQL ya no es compatible con CentOS 7, por lo que tendrá que usar un remplazo popular para esta última: MariaDB.

  1. Puede instalar MariaDB directamente desde los repositorios oficiales de CentOS:

    yum install mariadb-server
    
  2. Una vez completada la instalación, puede usarla en la misma forma en que usa MySQL. Pero antes de nada, debe habilitarla e iniciarla en systemd:

    systemctl enable mariadb.service
    systemctl start mariadb.service
    
  3. MariaDB se instala con la información predeterminada y una contraseña no root, así que se recomienda ampliamente asegurar su instalación usando el comando incorporado mysql_secure_installation:

    mysql_secure_installation
    
  4. Puede seguir la pantalla de instrucciones para eliminar la información predeterminada y establecer la contraseña root para su instalación de MariaDB. Una vez que tenga su contraseña root inicie sesión en MariaDB:

    mysql -u root -p
    
  5. Ingrese la contraseña root que creó durante la ejecución del script mysql_secure_installation, y luego ejecute los siguientes comandos para crear la base de datos midominio y el usuario miusuario. Luego puede otorgar los permisos de midominio al usuario miusuario:

    CREATE DATABASE midominio;
    CREATE USER 'miusuario' IDENTIFIED BY 'MiContraseña';
    GRANT ALL PRIVILEGES ON midominio.* to 'miusuario';
    exit
    

    Puede editar el nombre del usuario, la base de datos y la contraseña según sus preferencias. Luego puede configurar su aplicación para poder ingresar datos haciendo uso de la base de datos, el nombre de usuario y la contraseña.

¡Felicidades, ya ha creado una infraestructura LEMP completamente funcional y ejecutable en CentOS 7!

Recursos adicionales

Para complementar la información de este tutorial puede consultar los siguientes recursos. Aunque este material es provisto esperando que sea útil, tome en cuenta que no podemos certificar su actualidad o precisión.

¿QUÉ DESEAS SABER?

Intentaremos leer tu mente...