Cómo Instalar Linux, Nginx, MySQL, PHP (LEMP) Stack en Ubuntu: Guía Completa
El stack LEMP — un acrónimo para Linux, Nginx, MySQL y PHP — es una de las configuraciones de servidor web más adoptadas para potenciar sitios web dinámicos y aplicaciones web de alto rendimiento. Al combinar la estabilidad inquebrantable de Linux, la velocidad vertiginosa de Nginx, las sólidas capacidades de gestión de datos de MySQL y la versatilidad de PHP, el stack LEMP ofrece un entorno de alojamiento potente, escalable y eficiente en recursos.
Ya sea que estés implementando un blog personal, un sitio web empresarial o una aplicación empresarial compleja, un stack LEMP correctamente configurado te proporciona mejor escalabilidad, tiempos de carga de página más rápidos y gestión eficiente de memoria — especialmente en condiciones de alto tráfico.
Si necesitas una base confiable para ejecutar este stack, AlexHost VPS Hosting proporciona servidores virtuales basados en Linux de alto rendimiento con acceso root completo, dándote control total sobre cada componente de tu entorno LEMP. Combina eso con un Certificado SSL para asegurar tu aplicación desde el primer día.
En esta guía completa, te guiaremos a través de cada paso de la instalación y configuración del stack LEMP completo en un servidor Ubuntu — desde la preparación inicial del sistema hasta probar tu entorno PHP en vivo.
1. Requisitos previos
Antes de comenzar, asegúrate de tener lo siguiente en su lugar:
- Un servidor ejecutando Ubuntu 18.04, 20.04 o 22.04 LTS
- Una cuenta de usuario con privilegios sudo
- Acceso SSH o acceso directo a la terminal de tu servidor
- Un nombre de dominio registrado (opcional pero recomendado para implementaciones en producción — puedes registrar uno a través de AlexHost Registro de Dominios)
> Consejo profesional: Para un entorno limpio y aislado con recursos garantizados, un plan de VPS Hosting es el punto de partida ideal para cualquier implementación LEMP.
2. Actualiza tu sistema
Antes de instalar cualquier paquete, es crítico actualizar tu índice de paquetes y aplicar todas las actualizaciones pendientes. Esto asegura que estés trabajando con las versiones más recientes y seguras de todo el software.
Abre tu terminal y ejecuta:
sudo apt update && sudo apt upgrade -yEste comando actualiza la base de datos de paquetes locales y actualiza todos los paquetes instalados a sus versiones disponibles más recientes.
3. Instala Nginx
Nginx (pronunciado “engine-x”) es un servidor web de alto rendimiento impulsado por eventos y un proxy inverso. A diferencia de Apache, Nginx maneja conexiones concurrentes con consumo mínimo de memoria, lo que lo convierte en la opción preferida para entornos de alto tráfico.
Paso 1: Instala Nginx
sudo apt install nginx -yPaso 2: Inicia y habilita Nginx
Después de la instalación, inicia el servicio Nginx y configúralo para que se lance automáticamente al arrancar el sistema:
sudo systemctl start nginx
sudo systemctl enable nginxPaso 3: Verifica que Nginx esté en ejecución
Comprueba el estado del servicio para confirmar que Nginx está activo:
sudo systemctl status nginxDeberías ver una salida indicando que el servicio está active (running). También puedes abrir un navegador web y navegar a la dirección IP de tu servidor:
http://your_server_ipSi Nginx se está ejecutando correctamente, serás recibido por la página predeterminada “Welcome to nginx!”.
Paso 4: Configura el firewall (si aplica)
Si tienes UFW (Uncomplicated Firewall) habilitado, permite el tráfico HTTP y HTTPS:
sudo ufw allow 'Nginx Full'
sudo ufw status4. Instala MySQL
MySQL es un poderoso sistema de gestión de bases de datos relacionales (RDBMS) de código abierto que sirve como la columna vertebral de datos para la mayoría de aplicaciones web dinámicas, incluyendo WordPress, Joomla y aplicaciones PHP personalizadas.
Paso 1: Instala MySQL Server
sudo apt install mysql-server -yPaso 2: Asegura la instalación de MySQL
Una vez instalado, ejecuta el script de endurecimiento de seguridad integrado. Este script te ayuda a establecer una contraseña raíz fuerte, eliminar usuarios anónimos, deshabilitar el inicio de sesión remoto de raíz y eliminar la base de datos de prueba:
sudo mysql_secure_installationSe te presentará una serie de preguntas. Las respuestas recomendadas para un servidor de producción son:
| Solicitud | Respuesta recomendada |
|---|---|
| ¿Configurar componente VALIDATE PASSWORD? | Sí |
| Nivel de política de validación de contraseña | 2 (STRONG) |
| ¿Eliminar usuarios anónimos? | Sí |
| ¿Deshabilitar inicio de sesión remoto de raíz? | Sí |
| ¿Eliminar base de datos de prueba? | Sí |
| ¿Recargar tablas de privilegios? | Sí |
Paso 3: Verifica que MySQL esté en ejecución
sudo systemctl status mysqlPaso 4: Inicia sesión en MySQL (verificación opcional)
sudo mysql -u root -pIngresa tu contraseña de raíz cuando se te solicite. Escribe exit para salir del shell de MySQL.
5. Instala PHP
PHP (Hypertext Preprocessor) es el lenguaje de scripting del lado del servidor que procesa contenido dinámico y se comunica con MySQL para servir páginas web impulsadas por datos. Al usar Nginx, PHP se maneja a través de PHP-FPM (FastCGI Process Manager), que procesa solicitudes PHP independientemente del servidor web para mejorar el rendimiento.
Paso 1: Instala PHP-FPM y la extensión MySQL
sudo apt install php-fpm php-mysql -yTambién puedes querer instalar extensiones PHP comúnmente utilizadas para una compatibilidad más amplia de aplicaciones:
sudo apt install php-curl php-gd php-mbstring php-xml php-xmlrpc php-zip -yPaso 2: Configura PHP-FPM para seguridad
Abre el archivo de configuración de PHP-FPM. Reemplaza 8.1 con tu versión de PHP instalada (verifica con php -v):
sudo nano /etc/php/8.1/fpm/php.iniLocaliza la directiva cgi.fix_pathinfo y establécela en 0 para prevenir una vulnerabilidad de seguridad crítica:
cgi.fix_pathinfo=0> Por qué importa: Si cgi.fix_pathinfo se establece en 1, PHP intentará ejecutar el archivo más cercano que pueda encontrar si el archivo PHP solicitado no existe. Este comportamiento puede ser explotado por atacantes para ejecutar código arbitrario.
Guarda y cierra el archivo (Ctrl+X, luego Y, luego Enter).
Paso 3: Reinicia PHP-FPM
Aplica los cambios de configuración reiniciando el servicio PHP-FPM:
sudo systemctl restart php8.1-fpm6. Configura Nginx para procesar PHP
Por defecto, Nginx no sabe cómo manejar archivos PHP. Necesitas crear un bloque de servidor (el equivalente de Nginx de un host virtual de Apache) que instruya a Nginx a pasar solicitudes PHP a PHP-FPM para procesamiento.
Paso 1: Crea el directorio raíz web
Crea el directorio donde se almacenarán los archivos de tu sitio web:
sudo mkdir -p /var/www/your_domain
sudo chown -R www-data:www-data /var/www/your_domain
sudo chmod -R 755 /var/www/your_domainReemplaza your_domain con tu nombre de dominio real o un nombre de proyecto descriptivo.
Paso 2: Crea un nuevo bloque de servidor Nginx
Crea un nuevo archivo de configuración de Nginx para tu sitio:
sudo nano /etc/nginx/sites-available/your_domainAñade el siguiente bloque de configuración. Lee cuidadosamente los comentarios en línea — explican qué hace cada directiva:
server {
listen 80;
listen [::]:80;
server_name your_domain www.your_domain; # Replace with your domain or server IP
root /var/www/your_domain; # Document root — where your files live
index index.php index.html index.htm; # Default files to serve
# Handle all requests; return 404 if file not found
location / {
try_files $uri $uri/ =404;
}
# Pass PHP scripts to PHP-FPM for processing
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; # Adjust PHP version as needed
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# Deny access to hidden files (e.g., .htaccess)
location ~ /.ht {
deny all;
}
}> Importante: Reemplaza your_domain con tu nombre de dominio real y ajusta php8.1-fpm.sock para que coincida con tu versión de PHP instalada.
Paso 3: Habilita el bloque de servidor
Crea un enlace simbólico desde sites-available a sites-enabled para activar la configuración:
sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/Para evitar un posible problema de memoria de hash bucket, también es una buena práctica abrir la configuración principal de Nginx y asegurar que la directiva server_names_hash_bucket_size esté sin comentarios:
sudo nano /etc/nginx/nginx.confEncuentra y descomenta:
server_names_hash_bucket_size 64;Paso 4: Prueba la configuración de Nginx
Antes de reiniciar Nginx, siempre prueba la configuración para detectar errores de sintaxis:
sudo nginx -tSi la salida muestra:
nginx: configuration file /etc/nginx/nginx.conf test is successfulEstás listo para proceder.
Paso 5: Reinicia Nginx
Aplica todos los cambios reiniciando el servicio Nginx:
sudo systemctl restart nginx7. Crea y prueba un archivo PHP Info
Para confirmar que Nginx está pasando correctamente las solicitudes PHP a PHP-FPM, crea un archivo de prueba PHP simple en tu raíz de documentos.
Paso 1: Crea el archivo PHP Info
sudo nano /var/www/your_domain/info.phpAñade el siguiente contenido:
<?php
phpinfo();
?>Guarda y cierra el archivo.
Paso 2: Accede a la página PHP Info
Abre tu navegador web y navega a:
http://your_domain/info.phpO, si aún no has configurado un dominio:
http://your_server_ip/info.phpDeberías ver la página de información de PHP — una descripción detallada de tu instalación de PHP, módulos cargados, valores de configuración y variables de entorno. Esto confirma que los tres componentes (Nginx, PHP-FPM y MySQL) están funcionando correctamente juntos.
Paso 3: Elimina el archivo PHP Info (paso crítico de seguridad)
Una vez que hayas confirmado que todo funciona, elimina el archivo info.php inmediatamente. Este archivo expone detalles sensibles de configuración del servidor que podrían ser explotados por actores maliciosos:
sudo rm /var/www/your_domain/info.php8. Próximos pasos: Endurece y optimiza tu stack LEMP
Con tu stack LEMP funcionando, considera los siguientes pasos adicionales para preparar tu servidor para producción:
Habilita HTTPS con un certificado SSL gratuito
Asegura tu sitio con encriptación TLS/SSL usando Certbot y Let’s Encrypt:
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d your_domain -d www.your_domainAlternativamente, explora Certificados SSL de AlexHost para certificados validados comercialmente premium que proporcionan niveles de confianza más altos para aplicaciones comerciales y de comercio electrónico.
Optimiza el rendimiento de Nginx
Añade las siguientes directivas a tu configuración de Nginx para mejorar el rendimiento:
# Enable Gzip compression
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml;
# Enable browser caching for static assets
location ~* .(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
}Configura un usuario MySQL dedicado
Evita usar la cuenta raíz de MySQL para tus aplicaciones. Crea un usuario de base de datos dedicado con privilegios limitados:
CREATE DATABASE your_app_db;
CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'StrongPassword123!';
GRANT ALL PRIVILEGES ON your_app_db.* TO 'app_user'@'localhost';
FLUSH PRIVILEGES;Considera un panel de control para una gestión más fácil
Si prefieres una interfaz gráfica para gestionar tu stack LEMP, hosts virtuales Nginx, bases de datos y cuentas de correo, considera implementar un panel de control. AlexHost ofrece VPS con cPanel y una variedad de otros Paneles de control VPS para simplificar la administración del servidor sin sacrificar el rendimiento o el control.
9. Conclusión
Has instalado y configurado exitosamente un stack LEMP completo (Linux, Nginx, MySQL, PHP) en tu servidor Ubuntu. Aquí hay un resumen rápido de lo que lograste:
- ✅ Nginx instalado, iniciado y
en todos los servicios de hosting