Cómo instalar LEMP Stack (Linux, Nginx, PHP y MariaDB) en Ubuntu 24.04

La Pila LEMP (Linux, Nginx, MySQL/MariaDB y PHP) es un grupo de aplicaciones de software libre y de código abierto para alojar y desarrollar aplicaciones web PHP. La Pila LEMP puede utilizarse para desplegar aplicaciones web estáticas y dinámicas.

Esta guía te mostrará cómo instalar la Pila LEMP (Linux, Nginx, MySQL/MariaDB y PHP) en Ubuntu 24.04 «Noble Numbat». También mostraremos cómo asegurar el servidor MariaDB y crear una configuración en bloque del servidor Nginx para alojar sitios web o nombres de dominio.

Requisitos previos

Antes de empezar, asegúrate de que tienes Ubuntu 24.04 «Noble Numbat» con el usuario root o no root con privilegios sudo/administrador. Además, asegúrate de que el UFW (Cortafuegos sin complicaciones) se está ejecutando y está habilitado.

Instalar el servidor web Nginx

Nginx o engine-x es el servidor web más popular de internet. se hizo popular porque Nginx puede manejar un alto tráfico simultáneamente con los mínimos recursos del sistema. En este primer paso, instalarás el servidor web Nginx en el servidor Ubuntu.

Antes de instalar los paquetes, actualiza y refresca la lista de paquetes de Ubuntu con el siguiente comando.

sudo apt update

actualizar repo

Instala el servidor web Nginx en tu máquina Ubuntu con el siguiente comando. Introduce Y para confirmar la instalación cuando se te solicite.

sudo apt install nginx

instalar nginx

Una vez completada la instalación, el servicio Nginx debería estar ejecutándose y habilitado en tu sistema. Verifica el servicio Nginx con el siguiente comando.

sudo systemctl is-enabled nginx
sudo systemctl status nginx

Deberías ver que el servicio Nginx está«habilitado» y que su estado actual es«activo (en ejecución)«.

comprobar servicio nginx

Antes de acceder a Nginx, tienes que abrir los puertos HTTP y HTTPS en tu servidor Ubuntu mediante UFW (Uncomplicated Firewall).

Ejecuta el siguiente comando‘ufw‘ para habilitar el perfil‘Nginx Full‘, que permitirá el acceso HTTP y HTTPS a tu servidor Ubuntu.

sudo ufw allow 'Nginx Full'

Ahora verifica las reglas UFW con el siguiente comando. Asegúrate de que el perfil «Nginx Full» está habilitado con el estado «ALLOW«.

sudo ufw status

nginx configuración ufw

Por último, visita http://192.168.5.30/ desde tu navegador web preferido para acceder a tu instalación de Nginx. Si tienes éxito, deberías obtener la página predeterminada‘index.html‘ como la siguiente:

Índice nginx

Instalación del servidor MariaDB

Después de instalar Nginx, instalarás el servidor MariaDB en Ubuntu. En este ejemplo, instalarás MariaDB a través del repositorio de Ubuntu, y luego asegurarás la instalación de MariaDB mediante la utilidad‘mariadb-secure-installation‘.

Para instalar el servidor MariaDB en Ubuntu, ejecuta el siguiente comando‘apt install‘. Introduce Y y pulsa ENTER para continuar con el proceso.

sudo apt install mariadb-server

instalar servidor mariadb

Una vez finalizada la instalación, verifica el servicio MariaDB con el siguiente comando. Esto te mostrará el estado del servicio MariaDB.

sudo systemctl is-enabled mariadb
sudo systemctl status mariadb

El servicio MariaDB está‘habilitado‘ con el estado actual‘activo (en ejecución)‘.

comprobar servicio mariadb

Una vez que hayas instalado el servidor MariaDB, debes asegurarlo mediante‘mariadb-secure-installation‘. Esto te permite configurar la contraseña de root de MariaDB, desactivar la autenticación remota para el usuario root, y también eliminar bases de datos y privilegios innecesarios de tu instalación del servidor MariaDB.

Ejecuta el comando‘mariadb-secure-installation‘ que aparece a continuación para asegurar el servidor MariaDB.

sudo mariadb-secure-installation

Ahora se te preguntará por las siguientes configuraciones del servidor MariaDB:

Pulsa ENTER cuando se te pida la contraseña de root de MariaDB.

Enter current password for root (enter for none):
OK, successfully used password, moving on...

Escriben’ cuando se te pida cambiar a la autenticación unix_socket.

Switch to unix_socket authentication [Y/n] n
 ... skipping.

Escribe « Y» para configurar la contraseña raíz de MariaDB. A continuación, introduce tu nueva contraseña y repite la operación.

Change the root password? [Y/n] Y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
 ... Success!

Escribe Y para eliminar el usuario anónimo por defecto de tu instalación del servidor MariaDB.

Remove anonymous users? [Y/n] Y
 ... Success!

Escribe Y para desactivar el inicio de sesión remoto para el usuario raíz de MariaDB. El usuario root debe conectarse siempre desde localhost.

Disallow root login remotely? [Y/n] Y
 ... Success!

Vuelve a teclear Y para eliminar la prueba de base de datos por defecto y sus privilegios de tu servidor MariaDB.

Remove test database and access to it? [Y/n] Y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Escribe Y para recargar las tablas de privilegios y aplicar todos los cambios que has hecho hasta ahora.

Reload privilege tables now? [Y/n] Y
 ... Success!

Cuando hayas terminado, verás el siguiente mensaje:

All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

Instalando PHP-FPM

PHP-FPM (FastCGI Process Manager) es una alternativa a la implementación de FastCGI para PHP. Se utiliza sobre todo para sitios de alto tráfico con Nginx como servidor web. En esta sección, instalarás PHP-FPM con algunas extensiones adicionales, como mysqli para el controlador MySQL/MariaDB, opcache y APCu para el almacenamiento en caché.

Instala PHP-FPM en tu servidor Ubuntu con el siguiente comando. Cuando se te solicite, introduce Y y pulsa ENTER para continuar.

sudo apt install php-fpm php-mysql php-curl php-gd php-json php-intl php-bcmath php-opcache php-apcu php-mbstring php-fileinfo php-xml php-soap php-tokenizer php-zip

instalar php-fpm

Una vez finalizada la instalación, el servicio PHP-FPM debería estar en funcionamiento. Comprueba el estado del servicio PHP-FPM con el siguiente comando.

sudo systemctl is-enabled php8.3-fpm
sudo systemctl status php8.3-fpm

Como puedes ver a continuación, el PHP-FPM está‘activo (en ejecución)‘ y‘habilitado’ en el arranque del sistema:

comprobar el servicio php-fpm

En Ubuntu, el PHP-FPM por defecto se ejecuta bajo el archivo sock. Es importante conocer la ruta del archivo sock de PHP-FPM, que se utilizará para la integración con el servidor web Nginx.

Comprueba la ruta de ubicación del archivo sock de PHP-FPM con el siguiente comando.

ss -pl | grep php

En la siguiente salida, puedes ver que el archivo sock PHP-FPM se encuentra en‘/run/php/php8.3-fpm.sock‘.

comprobar archivo sock

Integrar Nginx con PHP-FPM

Así que ya has instalado PHP-FPM, es hora de integrarlo con el servidor web Nginx. Para ello, debes conocer exactamente la ruta del archivo sock de PHP-FPM y modificar el archivo de bloque del servidor Nginx por defecto.

Abre la configuración del bloque del servidor‘/etc/nginx/sites-available/default‘ utilizando el siguiente comando del editor nano.

sudo nano /etc/nginx/sites-available/default

Descomenta las siguientes líneas y asegúrate de cambiar la ruta del archivo PHP-FPM sock con la nueva ubicación.

 # pass PHP scripts to FastCGI server
 #
 location ~ \.php$ {
     include snippets/fastcgi-php.conf;
# # With php-fpm (or other unix sockets):
fastcgi_pass unix:/run/php/php8.3-fpm.sock;

# # With php-cgi (or other tcp sockets):
# fastcgi_pass 127.0.0.1:9000;
}

Guarda el archivo y sal del editor.

Ahora ejecuta el siguiente comando‘nginx‘ para verificar la sintaxis de Nginx. Debes ejecutar este comando después de realizar cambios en la configuración de Nginx.

sudo nginx -t

Si la sintaxis de Nginx es correcta, deberías obtener una confirmación como la siguiente:

integrar nginx y php-fpm

A continuación, ejecuta el siguiente comando para reiniciar el servicio Nginx y aplicar tu integración entre Nginx y PHP-FPM.

sudo systemctl restart nginx

Con Nginx reiniciado, puedes verificar tu integración a través del archivo PHPINFO. Ejecuta el siguiente comando para crear el archivo PHPINFO‘info.php‘ en el directorio raíz web por defecto‘/var/www/html/‘.

echo "<?php phpinfo(); ?>" > /var/www/html/info.php

Por último, vuelve a tu navegador web y visita http://192.168.5.30/info.php. Si la integración de Nginx y PHP-FPM se ha realizado correctamente, deberías obtener lo siguiente:

Puedes ver a continuación que PHP 8.3 se está ejecutando con la API de servidor PHP-FPM bajo el servidor web Nginx.

phpinfo

Desplázate hacia abajo en la página y verás que también está instalada la extensión PHP mysqli/mysqlnd.

php mysql habilitado

Por último, también verás el almacenamiento en caché mediante APC activado en tu instalación de PHP.

php apc activado

Crear un bloque de servidor Nginx (host virtual)

Un bloque de servidor no es más que otro nombre para un «host virtual» para un servidor web Nginx. Se utiliza para alojar varios sitios web o nombres de dominio en un único servidor. En esta sección, aprenderás a crear un bloque de servidor Nginx.

Antes de crear la configuración del bloque de servidor, ejecuta el comando siguiente para crear un nuevo directorio raíz web ‘/var/www/newsite/public_html’ y una página personalizada ‘index.html ‘.

mkdir -p /var/www/newsite/public_html
echo "Welcome to newsite.com" > /var/www/newsite/public_html/index.html

Ahora ejecuta el siguiente comando para cambiar la propiedad del directorio ‘/var/www/newsite‘ al usuario‘www-data‘. En el sistema Ubuntu, el servidor web Nginx se ejecuta como usuario ‘www-data‘.

sudo chown -R www-data:www-data /var/www/newsite

A continuación, ejecuta el siguiente comando del editor nano para crear una nueva configuración de bloque de servidor ‘/etc/nginx/sites-available/newsite‘.

sudo nano /etc/nginx/sites-available/newsite

Introduce la configuración que aparece a continuación, asegúrate de cambiar la opción nombre_servidor por el nombre de tu dominio, y el directorio raíz web por la nueva ruta, por ejemplo‘/var/www/newsite/public_html‘.

server {
   listen 80;
   server_name newsite.com;
root /var/www/newsite/public_html;
index index.html;

location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}

location / {
try_files $uri $uri/ =404;
}
}

Cuando hayas terminado, guarda y sal del archivo.

Ahora ejecuta el siguiente comando para activar la configuración del bloque de servidor‘newsite‘. Con este comando, crearás un nuevo enlace simbólico del archivo‘/etc/nginx/sites-available/newsite‘ al directorio‘/etc/nginx/sites-enabled/‘.

sudo ln -s /etc/nginx/sites-available/newsite /etc/nginx/sites-enabled/

Una vez activado el bloque del servidor, ejecuta el siguiente comando‘nginx‘ para comprobar la sintaxis de tu Nginx.

sudo nginx -t

Si no se produce ningún error, deberías obtener la salida ‘... syntax is ok / … test is successful‘.

Por último, ejecuta el siguiente comando para reiniciar el servidor web Nginx y aplicar tu nueva configuración de bloque de servidor. Con esto, tu configuración del bloque servidor debería ser accesible desde tu máquina local.

sudo systemctl restart nginx

crear bloque servidor

Probar la configuración del bloque servidor

Para asegurarte de que tu configuración del bloque de servidores Nginx es correcta, accederás al nombre de dominio de tu configuración del bloque de servidores desde tu ordenador local. Si utilizas el nombre de dominio público, visita el nombre de dominio directamente. Pero para los usuarios del dominio local, edita el archivo «hosts» en tu ordenador local.

  • Para los usuarios de Linux y MacOS, edita el archivo ‘/etc/hosts‘ con privilegios de root/administrador.
  • Para los usuarios de Windows, edita el archivo ‘C:\Windows\System32\drivers\etc\hosts‘ como administrador.

Añade la dirección IP y el nombre de dominio de tu servidor como se indica a continuación:

192.168.5.30 newsite.com

Guarda el archivo y sal.

Ahora abre tu navegador web y visita http://newsite.com/. si la configuración del bloque del servidor Nginx se ha realizado correctamente, deberías obtener la página personalizada ‘index.html’ que has creado como la siguiente:

Bloqueo del servidor nginx

Conclusión

¡Enhorabuena! Ya has instalado LEMP Stack (Linux, Nginx, MySQL/MariaDB y PHP) en Ubuntu 24.04 «Noble Numbat». También has asegurado la instalación del servidor MariaDB y has creado un bloque de servidor Nginx para alojar varios sitios web.

Scroll al inicio