Servidor web · 15 min read · Oct 13, 2025
Cómo instalar Nginx con PHP y MariaDB (LEMP Stack) con Opcache, Redis y Let's Encrypt en Ubuntu

El acrónimo “LEMP” se refiere a un grupo de software que generalmente se instala junto para permitir que un servidor aloje sitios web dinámicos y aplicaciones web. Este término es en realidad un acrónimo que representa cuatro componentes clave:
- L enux: El sistema operativo. Linux es un sistema operativo de código abierto popular que sirve como base para el servidor.
- E ngine-X (pronunciado como “nginx”): El servidor web. Nginx es un servidor web de alto rendimiento conocido por su estabilidad, rica funcionalidad, configuración simple y bajo consumo de recursos.
- M ySQL o MariaDB: El sistema de base de datos. MySQL es un sistema de gestión de bases de datos relacional ampliamente utilizado que almacena y gestiona los datos para el sitio web o la aplicación. Tenga en cuenta que MySQL a veces es reemplazado por MariaDB, un fork mejorado, completamente de código abierto y desarrollado por la comunidad de MySQL.
- P HP: El lenguaje de programación. PHP es un lenguaje de scripting del lado del servidor diseñado para el desarrollo web, pero también se utiliza como un lenguaje de programación de propósito general.
El stack LEMP es una opción popular para alojar sitios web que requieren una base de datos y procesamiento del lado del servidor, como sitios web de WordPress, plataformas de comercio electrónico y otras aplicaciones web dinámicas. Es comparable al stack LAMP, donde Apache (representado por la “A” en LAMP) se utiliza en lugar de Nginx.
En esta guía, instalará un stack LEMP en un servidor basado en Ubuntu 20.04. También instalaremos phpMyAdmin, Redis, Opcache y SSL de Let’s Encrypt.
Requisitos previos
- Un servidor que ejecute Ubuntu 20.04.
- Un usuario sudo no root.
- Asegúrese de que todo esté actualizado.
shell $ sudo apt update $ sudo apt upgrade - Algunos paquetes que su sistema necesita.
shell $ sudo apt install wget curl nano -yAlgunos de estos paquetes pueden ya estar instalados en su sistema.
Configurar el Firewall
El primer paso es configurar el firewall. Ubuntu viene con ufw (Uncomplicated Firewall) por defecto.
Verifique si el firewall está en funcionamiento.
$ sudo ufw status
Debería obtener la siguiente salida.
Estado: inactivo
Permita el puerto SSH para que el firewall no interrumpa la conexión actual al habilitarlo.
$ sudo ufw allow OpenSSH
Permita también los puertos HTTP y HTTPS.
$ sudo ufw allow 80
$ sudo ufw allow 443
Habilite el Firewall
$ sudo ufw enable
El comando puede interrumpir las conexiones ssh existentes. ¿Proceder con la operación (y|n)? y
El firewall está activo y habilitado al inicio del sistema
Verifique el estado del firewall nuevamente.
$ sudo ufw status
Debería ver una salida similar.
Estado: activo
Para Acción Desde
-- ------ ----
OpenSSH PERMITIR En cualquier lugar
80 PERMITIR En cualquier lugar
443 PERMITIR En cualquier lugar
OpenSSH (v6) PERMITIR En cualquier lugar (v6)
80 (v6) PERMITIR En cualquier lugar (v6)
443 (v6) PERMITIR En cualquier lugar (v6)
Instalar PHP
Ubuntu 20.04 por defecto viene con PHP 7.4, pero para tener un repositorio de PHP actualizado, agregaremos el repositorio de PHP de Ondrej.
Instale el repositorio de PHP de Ondrej.
$ sudo add-apt-repository ppa:ondrej/php
Instale PHP 7.4 junto con algunos paquetes adicionales.
$ sudo apt install php-cli php-fpm php-mysql -y
Verifique si PHP está funcionando correctamente.
$ php --version
Debería ver una salida similar.
PHP 7.4.5 (cli) (construido: 28 de abr 2020 14:49:23) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
con Zend OPcache v7.4.5, Copyright (c), de Zend Technologies
Instalar MariaDB
MariaDB es un reemplazo directo para MySQL, lo que significa que los comandos para ejecutar y operar MariaDB son los mismos que los de MySQL.
Ubuntu 20.04 por defecto viene con MariaDB 10.3, que está un poco desactualizado. Para obtener la última versión estable de MariaDB, instalaremos su repositorio oficial.
Agregue el repositorio oficial de MariaDB.
$ sudo apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc'
$ sudo add-apt-repository 'deb [arch=amd64] http://mirror.lstn.net/mariadb/repo/10.4/ubuntu focal main'
Para instalar MariaDB emita el siguiente comando.
$ sudo apt install mariadb-server -y
Verifique si MariaDB se instaló correctamente.
$ mysql --version
Debería ver la siguiente salida.
mysql Ver 15.1 Distrib 10.4.13-MariaDB, para debian-linux-gnu (x86_64) usando readline 5.2
Habilite el servicio de MariaDB.
$ sudo systemctl enable mariadb
Ejecute el siguiente comando para realizar la configuración predeterminada, como establecer una contraseña de root, eliminar usuarios anónimos, deshabilitar el inicio de sesión remoto de root y eliminar tablas de prueba.
$ sudo mysql_secure_installation
Con MariaDB 10.4, ahora se le preguntará entre usar la contraseña de root o el plugin unix_socket. El plugin unix_socket le permite iniciar sesión en MariaDB con sus credenciales de usuario de Linux. Se considera más seguro, aunque necesitará un nombre de usuario/contraseña tradicional para usar aplicaciones de terceros como phpMyAdmin. Nos quedaremos con el uso del plugin unix_socket para este tutorial. Aún puede usar phpMyAdmin a través de cualquier usuario que cree para sus bases de datos.
Presionar Enter elige la opción predeterminada (la que está en mayúsculas, Y en este caso).
NOTA: ¡SE RECOMIENDA EJECUTAR TODAS LAS PARTES DE ESTE SCRIPT PARA TODOS LOS SERVIDORES MariaDB EN USO EN PRODUCCIÓN! ¡LEA CADA PASO CUIDADOSAMENTE!
Para iniciar sesión en MariaDB y asegurarla, necesitaremos la contraseña actual para el usuario root. Si acaba de instalar MariaDB y no ha establecido la contraseña de root aún, simplemente debe presionar enter aquí.
Ingrese la contraseña actual para root (presione enter si no hay): [PRESIONE ENTER]
OK, se utilizó la contraseña correctamente, avanzando...
Establecer la contraseña de root o usar unix_socket asegura que nadie pueda iniciar sesión en el usuario root de MariaDB sin la autorización adecuada.
Ya tiene su cuenta root protegida, por lo que puede responder 'n' de forma segura.
Cambiar a autenticación unix_socket [Y/n] [PRESIONE ENTER]
¡Habilitado con éxito!
Recargando tablas de privilegios..
... ¡Éxito!
Ya tiene su cuenta root protegida, por lo que puede responder 'n' de forma segura.
¿Cambiar la contraseña de root? [Y/n] [RESPONDER n]
... omitiendo.
Por defecto, una instalación de MariaDB tiene un usuario anónimo, lo que permite que cualquiera inicie sesión en MariaDB sin tener que tener una cuenta de usuario creada para ellos. Esto está destinado solo para pruebas y para que la instalación sea un poco más fluida. Debe eliminarlos antes de pasar a un entorno de producción.
¿Eliminar usuarios anónimos? [Y/n] [PRESIONE ENTER]
... ¡Éxito!
Normalmente, solo se debe permitir que root se conecte desde 'localhost'. Esto asegura que alguien no pueda adivinar la contraseña de root desde la red.
¿Deshabilitar el inicio de sesión remoto de root? [Y/n] [PRESIONE ENTER]
... ¡Éxito!
Por defecto, MariaDB viene con una base de datos llamada 'test' a la que cualquiera puede acceder. Esto también está destinado solo para pruebas y debe eliminarse antes de pasar a un entorno de producción.
¿Eliminar la base de datos de prueba y el acceso a ella? [Y/n] [PRESIONE ENTER]
\- Eliminando la base de datos de prueba...
... ¡Éxito!
\- Eliminando privilegios en la base de datos de prueba...
... ¡Éxito!
Recargar las tablas de privilegios asegurará que todos los cambios realizados hasta ahora surtan efecto de inmediato.
¿Recargar tablas de privilegios ahora? [Y/n] [PRESIONE ENTER]
... ¡Éxito!
Limpiando...
¡Todo listo! Si ha completado todos los pasos anteriores, su instalación de MariaDB ahora debería estar segura.
¡Gracias por usar MariaDB!
Eso es todo. La próxima vez que desee iniciar sesión en MySQL, use el siguiente comando
$ sudo mysql
Ingrese su contraseña de root cuando se le solicite.
Instalar Redis
Utilice el siguiente comando para instalar Redis y la extensión PHP Redis correspondiente.
$ sudo apt install redis php-redis
Configurar el Servidor Redis
Realicemos algunas configuraciones básicas en el servidor Redis.
Abra el archivo /etc/redis/redis.conf con el editor Nano.
$ sudo nano /etc/redis/redis.conf
Dentro del archivo, localice la directiva supervised. Esta directiva le permite declarar un sistema de inicio para gestionar Redis como un servicio. Está configurado en no por defecto. Dado que estamos usando Ubuntu, que utiliza el sistema de inicio systemd, cambie su valor de no a systemd de la siguiente manera.
supervised systemd
Si desea que los clientes remotos se conecten a su instancia de Redis, busque la línea bind 127.0.0.1 y cámbiela a lo siguiente.
bind 0.0.0.0
También puede cambiar el puerto predeterminado en el que Redis escucha de 6379 a un valor de su elección.
port 3458
Para configurar Redis como un servidor de caché, establezca los siguientes valores como se indica.
maxmemory 256mb
maxmemory-policy allkeys-lru
Esto le dice a Redis que elimine cualquier clave utilizando el algoritmo LRU cuando se alcance la memoria máxima de 256 MB. Puede establecer el valor de memoria según sus requisitos y el servidor que esté utilizando.
Puede establecer una contraseña para que cualquier cliente que necesite Redis deba autenticarse primero. Para hacer eso, establezca una contraseña utilizando la siguiente directiva.
requirepass
Puede encontrar más directivas para cambiar en el archivo de configuración. Una vez que haya terminado, presione Ctrl + X y escriba Y cuando se le solicite guardar el archivo.
Reinicie el servidor Redis para aplicar los cambios.
$ sudo systemctl restart redis
También necesitaremos agregar la regla en nuestro Firewall si desea que los clientes remotos se conecten a él. De lo contrario, puede omitir este paso.
$ sudo ufw allow 6379/tcp
Deberá cambiar el valor en el comando anterior para que coincida con el puerto que eligió en el archivo de configuración anterior.
Instalar Nginx
Ubuntu 20.04 por defecto viene con la última versión Mainline de Nginx (1.17.10). Sin embargo, cambiaremos a usar el repositorio estable oficial de Nginx.
Instale algunos requisitos previos primero.
$ sudo apt install curl gnupg2 ca-certificates lsb-release
Algunos de estos ya están instalados en su sistema.
Agregue el Repositorio de Nginx.
$ echo "deb [arch=amd64] http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" | sudo tee /etc/apt/sources.list.d/nginx.list
$ curl -fsSL https://nginx.org/keys/nginx_signing.key | sudo apt-key add -
Instale Nginx.
$ sudo apt update
$ sudo apt install nginx -y
Verifique si está funcionando correctamente.
$ nginx -v
Debería ver la siguiente salida dependiendo de la versión de Nginx que eligió instalar.
nginx version: nginx/1.18.0
Inicie y habilite Nginx.
$ sudo systemctl start nginx
$ sudo systemctl enable nginx
Abra la dirección IP de su servidor en un navegador para ver la siguiente página. Significa que Nginx está funcionando correctamente.

Configurar Nginx
Configure los directorios donde vivirán los bloques del servidor.
$ sudo mkdir /etc/nginx/sites-available
$ sudo mkdir /etc/nginx/sites-enabled
Cree el directorio donde vivirá su sitio.
$ sudo mkdir /var/www/example.com/html -p
Usando la directiva -p crea directorios padres que no existían antes.
Ejecute el siguiente comando para agregar un archivo de configuración para su sitio.
$ sudo nano /etc/nginx/sites-available/example.com.conf
Pegue el siguiente código en el editor.
server {
listen *:80;
server_name example.com;
root /var/www/example.com/html;
index index.php index.html;
location / {
try_files $uri $uri/ =404;
}
access_log /var/log/nginx/example.com.access.log;
error_log /var/log/nginx/example.com.error.log;
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index index.php;
include fastcgi_params;
}
}
Presione Ctrl + X para cerrar el editor y presione Y cuando se le solicite guardar el archivo.
Este archivo asume que alojaremos example.com en el directorio /var/www/html. Si no va a usar ningún dominio y está configurando su servidor para ser accesible solo a través de la dirección IP/localhost, deberá eliminar la configuración del bloque del servidor correspondiente del archivo nginx.conf, de lo contrario, interferirá con el bloque del servidor que creará.
Active este archivo de configuración vinculándolo al directorio sites-enabled.
$ sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/
Abra el archivo /etc/nginx/nginx.conf para editarlo.
$ sudo nano /etc/nginx/nginx.conf
Pegue las siguientes líneas después de la línea include /etc/nginx/conf.d/*.conf
include /etc/nginx/sites-enabled/*.conf;
server_names_hash_bucket_size 64;
types_hash_max_size 4096;
Presione Ctrl + X para cerrar el editor y presione Y cuando se le solicite guardar el archivo. Pruebe la configuración de Nginx.
$ sudo nginx -t
Debería ver la siguiente salida que indica que su configuración es correcta.
nginx: el archivo de configuración /etc/nginx/nginx.conf tiene una sintaxis correcta
nginx: la prueba del archivo de configuración /etc/nginx/nginx.conf fue exitosa
Recargue el servicio de Nginx.
$ sudo systemctl reload nginx
Configurar PHP-FPM
Abra el archivo /etc/php-fpm.d/www.conf.
$ sudo nano /etc/php/7.4/fpm/pool.d/www.conf
Necesitamos establecer el usuario/grupo Unix de los procesos PHP en nginx. Busque las líneas user=www-data y group=www-data en el archivo y cámbielas a nginx.
...
; Usuario/grupo Unix de procesos
; Nota: El usuario es obligatorio. Si no se establece el grupo, se utilizará el grupo del usuario predeterminado
; RPM: usuario de apache elegido para proporcionar acceso a los mismos directorios que httpd
user = nginx
; RPM: Mantener un grupo permitido para escribir en el directorio de registro.
group = nginx
...
Además, busque las líneas listen.owner=www-data y listen.group=www-data en el archivo y cámbielas a nginx.
listen.owner = nginx
listen.group = nginx
Guarde el archivo presionando Ctrl + X y escribiendo Y cuando se le solicite.
Reinicie el proceso de PHP-fpm.
$ sudo systemctl restart php7.4-fpm
Para probar su configuración de PHP, cree un archivo test.php en la carpeta html.
$ sudo nano /var/www/example.com/html/test.php
Agregue el siguiente contenido y guarde el archivo presionando Ctrl + X y escribiendo Y cuando se le solicite.
Lance http:// en su navegador web y debería ver lo siguiente.

Instalar phpMyAdmin
Instalaremos phpMyAdmin manualmente para nuestro tutorial.
Primero, necesitamos instalar algunos paquetes PHP adicionales para que phpMyAdmin funcione.
$ sudo apt install php-mbstring php-zip php-gd php-json php-curl php-bz2 php-xml
Cambie al directorio /usr/share para descargar e instalar phpMyAdmin.
$ cd /usr/share
Descargue los archivos de phpMyAdmin. (Verifique la última versión en su sitio) Solo instalaremos la versión en inglés.
$ sudo wget https://files.phpmyadmin.net/phpMyAdmin/5.0.2/phpMyAdmin-5.0.2-english.tar.gz
$ tar xvzf phpMyAdmin-5.0.2-english.tar.gz
$ sudo mv phpMyAdmin-5.0.2-english /usr/share/phpmyadmin
$ sudo rm phpMyAdmin*.tar.gz
Otorgue los permisos adecuados a la carpeta de phpMyAdmin.
$ sudo chown -R nginx:nginx phpmyadmin
$ sudo chmod -R 744 phpmyadmin
Configurar phpMyAdmin
Cree el archivo de configuración a partir del archivo de muestra proporcionado con el paquete.
$ sudo cp /usr/share/phpmyadmin/config.sample.inc.php /usr/share/phpmyadmin/config.inc.php
Necesitamos agregar un valor secreto en el archivo de configuración para fines de seguridad y cookies. Use los siguientes comandos para generar y agregar el código.
$ randomBlowfishSecret=$(openssl rand -base64 32)
$ sed -i "s|cfg\['blowfish_secret'\] = ''|cfg['blowfish_secret'] = '$randomBlowfishSecret'|" /usr/share/phpmyadmin/config.inc.php
Para que el servidor web Nginx encuentre y sirva correctamente los archivos de phpMyAdmin, necesitaremos crear un enlace simbólico desde su ubicación real al directorio raíz del documento de Nginx.
Para hacer esto, ejecute el siguiente comando.
$ sudo ln -s /usr/share/phpmyadmin /var/www/example.com/html/phpmyadmin
Su instalación de phpMyAdmin está operativa. Para acceder a ella, simplemente abra http://example.com/phpmyadmin.
Por defecto, esta ubicación predeterminada debe cambiarse, ya que es la ubicación más común que cualquier hacker puede localizar su instalación de phpMyAdmin. Para hacer esto, ejecute el siguiente comando.
$ sudo mv /var/www/example.com/html/phpmyadmin /var/www/example.com/html/sm123
Básicamente, movimos nuestra ubicación de phpMyAdmin a la carpeta sm123. Para acceder a ella, ahora necesitará abrir http://example.com/sm123 en su navegador.
Dado que estamos utilizando unix_authentication con MySQL aquí, no hay usuario root para iniciar sesión a través de phpMyAdmin. Tendrá que crear primero un usuario de MySQL y otorgarle privilegios a las bases de datos para poder usar phpMyAdmin.
Para hacer eso, inicie sesión en el shell de MySQL.
$ sudo mysql
Ahora, pegue los siguientes comandos para crear un nuevo usuario y otorgarle todos los privilegios de la base de datos.
CREATE USER 'user'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'user'@'localhost';
FLUSH PRIVILEGES;
EXIT
Ahora puede iniciar sesión usando este usuario en http://example.com/phpmyadmin.
Configurar Opcache
Si ha estado siguiendo este tutorial, Opcache ya debería estar instalado con PHP. En caso de que no lo esté, puede instalar Opcache simplemente usando el siguiente comando.
$ sudo apt install php7.4-opcache
Verifique que se haya instalado.
$ php -v
PHP 7.4.5 (cli) (construido: 28 de abr 2020 14:49:23) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
con Zend OPcache v7.4.5, Copyright (c), de Zend Technologies
Para cambiar la configuración de Opcache, abra el archivo /etc/php/7.4/fpm/conf.d/10-opcache.ini.
$ sudo nano /etc/php/7.4/fpm/conf.d/10-opcache.ini
Pegue el siguiente código al final del archivo. La siguiente configuración debería ayudarle a comenzar a usar Opcache y generalmente se recomienda como un buen rendimiento.
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
Guarde el archivo presionando Ctrl + X y escribiendo Y cuando se le solicite.
Reinicie su servidor para aplicar la configuración.
$ sudo systemctl restart php7.4-fpm
Instalar SSL a través de Let’s Encrypt
SSL se ha convertido en una parte esencial de cualquier sitio web. Aquí instalaremos SSL utilizando el servicio Let’s Encrypt.
Para eso, primero instale la herramienta Certbot.
$ sudo apt install certbot python3-certbot-nginx
Genere los certificados.
$ sudo certbot --nginx -d example.com
Si es la primera vez que ejecuta certbot en su sistema, se le pedirá una dirección de correo electrónico y que acepte los términos del servicio. También se le preguntará si acepta compartir datos con la fundación EFF, a lo que puede decir que no. Después de hacerlo, certbot se comunicará con los servidores de Let’s Encrypt y ejecutará un desafío para verificar sus dominios.
Si eso tiene éxito, se le preguntará cómo manejar las redirecciones HTTPS.
Por favor, elija si el acceso HTTPS es obligatorio u opcional.
-------------------------------------------------------------------------------
1: Fácil - Permitir tanto el acceso HTTP como HTTPS a estos sitios
2: Seguro - Hacer que todas las solicitudes se redirijan al acceso seguro HTTPS
-------------------------------------------------------------------------------
Seleccione el número apropiado [1-2] y luego [enter] (presione 'c' para cancelar):
Seleccione su opción y presione enter. Sus certificados se crearán y sus archivos de configuración de Nginx se actualizarán con la configuración SSL.
Sus certificados están listos y ahora puede abrir su sitio yendo a https://example.com
Verificar la Auto-Renovación de SSL
Este es el último paso antes de terminar este tutorial.
Verifique el proceso de renovación haciendo una prueba del proceso de renovación.
$ sudo certbot renew --dry-run
Si no recibe errores, significa que está listo. Certbot renovará automáticamente sus certificados por usted. Se le enviará un correo electrónico advirtiéndole sobre la expiración del certificado.
Conclusión
Eso es todo para este tutorial. Su configuración LEMP está completa y puede comenzar a crear y alojar sus sitios web y aplicaciones.
Recibe nuevas publicaciones en tu bandeja de entrada.
No spam. Cancela la suscripción en cualquier momento.