LEMP Stack - Linux Nginx MySQL - PHP

Cómo instalar un stack LEMP (Linux, Nginx, MySQL y PHP) en Ubuntu 20.04

Entre los usos principales de Linux se encuentra la posibilidad de montar un servidor web para aplicaciones y sitios dinámicos. En este artículo vas a aprender cómo instalar un stack LEMP (Linux, Nginx, MySQL y PHP) en Ubuntu 20.04.

Requisitos previos

A fin de completar esta guía exitosamente, vas a necesitar un servidor Ubuntu 20.04 con un usuario que tenga acceso a sudo. En el artículo inicial de esta serie puedes encontrar las instrucciones necesarias para prepararlo si todavía no lo has hecho.

Paso 1: Instalación de paquetes

Para comenzar, es recomendable que actualices el índice de paquetes de APT. Recuerda que el gestor utilizará esta información para instalar las últimas versiones disponibles de cada componente del stack posteriormente. Al mismo tiempo, puedes aprovechar para actualizar los paquetes actualmente instalados en tu servidor con los siguientes comandos:

sudo apt update && sudo apt upgrade

A continuación, instala Nginx, MySQL y PHP (junto a sus correspondientes dependencias) de la siguiente manera:

sudo apt install nginx mysql-server php-fpm php-mysql

Al finalizar, comprueba que el servidor web y el motor de base de datos estén ejecutándose:

systemctl status nginx mysql

El resultado debería ser similar al siguiente:

En caso de que alguno de ellos no estuviera corriendo, puedes intentar iniciarlo mediante sudo systemctl start seguido del nombre del servicio en cuestión.

Paso 2: Configuración de seguridad para MySQL

A pesar de que MySQL se encuentra funcionando, hay varios puntos relacionados a la seguridad que deben configurarse manualmente por separado. Para realizar esta operación fácilmente, puedes emplear sudo mysql_secure_installation. Este comando te permitirá hacer lo siguiente:

  • Establecer la contraseña correspondiente a la cuenta de root de MySQL (que es algo distinto a la del sistema operativo)
  • Impedir conexiones externas al motor de base de datos utilizando la cuenta de root
  • Remover cuentas de usuario anónimas
  • Eliminar la base de datos de prueba

Al ejecutar el comando, verás que te ofrece habilitar el componente para validación de contraseñas. Si bien activar esta característica es opcional, tenerla en funcionamiento te permitirá asegurarte que las contraseñas que utilices en MySQL sean confiables. Los niveles de seguridad disponibles son los siguientes:

  • BAJO requiere contraseñas de ocho caracteres como mínimo, pero sin ningún patrón particular.
  • MEDIO exige que se incluyan letras mayúsculas y minúsculas, números, al menos un caracter especial, y una longitud total de ocho caracteres o más.
  • FUERTE incluye todas las características de MEDIO y agrega la utilización de un archivo de diccionario para impedir que las contraseñas incluyan las palabras de una lista.

Después de elegir el nivel deseado, se te pedirá que confirmes con y o Y el resto de las configuraciones para poder proseguir. Cuando hayas terminado, podrás ver el mensaje All done! en la pantalla antes de iniciar el próximo paso.

Paso 3: Integración de Nginx con PHP

Por defecto, Nginx utiliza /var/www/html como directorio raíz, tal como se indica en el archivo de configuración del sitio default (/etc/nginx/sites-enabled/default). Para habilitar el uso de PHP en el mismo es necesario descomentar las líneas que se muestran en la imagen de abajo. Es importante destacar que debes elegir PHP-FPM entre las alternativas disponibles y dejar la otra (PHP-CGI) deshabilitada.

cd /etc/nginx/sites-enabled
sudo nano default

A continuación, crea un archivo llamado info.php dentro de /var/www/html con el contenido siguiente. Debido a que el mismo solamente incluye código PHP, no es necesario emplear la etiqueta de cierre ?> luego de la función phpinfo().

cd /var/www/html
sudo touch info.php
sudo nano info.php
<?php
    phpinfo();

Luego de guardar los cambios, reinicia Nginx con el siguiente comando

sudo systemctl restart nginx

Visita la dirección AAA.BBB.CCC.DDD/info.php en tu navegador reemplazando AAA.BBB.CCC.DDD con la dirección IP pública o el nombre de host de tu servidor. Ambos datos están disponibles en tu Área de cliente de Donweb dentro del apartado Software y Accesos de tu Cloud Server.

Tal como se aprecia en la imagen siguiente, la función phpinfo() muestra los detalles de la instalación actual de PHP:

Esta página garantiza que Nginx y PHP están operando en conjunto. En el próximo paso utilizaremos un recurso similar para hacer una comprobación del mismo estilo pero con MySQL.

Paso 4: Comprobar conexión con MySQL

A pesar de no haber creado una base de datos todavía, puedes asegurarte de que PHP puede comunicarse con MySQL. Veamos cómo hacerlo.

Paso 4a: Crear un nuevo usuario de MySQL

Al acceder al motor de base de datos, también es preferible utilizar una cuenta distinta a root. Para crearla, ingresa al prompt de MySQL.

sudo mysql

Luego ejecuta la siguiente sentencia cambiando gabriel y Abc1234# por un nombre de usuario y contraseña de tu elección:

CREATE USER 'gabriel'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Abc1234#';

Para regresar a la línea de comandos de Linux, escribe \q o exit y presiona Enter.

Paso 4b: Crear archivo PHP

Para chequear el estado de MySQL, crea otro archivo con el nombre estado-mysql.php en /var/www/html

cd /var/www/html
sudo touch estado-mysql.php
sudo nano estado-mysql.php

Editalo y agregale el siguiente el siguiente contenido. Para realizar la conexión, deberás reemplazar el nombre de usuario y la contraseña por las credenciales que hayas elegido durante el paso anterior:

<?php
   $servidor = "localhost";
   $usuario = "gabriel";
   $pass = "Abc1234#";
 // Crear conexión
   $con = new mysqli($servidor, $usuario, $pass);
 // Confirmar
   if ($con->connect_error) {
     die("La conexión falló: " . $con->connect_error);
   } else {
     $estado = explode('  ', $con->stat());
     print_r($estado);
   }
 // Cerrar conexión
   $con->close();

Al visitar la página deberías ver lo siguiente:

¡Felicitaciones! Has comprobado que PHP puede conectarse correctamente con MySQL y que Nginx está sirviendo el resultado. Si deseas inspeccionar las solicitudes que el servidor ha estado atendiendo, los logs de acceso y de error en /var/log/nginx te serán de gran utilidad.

Conclusión

En este artículo aprendiste a instalar un stack LEMP en tu servidor Ubuntu 20.04. En una próxima guía cubriremos cómo agregar un nombre de dominio y un certificado de Let’s Encrypt para montar un sitio más robusto y seguro.

¿Te resultó útil esta guía?

Imagen por defecto
Gabriel Cánepa
Gabriel trabaja actualmente como desarrollador full-stack en Scalar, una firma que se dedica a hacer valuaciones de empresas. Es Administrador de Sistemas certificado por la Fundación Linux y previamente ha escrito un gran número de artículos y contenidos técnicos sobre el tema para: DigitalOcean, Linode, Carrera Linux Argentina y Tecmint. Tiene una certificación en programación de la Universidad de Brigham Young-Idaho, y está completando las carreras de programador y analista de sistemas en la Universidad Nacional de Villa Mercedes (UNViMe). En su tiempo libre, Gabriel disfruta leyendo libros de Stephen R. Covey, tocando piano y guitarra, y enseñando conocimientos de programación a su dos hijas.