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

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

Poner en funcionamiento un servidor web para aplicaciones y sitios dinámicos es uno de los usos más típicos que puedes darle a tu VPS. En esta guía aprenderás cómo instalar un stack LEMP (Linux, Nginx, MySQL y PHP) en Ubuntu 22.04. Esta combinación de sistema operativo, servidor web, base de datos relacional y lenguaje del lado del servidor es ampliamente utilizada para alojar y desarrollar aplicaciones web dinámicas.

Requisitos previos

Paso 1: Actualización e instalación de paquetes

Para comenzar con la instalación del stack LEMP en Ubuntu 22.04, es fundamental actualizar el índice de paquetes de APT. De esta forma, aseguraremos que el gestor utilice la información más reciente al instalar cada componente en un paso posterior. También, aprovecharemos para actualizar el software actualmente instalado en el servidor. Para hacer ambas cosas, ejecuta los siguientes comandos en la terminal:

sudo apt update && sudo apt upgrade

A continuación, procederemos a la instalación de Nginx, MySQL y PHP, junto con sus respectivas dependencias. Estos componentes son necesarios para crear un entorno web dinámico y eficiente. Con el siguiente comando podrás instalarlos todos de una vez:

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

Para chequear la versión de PHP-FPM que acabas de instalar (que necesitarás más adelante en una configuración), utiliza dpkg -l | grep fpm.

Una vez finalizada la instalación, verifiquemos que el servidor web Nginx y el motor de base de datos MySQL estén en ejecución de la siguiente manera:

systemctl status nginx mysql

Si la instalación fue exitosa, el resultado debería ser similar al siguiente mensaje:

como instalar un stack lemp en ubuntu 22.04 1
Cómo instalar un stack LEMP (Linux, Nginx, MySQL y PHP) en Ubuntu 22.04

En caso de que alguno de estos servicios no apareciera como activo y en ejecución, inícialo a través de sudo systemctl start seguido del nombre (nginx o mysql).

Paso 2: Asegurar el motor de datos MySQL

Aunque MySQL se encuentra en funcionamiento, es crucial abordar varios aspectos de seguridad manualmente por separado. Para facilitar esta tarea, utilizaremos sudo mysql_secure_installation. Con esta herramienta, podremos realizar las siguientes acciones:

  1. Elegir la contraseña de root de MySQL (que es algo separado de la cuenta que lleva el mismo nombre a nivel del sistema operativo).
  2. Prohibir todas las conexiones externas a la base de datos empleando dicha cuenta.
  3. Borrar cualquier cuenta de usuario que sea anónima.
  4. Remover la base de datos de prueba.

El comando que mencionamos arriba nos permitirá validar contraseñas. Aunque esta funcionalidad no es obligatoria, activarla garantizará que las contraseñas que emplees en MySQL sean seguras. Tendrás la posibilidad de elegir entre diferentes niveles de seguridad:

  • BAJO obliga a elegir contraseñas de al menos ocho caracteres sin un patrón específico.
  • MEDIO requiere incluir letras mayúsculas y minúsculas, números, como mínimo un carácter especial, y una longitud de al menos ocho caracteres.
  • FUERTE equivale al nivel MEDIO con el agregado de la verificación contra un diccionario de palabras para evitar contraseñas comunes.

Una vez que selecciones el nivel que desees, deberás confirmar las demás configuraciones con y o Y para continuar. Al finalizar, aparecerá el mensaje All done! por pantalla. Esto te dará la pauta de que has completado esta fase de configuración con éxito.

Paso 3: Habilitar la integración de PHP en Nginx

Nginx usa /var/www/html como directorio raíz, como se especifica en el archivo de configuración del sitio por defecto. Este recibe el nombre de default y puedes encontrarlo en /etc/nginx/sites-enabled/default. Para permitir el uso de PHP en este sitio, se requiere descomentar las líneas relevantes y editar la versión de PHP-FPM en caso de que no coincida con la que instalaste antes, tal como observas a continuación. La otra alternativa (PHP-CGI) debe mantenerse desactivada comentando la línea correspondiente con un # al principio.

cd /etc/nginx/sites-enabled
sudo nano default
como instalar un stack lemp en ubuntu 22.04 2
Cómo instalar un stack LEMP (Linux, Nginx, MySQL y PHP) en Ubuntu 22.04

Ahora procede a crear un archivo con el nombre info.php dentro de la carpeta /var/www/html con el contenido que aparece en el segundo bloque de código. Dado que este archivo solo contiene código PHP, no es necesario utilizar la etiqueta de cierre ?> después de la función phpinfo().

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

Una vez que guardes los cambios, reinicia Nginx para aplicar la configuración actual:

sudo systemctl restart nginx

Verifica que Nginx y PHP están trabajando juntos visitando

http://AAA.BBB.CCC.DDD/info.php

en tu navegador, después de cambiar AAA.BBB.CCC.DDD con la dirección IP pública o el nombre de host de tu servidor.

La dirección IP pública y el nombre de host del servidor se encuentran disponibles en tu Área de cliente de Donweb, dentro del apartado Software y Accesos de tu Cloud Server.

Al acceder a la dirección anterior, verás los detalles de la instalación actual de PHP, como ves en la siguiente imagen:

como instalar un stack lemp en ubuntu 22.04 3
Cómo instalar un stack LEMP (Linux, Nginx, MySQL y PHP) en Ubuntu 22.04

Esto te asegura que Nginx y PHP están funcionando juntos correctamente. En el próximo paso, harás una prueba similar con el fin de chequear la integración con MySQL.

Paso 4: Realizar la conexión con la base de datos MySQL

Si bien no has creado una base de datos aún, es posible chequear la conexión entre PHP y MySQL como explicamos a continuación.

Paso 4a: Configurar un usuario distinto de root

Antes de crear una base de datos, es recomendable crear un usuario específico para MySQL en lugar de usar la cuenta de root. Para hacerlo, accede al prompt de MySQL ejecutando el siguiente comando:

sudo mysql

Ahora ejecuta la siguiente sentencia SQL, asegurándote de reemplazar gabriel y Abc1234# con otras credenciales que hayas elegido:

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

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

Paso 4b: Creación de un archivo PHP

Para verificar la comunicación entre PHP y MySQL, crea un archivo llamado estado-mysql.php en la carpeta /var/www/html. Puedes hacerlo con los siguientes comandos:

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

Copia y pega las siguientes líneas en el archivo. Nuevamente, recuerda cambiar el nombre de usuario y contraseña por los que hayas empleado en 4a.

<?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 dirigirte a la página AAA.BBB.CCC.DDD/estado-mysql.php, deberías ver la información correspondiente a la conexión con MySQL. Esto confirmará que PHP puede comunicarse correctamente con MySQL y que Nginx está sirviendo la página sin problemas.

Conclusión

Al completar esta guía has aprendido cómo configurar un Stack LEMP en un servidor Ubuntu 22.04. ¡Felicitaciones por este logro!

Gabriel Cánepa
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.