LEMP Stack · 11 min read · Oct 12, 2025
Cómo instalar Nginx con PHP y MySQL (LEMP Stack) en Ubuntu 22.04

El stack de software LEMP es un grupo de software de código abierto que permite a un servidor alojar sitios web y aplicaciones dinámicas escritas en PHP. Es un acrónimo de L inux, Nginx (pronunciado como E ngine-X), M ySQL, y P HP.
Esta guía te mostrará cómo instalar un stack LEMP en un servidor Ubuntu 22.04. También aprenderás a instalar aplicaciones como phpMyAdmin.
Prerrequisitos
- Un servidor que ejecute Ubuntu 22.04.
- Un usuario no root con privilegios sudo.
- El Firewall sin complicaciones (UFW) está habilitado y en funcionamiento.
- Todo está actualizado.
$ sudo apt update && sudo apt upgrade
Paso 1 - Configurar el Firewall
El primer paso antes de instalar cualquier paquete es configurar el firewall para permitir conexiones HTTP y HTTPS.
Verifica el estado del firewall.
$ sudo ufw status
Deberías ver algo como lo siguiente.
Estado: activo
Para Acción Desde
-- ------ ----
OpenSSH PERMITIR En cualquier lugar
OpenSSH (v6) PERMITIR En cualquier lugar (v6)
Permitir puertos HTTP y HTTPS.
$ sudo ufw allow http
$ sudo ufw allow https
Verifica el estado nuevamente para confirmar.
$ sudo ufw status
Estado: activo
Para Acción Desde
-- ------ ----
OpenSSH PERMITIR En cualquier lugar
80/tcp PERMITIR En cualquier lugar
443/tcp PERMITIR En cualquier lugar
OpenSSH (v6) PERMITIR En cualquier lugar (v6)
80/tcp (v6) PERMITIR En cualquier lugar (v6)
443/tcp (v6) PERMITIR En cualquier lugar (v6)
Paso 2 - Instalar PHP
Ubuntu 22.04 viene con PHP 8.1 por defecto. Puedes instalarlo ejecutando el siguiente comando.
$ sudo apt install php-fpm php-cli php-mysqlnd php-mbstring php-xml php-gd
Hemos instalado las extensiones MySQL, CLI, GD, Mbstring y XML de PHP. Puedes instalar cualquier extensión adicional según tus requisitos.
Para mantenerte siempre en la última versión de PHP o si deseas instalar múltiples versiones de PHP, agrega el repositorio de PHP de Ondrej.
Agrega el repositorio de PHP de Ondrej.
$ sudo add-apt-repository ppa:ondrej/php
Ahora, puedes instalar cualquier versión de PHP.
$ sudo apt install php8.0-fpm php8.0-cli
Verifica la versión de PHP instalada.
$ php --version
PHP 8.1.2 (cli) (construido: Jun 13 2022 13:52:54) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.2, Copyright (c) Zend Technologies
con Zend OPcache v8.1.2, Copyright (c), de Zend Technologies
Paso 3 - Instalar MySQL
Ubuntu 22.04 viene con la última versión de MySQL. Puedes instalarlo con un solo comando.
$ sudo apt install mysql-server
Verifica la versión de MySQL.
$ mysql --version
mysql Ver 8.0.29-0ubuntu0.22.04.2 para Linux en x86_64 ((Ubuntu))
Este paso es necesario para las versiones de MySQL 8.0.28 y superiores. Ingresa a la Shell de MySQL.
$ sudo mysql
Ejecuta el siguiente comando para establecer la contraseña para tu usuario root. Asegúrate de que tenga una mezcla de números, mayúsculas, minúsculas y caracteres especiales.
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YourPassword12!';
Sal de la shell.
mysql> exit
Ejecuta el script de instalación segura de MySQL.
$ sudo mysql_secure_installation
Se te pedirá que instales el Componente de Validación de Contraseña. Verifica la fortaleza de las contraseñas utilizadas en MySQL. Presiona Y para instalarlo.
A continuación, se te pedirá que establezcas el nivel de la política de validación de contraseñas. Elige 2 ya que es el más fuerte.
A continuación, ingresa tu contraseña root. Presiona N para rechazar cambiarla.
Presiona Y para eliminar usuarios anónimos, deshabilitar inicios de sesión remotos de root, eliminar la base de datos de prueba y recargar las tablas de privilegios.
Paso 4 - Configurar MySQL
Inicia sesión en la shell de MySQL. Ingresa tu contraseña root cuando se te solicite.
$ sudo mysql -u root -p
Crea una base de datos de ejemplo.
mysql> CREATE DATABASE exampledb;
Crea una cuenta de usuario SQL.
mysql> CREATE USER 'exampleuser'@'localhost' IDENTIFIED BY 'YourPassword2!';
Otorga todos los privilegios en la base de datos al usuario.
mysql> GRANT ALL PRIVILEGES ON exampledb.* TO 'exampleuser'@'localhost';
Actualiza los privilegios del usuario.
mysql> FLUSH PRIVILEGES;
Sal de la shell.
mysql> exit
Volvamos a iniciar sesión en la shell de MySQL usando el nuevo usuario creado.
$ sudo mysql -u exampleuser -p
Crea una tabla de prueba.
mysql> CREATE TABLE exampledb.name_list ( sno INT AUTO_INCREMENT, content VARCHAR(255), PRIMARY KEY(sno) );
Inserta datos de prueba.
mysql> INSERT INTO exampledb.name_list (content) VALUES ('Navjot');
Repite el comando anterior varias veces para agregar más entradas. Ejecuta el siguiente comando para verificar el contenido de la tabla.
mysql> SELECT * FROM exampledb.name_list;
Recibirás la siguiente salida.
+-----+---------+
| sno | content |
+-----+---------+
| 1 | Navjot |
| 2 | Adam |
| 3 | Josh |
| 4 | Peter |
+-----+---------+
4 filas en el conjunto (0.00 sec)
Sal de la shell de MySQL.
mysql> exit
Paso 5 - Instalar Nginx
Ubuntu 22.04 viene con una versión más antigua de Nginx. Para instalar la última versión, necesitas descargar el repositorio oficial de Nginx.
Importa la clave de firma de Nginx.
$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
Agrega el repositorio para la versión estable de Nginx.
$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list
Actualiza los repositorios del sistema.
$ sudo apt update
Instala Nginx.
$ sudo apt install nginx
Verifica la instalación.
$ nginx -v
nginx version: nginx/1.22.0
Paso 6 - Configurar PHP-FPM
Abre php.ini para editar.
$ sudo nano /etc/php/8.1/fpm/php.ini
Para establecer los tamaños de carga de archivos, cambia los valores de las variables upload_max_filesize y post_max_size.
upload_max_filesize = 50M
...
post_max_size = 50M
Configura el límite de memoria de PHP dependiendo de los recursos y requisitos de tu servidor.
memory_limit = 256M
Guarda el archivo presionando Ctrl + X y luego Y cuando se te solicite.
Abre el archivo /etc/php/8.0/fpm/pool.d/www.conf.
$ sudo nano /etc/php/8.0/fpm/pool.d/www.conf
Necesitamos establecer el usuario/grupo Unix de los procesos de PHP a nginx. Encuentra las líneas user=www-data y group=www-data en el archivo y cámbialas a nginx.
...
; Usuario/grupo Unix de los procesos
; Nota: El usuario es obligatorio. Si el grupo no está establecido, se utilizará el grupo del usuario por defecto
; será utilizado.
user = nginx
group = nginx
...
Además, encuentra las líneas listen.owner=www-data y listen.group=www-data en el archivo y cámbialas a nginx.
listen.owner = nginx
listen.group = nginx
Guarda el archivo presionando Ctrl + X y luego Y cuando se te solicite.
Reinicia el proceso de PHP-fpm.
$ sudo systemctl restart php8.1-fpm
Paso 7 - Instalar phpMyAdmin
Descarga el archivo comprimido de phpMyAdmin para el idioma inglés.
$ wget https://files.phpmyadmin.net/phpMyAdmin/5.2.0/phpMyAdmin-5.2.0-english.tar.gz
Crea un directorio público para el sitio.
$ sudo mkdir /var/www/html/example.com -p
Extrae el archivo comprimido en el directorio público.
$ sudo tar -xzvf phpMyAdmin-5.2.0-english.tar.gz -C /var/www/example.com
Cambia al directorio público.
$ cd /var/www/html/example.com
Cambia el nombre del directorio extraído a algo poco obvio para mejorar la seguridad.
$ sudo mv phpMyAdmin-5.2.0-english sm175
Paso 8 - Configurar phpMyAdmin
Copia el archivo de configuración de muestra.
$ sudo cp sm175/config.sample.inc.php sm175/config.inc.php
Abre el archivo de configuración para editar.
$ sudo nano sm175/config.inc.php
Encuentra la línea $cfg['blowfish_secret'] = ''; y ingresa una cadena aleatoria de 32 caracteres para la autenticación basada en cookies.
Puedes usar el generador de blowfish en línea de phpSolved o hacerlo a través de la línea de comandos.
Copia el valor y pégalo como se muestra.
$cfg['blowfish_secret'] = 'Tc/HfLPBOAPxJ-rhQP}HJoZEK69c3j:m';
Guarda el archivo presionando Ctrl + X y luego Y cuando se te solicite.
Cambia la propiedad del sitio y de phpMyAdmin al servidor Nginx.
$ sudo chown -R nginx:nginx /var/www/html/example.com
Elimina el directorio de configuración de phpMyAdmin.
$ sudo rm -rf /var/www/html/example.com/sm175/setup
Paso 9 - Configurar Opcache
Opcache es el sistema de caché de PHP. Funciona guardando el bytecode de script precompilado en la memoria, por lo que cada vez que un usuario visita una página, se carga más rápido. Opcache está instalado por defecto. Para verificar, revisa la versión de PHP.
$ php --version
PHP 8.1.2 (cli) (construido: Jun 13 2022 13:52:54) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.2, Copyright (c) Zend Technologies
con Zend OPcache v8.1.2, Copyright (c), de Zend Technologies
Esto nos dice que Opcache está instalado y disponible. En caso de que no aparezca aquí, puedes instalarlo manualmente ejecutando el siguiente comando.
$ sudo apt install php-opcache
Para cambiar la configuración de Opcache, abre el archivo /etc/php/8.1/fpm/conf.d/10-opcache.ini para editar.
$ sudo nano /etc/php/8.1/fpm/conf.d/10-opcache.ini
La siguiente configuración debería ayudarte a comenzar a usar Opcache y se recomienda generalmente para un buen rendimiento. Puedes habilitar una configuración descomentándola al eliminar el punto y coma al frente.
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
Guarda el archivo presionando Ctrl + X y luego Y cuando se te solicite.
Paso 10 - Instalar Certbot para SSL
Necesitamos instalar Certbot para generar certificados SSL gratuitos ofrecidos por Let’s Encrypt.
Puedes instalar Certbot usando el repositorio de Ubuntu o obtener la última versión usando la herramienta Snapd. Usaremos la versión de Snapd.
Ubuntu 22.04 viene con Snapd instalado por defecto. Ejecuta los siguientes comandos para asegurarte de que tu versión de Snapd esté actualizada.
$ sudo snap install core
$ sudo snap refresh core
Instala Certbot.
$ sudo snap install --classic certbot
Usa el siguiente comando para asegurarte de que el comando Certbot se pueda ejecutar creando un enlace simbólico al directorio /usr/bin.
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
Paso 11 - Probar un sitio de demostración
Crear el sitio
Crea y abre una página de prueba para editar.
$ sudo nano /var/www/html/example.com/index.php
Pega el siguiente código en él.
Lista de Miembros";
foreach($db->query("SELECT content FROM $table") as $row) {
echo "- " . $row['content'] . "
";
}
echo "
";
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "
";
die();
}
Guarda el archivo presionando Ctrl + X y luego Y cuando se te solicite.
Crear un Certificado SSL
Ejecuta el siguiente comando para generar un Certificado SSL.
$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d example.com
El comando anterior descargará un certificado en el directorio /etc/letsencrypt/live/example.com en tu servidor.
Genera un certificado de grupo Diffie-Hellman.
$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096
Abre el archivo /etc/letsencrypt/renewal/example.com.conf para editar.
$ sudo nano /etc/letsencrypt/renewal/example.com.conf
Pega el siguiente código al final.
pre_hook = systemctl stop nginx
post_hook = systemctl start nginx
Guarda el archivo presionando Ctrl + X y luego Y cuando se te solicite.
Hemos generado el certificado SSL utilizando la opción independiente de Certbot. Ejecuta su servidor web para crear el certificado, lo que significa que Nginx debe estar apagado durante la renovación. Los comandos pre_hook y post_hook se ejecutan antes y después de la renovación para apagar y reiniciar automáticamente el servidor Nginx, por lo que no se requiere intervención manual.
Para verificar si la renovación de SSL está funcionando correctamente, haz una prueba del proceso.
$ sudo certbot renew --dry-run
Si no ves errores, estás listo. Tu certificado se renovará automáticamente.
Configurar Nginx
Crea y abre el archivo /etc/nginx/conf.d/example.conf para editar.
$ sudo nano /etc/nginx/conf.d/example.conf
Pega el siguiente código en él.
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name example.com;
access_log /var/log/nginx/example.com.access.log;
error_log /var/log/nginx/example.com.error.log;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
ssl_session_timeout 5m;
ssl_session_cache shared:MozSSL:10m;
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
ssl_stapling on;
ssl_stapling_verify on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
root /var/www/html/example.com;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
# Pasar scripts PHP al servidor FastCGI
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
# forzar HTTPS
server {
listen 80;
listen [::]:80;
server_name example.com;
return 301 https://$host$request_uri;
}
Guarda el archivo presionando Ctrl + X y luego Y cuando se te solicite.
Abre el archivo /etc/nginx/nginx.conf para editar.
$ sudo nano /etc/nginx/nginx.conf
Agrega la siguiente línea antes de la línea include /etc/nginx/conf.d/*.conf;.
server_names_hash_bucket_size 64;
Guarda el archivo presionando Ctrl + X y luego Y cuando se te solicite.
Verifica tu configuración de Nginx.
$ sudo nginx -t
Si no ves errores, significa que estás listo para continuar. Inicia el servidor Nginx.
$ sudo systemctl start nginx
Carga tu sitio web visitando https://example.com en tu navegador y verás la siguiente página.

Puedes acceder a tu instalación de phpMyAdmin visitando la URL https://example.com/sm175 en tu navegador. Puedes ingresar tu usuario root o el usuario creado anteriormente para iniciar sesión.
Conclusión
Esto concluye nuestro tutorial donde aprendiste a configurar un stack LEMP en un servidor Ubuntu 22.04 y crear un sitio de demostración. Si tienes alguna pregunta, publícalas en los comentarios a continuación.
Recibe nuevas publicaciones en tu bandeja de entrada.
No spam. Cancela la suscripción en cualquier momento.