Volver al blog

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

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

Introducción

En el mundo de internet, varias tecnologías se unen para formar una solución que permite a los usuarios de internet acceder a contenido dinámico en la world wide web. El stack LEMP es una de esas soluciones. Reúne cuatro tecnologías que conforman una solución de servidor completa para sitios web dinámicos y de alto rendimiento. LEMP es un acrónimo de Linux, Nginx, MySQL y PHP. Linux es el sistema operativo del servidor. Nginx (que se pronuncia como Engine-X, de ahí la letra E en el acrónimo) es el software del servidor web. A continuación, MySQL es el sistema de base de datos que contiene los datos del sitio web y de los usuarios. PHP es el lenguaje de programación del lado del servidor para el procesamiento dinámico.

En este tutorial, te guiaremos sobre cómo instalar y configurar un stack LEMP, y verificar que todo funcione como se espera. ¡Comencemos!

Paso 1: Configurar tu servidor con Ubuntu 20.04

Ubuntu 20.04 es un sistema operativo basado en Linux. Existen varios sistemas operativos de servidor basados en Linux por ahí, incluyendo gratuitos y premium. El enfoque de esta guía está en Ubuntu 20.04, que es gratuito y de código abierto. Este paso se encarga del primer requisito en el acrónimo del stack LEMP, la L. Deberías tener una instalación real de Ubuntu 20.04 en tu VPS para proceder con los pasos siguientes. Puedes seguir nuestra guía sobre cómo configurar tu servidor Ubuntu. Opcionalmente, si deseas seguir esta guía en tu computadora local, puedes descargar la imagen de instalación del servidor Ubuntu 20.04 directamente desde el sitio web de Ubuntu o en su defecto. Deberías configurar un usuario normal que no sea root con privilegios sudo porque ejecutaremos algunos comandos que requieren permisos de sudo.

Paso 2: Instalar y configurar el servidor Nginx

Los servidores web nos permiten servir contenido como páginas web a los visitantes del sitio web. Nginx es un servidor web popular, que aparece entre los cinco principales servidores web de código abierto preferidos por los desarrolladores. Este paso se encarga del segundo requisito en el stack LEMP, la E de Nginx. Ubuntu tiene un repositorio de paquetes predeterminado de donde obtendremos los paquetes para usar en esta guía. Ubuntu está basado en Debian, que utiliza apt o dpkg para administrar sus paquetes. Para los paquetes del repositorio predeterminado, utilizaremos apt.

Como regla general, debes ejecutar el comando de actualización antes de comenzar cualquier instalación en un sistema Linux. Comienza ingresando el siguiente comando en la terminal:

Una vez que hayas actualizado, ahora puedes instalar Nginx con el siguiente comando:

Una vez completada la instalación, Nginx comienza a ejecutarse automáticamente. El siguiente paso es configurar el firewall para permitir el paso del tráfico. Ubuntu utiliza el paquete ufw (Uncomplicated Firewall) para la configuración de firewalls. Después de la instalación, Nginx se registra como un servicio con ufw. Ubuntu inicia el servicio de Firewall automáticamente al arrancar el sistema, pero para estar seguro, escribe el siguiente comando para habilitarlo:

Para listar la configuración de aplicaciones que ufw permite, ingresa el siguiente comando:

A continuación se muestra una captura de pantalla que muestra la salida del comando anterior:

ufw app list

Como puedes ver, Nginx ya está registrado con ufw y tiene tres perfiles como se explica a continuación:

  • Nginx Full – abre tanto el puerto 80 como el 443. El puerto 80 es para tráfico normal/no cifrado, es decir, HTTP. El puerto 443 es para tráfico cifrado TLS/SSL, es decir, https.
  • Nginx HTTP – abre solo el puerto 80 – tráfico no cifrado.
  • Nginx HTTPS – abre solo el puerto 443 – tráfico cifrado TLS/SSL.

Aunque Nginx se registra automáticamente con ufw, no se permite tráfico a tu servidor hasta que lo hagas tú mismo. Puedes optar por permitir todos o cualquiera de los perfiles; sin embargo, es mejor que permitas el perfil más restrictivo que aún permita el tráfico que has configurado para tu servidor web. Dado que no hemos configurado SSL en este tutorial, solo permitiremos el tráfico HTTP en el puerto 80. Si tienes curiosidad, tenemos una guía sobre cómo configurar SSL en el servidor Nginx de Let's Encrypt usando Certbot.

Habilitemos el tráfico en el puerto 80 ingresando el siguiente comando:

Para verificar que el cambio se realizó correctamente, escribe el siguiente comando:

check status

La salida anterior de la ejecución del comando muestra que el tráfico HTTP ahora está permitido. Puedes verificar si el servidor está funcionando accediendo a tu dominio o a la IP pública del servidor en el navegador. Si no habías configurado un nombre de dominio y no estás seguro de la dirección IP pública de tu servidor, puedes encontrarla usando curl ejecutando el siguiente comando:

Copia la salida del comando anterior, que es tu dirección IP pública, en la barra de direcciones de tu navegador. Cuando cargues la página, verás la página de inicio predeterminada de Nginx:

nginx start page

La página anterior indica que has instalado Nginx con éxito.

Paso 3: Instalación del sistema de gestión de bases de datos MySQL

La gestión de datos es una parte crucial de cualquier sitio web dinámico. MySQL es un sistema de gestión de bases de datos que almacena y gestiona los datos de un sitio web. Este paso se encarga del tercer requisito en la pila LEMP, la M. Ingresa el siguiente comando para instalar MySQL:

Una vez completada la instalación de MySQL, debes configurarlo antes de que esté listo para su uso. Parte de la configuración incluye asegurar el servidor de la base de datos. MySQL viene con un script para guiarte en la protección y configuración de contraseñas. El siguiente comando inicia el script:

mysql secure installation

El script pregunta si deseas configurar el componente VALIDATE PASSWORD o presionar cualquier letra para continuar sin habilitar el componente.

El componente VALIDATE PASSWORD es una característica que se utiliza para comprobar si la contraseña que ingresaste para un usuario en particular en tu servidor de base de datos cumple con un criterio específico. Puedes configurarlo para verificar aspectos como la longitud, caracteres numéricos, disponibilidad de letras mayúsculas o minúsculas, etc. Si no está habilitado, puedes configurar cualquier contraseña de tu elección. Sin embargo, si está habilitado, debes usar una contraseña que cumpla con los criterios especificados. Habilitarlo puede causar problemas con paquetes que configuran automáticamente las credenciales de usuario de MySQL, como el paquete phpMyAdmin para Ubuntu. Habilitarlo o no es una elección personal. Tu base de datos seguirá estando segura si no lo habilitas, solo asegúrate de usar contraseñas fuertes y únicas.

Si presionaste Y para habilitar el componente, el script te pedirá que selecciones un nivel de validación de contraseña:

password strength

El script proporciona 3 niveles de validación de contraseña. El nivel LOW (bajo) requiere que tu contraseña incluya solo 8 o más caracteres. El nivel MEDIUM (medio) requiere que tu contraseña incluya 8 o más caracteres, que deben ser una combinación de letras mayúsculas, letras minúsculas y caracteres especiales. El nivel STRONG (fuerte) requiere una contraseña compleja que tenga 8 o más caracteres, que deben ser una combinación de letras mayúsculas, letras minúsculas, caracteres especiales y palabras, y no debe basarse en palabras comunes del diccionario; de lo contrario, recibirás errores. Vamos con el nivel Low, escribe 0 y presiona enter.

El script te solicita que ingreses y vuelvas a ingresar la contraseña:

set password

Escribe y y presiona enter para aceptar la contraseña que escribiste como tu contraseña de root. Las siguientes solicitudes son para mejorar la seguridad del servidor MySQL. Comenzando por eliminar los usuarios anónimos predeterminados que vienen con cada instalación de MySQL, deshabilitar el inicio de sesión de root desde una conexión remota y eliminar las bases de datos de prueba. La solicitud final te pide que recargues la tabla de privilegios para que los comandos surtan efecto. Escribe y y presiona enter para todas las solicitudes:

mysql secure installation

La configuración de seguridad inicial se ha completado.

Puedes verificar la versión de MySQL que instalaste ejecutando el comando:

Aquí está la versión que estamos usando para este tutorial:

mysql version

Para los sistemas Ubuntu que ejecutan versiones de MySQL desde la 5.7 en adelante, el usuario root está configurado para autenticarse mediante el complemento auth_socket y no con la contraseña. Esto garantiza una mayor seguridad, sin embargo, puede ser un problema con paquetes externos como el paquete phpMyAdmin. Si prefiere continuar usando el complemento auth_socket, pase al Paso 4.

Si en su lugar desea conectarse usando una contraseña, debe configurar el método de autenticación para usar mysql_native_password.

Inicie la consola de MySQL ingresando el siguiente comando:

MySQL viene con varias bases de datos predeterminadas. Puede ver una lista de las bases de datos predeterminadas ingresando la siguiente consulta en su terminal:

mysql dbs LEMP stack

La base de datos llamada mysql almacena varias configuraciones relacionadas con MySQL. Esta base de datos tiene una tabla llamada users que contiene los detalles del usuario y el método de autenticación para cada uno. Podemos usar consultas SQL para recuperar, modificar y eliminar información de una tabla. Ingrese la siguiente consulta en su terminal para obtener detalles sobre qué método de autenticación utiliza cada usuario:

user authentication check

La salida anterior muestra que el usuario root en realidad se autentica usando el complemento auth_socket. Para cambiar el método de autenticación para el usuario root, ingrese la siguiente instrucción en su terminal. Recuerde cambiarla para que coincida con la seguridad de la contraseña para el nivel medio que habíamos establecido en un paso anterior, de lo contrario causará un error:

Una vez que la consulta se ejecute correctamente, ejecute el comando flush privileges para que los cambios surtan efecto de inmediato:

Ejecute nuevamente la siguiente instrucción select para verificar si los cambios han surtido efecto:

updated user authentication check

A partir de la salida, el usuario root ahora se autenticará usando mysql_native_password. Puede salir de la consola de mysql escribiendo exit y presionando enter.

Puede intentar iniciar sesión con la contraseña que estableció ingresando el siguiente comando:

La consola le pedirá su contraseña. Si coincide, verá la consola de MySQL. Ha configurado correctamente su servidor con MySQL. A continuación, salga de la consola de MySQL.

Paso 4: Instalación de PHP y configuración de Nginx para usar el procesador PHP

PHP es un acrónimo de PHP: Hypertext Preprocessor. Es un lenguaje de programación del lado del servidor de código abierto ampliamente utilizado para sitios web y aplicaciones web. PHP se encarga del cuarto requisito en la pila LEMP. PHP ayuda a generar contenido dinámico en un sitio web. Se puede utilizar como intermediario entre sus páginas web y el sistema de base de datos. Lee datos de la base de datos y los presenta a los visitantes de su sitio web. Además, puede insertar, actualizar y eliminar datos de la base de datos.

Nginx carece de los complementos nativos de procesamiento de PHP como otros servidores web, por lo que debe instalar php-fpm para pasar las solicitudes de Nginx a PHP para su procesamiento. En primer lugar, agregue el repositorio universe de Ubuntu, que tiene software libre y de código abierto mantenido por la comunidad de Ubuntu. Ingrese el siguiente comando en su terminal:

Luego, instale el paquete php-fpm junto con el paquete auxiliar php-mysql para permitir que PHP se comunique con MySQL, usando el siguiente comando:

Al momento de escribir esta guía, la versión de PHP instalada con el comando anterior es la 7.2.24. Por lo tanto, instala el paquete php-fpm7.2. Tenga esto en cuenta al actualizar los bloques de servidor y asegúrese de ingresar la versión correcta, de lo contrario su página no se cargará.

Puede verificar la versión de PHP ingresando el siguiente comando:

php version

En este punto, se han instalado todos los componentes de la pila LEMP. Lo que debe hacer a continuación es configurar Nginx para dirigir las solicitudes al procesador PHP. En Nginx, la configuración se realiza dentro de bloques de servidor. Los bloques de servidor son equivalentes a los hosts virtuales de Apache. Para obtener más información, puede echar un vistazo a nuestro tutorial sobre bloques de servidor de Nginx.

Para este tutorial, creemos un bloque de servidor para un dominio test.com con el mismo nombre, es libre de elegir el nombre de su elección. Los bloques de servidor están en el directorio /etc/nginx/sites-available/. Use nano para crear el archivo del bloque de servidor ingresando el siguiente comando:

Escriba el siguiente script en el archivo:

Aquí hay una breve descripción de lo que hace cada directiva:

  • listen – define el puerto en el que escuchará Nginx. El puerto 80 es el puerto predeterminado; sin embargo, si hubiera configurado SSL, colocaría el 443.
  • root – contiene el directorio en el que se almacenará el directorio del sitio.
  • index – indica a Nginx que priorice el servicio de archivos index.php, si están disponibles a petición.
  • server_name – define el nombre del bloque de servidor, contiene la dirección IP pública o el nombre de dominio de su servidor.
  • location/ – el primer bloque de ubicación tiene la directiva try_files. Comprueba la existencia de archivos que coincidan con una solicitud URI; si no se encuentran, se devuelve un error 404.
  • location ~ \.php$ – esta directiva maneja el procesamiento de PHP dirigiendo las solicitudes de Nginx a través del archivo fastcgi-php.conf y el archivo php7.2-fpm.sock que define qué socket asociar con php-fpm. Este comando comprueba el estado de php-fpm, especificamos la versión como 7.2, que es la que tenemos. Asegúrese de verificar con cualquier versión que tenga:
php status

  • location ~ /\.ht – esta directiva maneja los archivos .htaccess, que no son procesados por Nginx. La directiva deny all asegura que no se sirva ningún archivo htaccess a los visitantes.

Después de agregar el script a su archivo test.com, presione Ctrl + O, luego presione Enter para guardar el archivo. Presione Ctrl + X para cerrar el editor.

Luego, debe habilitar el bloque de servidor ingresando el siguiente comando para crear un enlace simbólico a /etc/nginx/sites-enabled:

A continuación, desvincule el bloque de servidor predeterminado de sites-enabled introduciendo el siguiente comando:

Pruebe su nueva configuración introduciendo el siguiente comando:

Si la sintaxis es correcta, recargue Nginx con el siguiente comando:

En este paso, su pila LEMP ha sido instalada y configurada. En el siguiente paso, crearemos un archivo de prueba solo para asegurarnos de que los distintos componentes se conecten bien.

Paso 5: Creación de un archivo PHP para probar su pila LEMP

En este paso, crearemos un archivo .php y lo ejecutaremos en el servidor Nginx para comprobar si funciona correctamente. Utilizaremos la función global phpinfo() para comprobar los paquetes php disponibles. Introduzca el siguiente comando para abrir un archivo .php en nano:

En el editor nano, escriba el siguiente fragmento de código:

Guarde y cierre el archivo. Para visitar la página que acaba de crear en su navegador, busque su dominio o dirección IP y navegue hasta ella de la siguiente manera:

Debería poder ver la página de información de PHP:

php info page

La página anterior muestra que ha configurado Nginx correctamente. Dado que el archivo que creó para la prueba contiene detalles específicos sobre su servidor, debe recordar eliminarlo. Introduzca el siguiente comando para eliminar el archivo:

 

Si alguna vez necesita probar sus configuraciones en el futuro, siempre puede volver a crear el archivo.

Conclusión

En este tutorial, ha configurado una pila LEMP en su Ubuntu 20.04, que es una de las pilas de desarrollo de aplicaciones web más potentes disponibles. A partir de aquí, debería poder alojar casi cualquier sitio web, aplicación web o lógica del lado del servidor para su aplicación móvil. Para asegurarse de que su sitio web sirva contenido a través de una conexión SSL segura, tenemos un tutorial sobre cómo configurar certificados SSL en el servidor Nginx que le recomendamos que consulte.

¡Feliz informática!

author

Akshay Nagpal

Autor · CloudSigma

Preslav Dobrev es diseñador creativo en CloudSigma, centrado en una identidad empresarial coherente mediante el uso de canales de marketing tradicionales e innovadores. Es experto en fusionar la visión artística con el marketing estratégico para crear narrativas de marca impactantes.

Comentarios

Aún no hay comentarios. Sea el primero.