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
- Disponer de un servidor Ubuntu 22.04 con un usuario que tenga acceso a
sudo
como explicamos en Configuración inicial de un servidor con Ubuntu 22.04.
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:
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:
- 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).
- Prohibir todas las conexiones externas a la base de datos empleando dicha cuenta.
- Borrar cualquier cuenta de usuario que sea anónima.
- 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
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:
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!