¿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.
-
Puede instalar MariaDB directamente desde los repositorios oficiales de CentOS:
yum install mariadb-server
-
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
-
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
-
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
-
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 datosmidominio
y el usuariomiusuario
. Luego puede otorgar los permisos demidominio
al usuariomiusuario
: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.