Tú decides qué servicios podemos activar para análisis, personalización y contenido externo.
Utilizamos cookies y tecnologías similares en nuestro sitio web para personalizar el contenido, integrar medios externos y comprender mejor el uso de determinadas secciones.
Cookies necesarias
Estas entradas garantizan funciones básicas como la seguridad, la estabilidad y el procesamiento de formularios.
Tus datos pueden tratarse con tu consentimiento o sobre la base de intereses legítimos. En la configuración de cookies puedes rechazar cada categoría opcional o autorizarla expresamente.
Algunos servicios procesan datos personales en terceros países. Al dar tu consentimiento, también aceptas esta transferencia. Encontrarás más información en nuestra política de privacidad.
Puedes volver a abrir y modificar tu selección en cualquier momento. · 1.0.2
Configurar una pila LEMP en un servidor Linux: desplegar aplicaciones web de alto rendimiento
Descubre cómo configurar una pila LEMP para alojar sitios web dinámicos con PHP en servidores VPS con Linux → Más información
10 de noviembre de 20269 min de lectura1 Visitas0 útil
Introducción
La pila LEMP es una combinación popular de software de código abierto que se instala conjuntamente para alojar fácilmente sitios web dinámicos, con especial atención a los sitios y las aplicaciones PHP. El acrónimo representa: Linux como sistema operativo, "Engine x" (nginx) como servidor web, MySQL como base de datos y, por último, PHP para el procesamiento. En esta guía te mostraremos cómo configurar una pila LEMP en un servidor Linux, con una explicación detallada paso a paso y un ejemplo de un sitio web de lista de tareas.
FAQ
Preguntas frecuentes
Linux como sistema operativo, Engine x (nginx) como servidor web, MySQL como base de datos y PHP para el procesamiento: una combinación popular de software para alojar sitios web dinámicos con PHP.
Ubuntu. Los comandos son idénticos en Debian y deberían ser similares en otras distribuciones, aunque la sintaxis puede variar ligeramente.
Conectarte al servidor mediante SSH y actualizar todos los paquetes con el comando correspondiente (por ejemplo, sudo apt update en Ubuntu/Debian).
Ejecuta sudo apt install nginx. Después, configura las reglas de firewall adecuadas para que se pueda acceder al servidor web desde Internet.
Comentarios
¿Te resultó útil este artículo?
Tus comentarios nos ayudan a priorizar y mejorar los contenidos.
0 de 0 Las valoraciones consideraron útil este artículo.
Ayuda personalizada
¿No te basta con la guía?
Nuestro equipo de soporte de ZAP conoce tu producto. Describe brevemente tu consulta y te ayudaremos personalmente.
Zappy conoce esta guía y te responde directamente en el chat.
Navegación
VPS
Preparación
Primero, conéctate a tu servidor mediante SSH. Si no sabes cómo hacerlo, consulta nuestra guía Primer acceso (SSH).
En esta guía usaremos Ubuntu como distribución de Linux. Los comandos son idénticos en Debian y deberían ser similares en otras distribuciones, aunque la sintaxis puede variar ligeramente. Asegúrate de que haya un sistema operativo instalado y de que estés conectado por SSH.
Como siempre, antes de la instalación, actualiza todos los paquetes con el siguiente comando:
¡Enhorabuena! Has instalado y configurado correctamente la pila LEMP. Como siguiente paso, te recomendamos encarecidamente configurar un dominio y un certificado SSL para que tus datos se transmitan de forma segura. Consulta nuestra guía de Certbot, centrada en el complemento de Nginx, y sigue el proceso de configuración interactivo para obtener rápida y fácilmente un certificado para tu dominio.
Si tienes preguntas o problemas, nuestro equipo de soporte está disponible todos los días; ¡no dudes en ponerte en contacto con nosotros! 🙂
Alojamiento de servidores desde 2,49 € / mes, disponible al instante, con protección DDoS incluida.
La instalación se puede dividir fácilmente en los componentes principales de la pila LEMP, empezando por el servidor web Nginx, seguido de la base de datos MySQL y, por último, PHP. Durante la instalación configuraremos un sitio web de prueba escrito en PHP que accede a la base de datos MySQL. A continuación, el servidor web Nginx procesará y servirá cada solicitud web.
Configurar Nginx
Nginx es el servidor web que procesa las solicitudes web entrantes y envía las respuestas. Instálalo con el siguiente comando:
Code
sudo apt install nginx
Una vez instalado, asegúrate de crear las reglas de firewall adecuadas para que se pueda acceder al servidor web desde Internet. En este ejemplo usaremos el firewall UFW, ya que Nginx tiene una aplicación registrada para él.
Si usas otro firewall, asegúrate de que el puerto 80 (HTTP) esté abierto. Encontrarás más información sobre los firewalls en Linux en nuestra guía Administrar el firewall.
Activa el firewall UFW y crea una regla para SSH:
Code
# Regel für SSH erstellen
sudo ufw allow OpenSSH
# UFW Firewall aktivieren
sudo ufw enable
Atención
¡Asegúrate de haber configurado una regla para SSH si usas UFW! Si no lo haces, no podrás volver a conectarte al servidor por SSH si se interrumpe la sesión actual.
Ahora crea la regla para Nginx y comprueba que las reglas estén configuradas:
Code
# Regel für Nginx erstellen
sudo ufw allow in "Nginx Full"
# UFW Firewall Regeln anzeigen
sudo ufw status
Consejo
Puedes usar el comando ufw app list para ver los perfiles disponibles. En el ejemplo anterior, Nginx Full permite tanto HTTP (puerto 80) como HTTPS (puerto 443).
Deberías ver las reglas Nginx y Nginx (v6) con el estado ALLOW, lo que confirma que el firewall está configurado correctamente. También verás otras reglas que quizá ya hayas configurado, incluida la regla de SSH.
Una vez abierto el firewall para Nginx, comprueba que Nginx funciona. Para ello, abre el navegador e introduce tu dirección IP, por ejemplo: http://[deine_ipadresse]
Si todo funciona correctamente, verás una página de bienvenida predeterminada. Si no es así, comprueba el estado del servicio con: systemctl status nginx
Configurar MySQL
Ahora instalarás y configurarás un servidor MySQL que funcionará como base de datos para almacenar datos relacionales de forma persistente. Instálalo con:
Code
sudo apt install mysql-server
Después de la instalación, recomendamos ejecutar el script de seguridad para proteger el servidor MySQL. Es opcional, pero muy recomendable. Ejecútalo con:
Code
sudo mysql_secure_installation
El script te guiará por la configuración de forma interactiva. Primero, te preguntará si quieres activar la validación de contraseñas. Recomendamos elegir Y para que en el futuro solo se permitan contraseñas seguras y, a continuación, seleccionar MEDIUM con 1 o STRONG con 2.
A continuación, te preguntará si quieres eliminar el usuario anonymous y desactivar el inicio de sesión remoto de root. Por motivos de seguridad, recomendamos confirmar ambas opciones con Y. Así se eliminará el usuario de prueba y solo se podrá acceder a root localmente mediante SSH, lo que reduce los riesgos.
Por último, te preguntará si quieres eliminar la base de datos test y volver a cargar las tablas de permisos. También en este caso recomendamos elegir Y, ya que no necesitas la base de datos de prueba y es necesario volver a cargar las tablas de privilegios para aplicar los cambios.
Ahora comprueba que la base de datos MySQL esté en funcionamiento iniciando sesión con el siguiente comando: sudo mysql -u root. Si todo va bien, aparecerá un mensaje de bienvenida. Puedes salir del shell de MySQL con quit.
Configurar PHP
El último componente de LEMP es PHP. Para Nginx se utiliza el programa externo php-fpm (PHP FastCGI Process Manager). Nginx se configurará para que las solicitudes se reenvíen a php-fpm antes de procesarlas y servirlas.
Instala la versión más reciente de php-fpm y el complemento PHP-MySQL con:
Code
sudo apt install php-fpm php-mysql
Comprueba que la instalación se haya completado correctamente consultando la versión de PHP. Si aparece una versión, PHP funciona correctamente:
Code
php -v
Consejo
Extensiones de PHP
En algunos casos de uso avanzados, quizá necesites extensiones de PHP adicionales. Puedes ver una lista con apt search php- | less.
Usa las teclas de flecha para desplazarte y Q para salir. Para instalar una extensión, solo tienes que ejecutar:
Code
sudo apt install [php_erweiterung] [...]
Puedes instalar varias extensiones a la vez separándolas con espacios.
Crear un sitio web de prueba
Una vez instalados todos los componentes de LEMP, crearemos un sitio web de prueba para mostrar cómo funciona la pila en conjunto y permite alojar un sitio web dinámico. Este paso es opcional, pero resulta útil para comprender cómo configurar tus propios sitios web.
En este ejemplo crearemos una pequeña lista de tareas en PHP que recupera y muestra elementos de una base de datos MySQL. Nginx servirá el sitio web.
Como ejemplo, usaremos el dominio zapdocs.example.com, ya que probablemente en la práctica querrás usar un dominio. Debes crear un registro DNS A para el dominio que apunte a la dirección IP de tu servidor. Encontrarás ayuda al respecto en nuestra guía Registros de dominio.
Información
También puedes trabajar sin un dominio y sustituir [your_domain] por cualquier nombre. En ese caso, accederás al sitio web mediante la dirección IP. Sin embargo, más adelante deberás eliminar la línea server_name del archivo de bloque del servidor.
Configurar Nginx
Normalmente, los servidores web guardan todos los archivos de los sitios web en el directorio /var/www. De forma predeterminada, Nginx tiene allí una carpeta html con una página predeterminada. Para mantener todo organizado, especialmente si alojas varios sitios web, recomendamos crear una carpeta independiente para cada sitio.
Por tanto, crea una nueva carpeta en /var/www/[your_domain]. En nuestro ejemplo, será /var/www/zapdocs.example.com.
Code
sudo mkdir /var/www/[your_domain]
Ahora crea un nuevo archivo de configuración de bloque de servidor de Nginx para este dominio en el directorio sites-available:
Versión de PHP
Importante: sustituye [your_phpversion] por la versión de PHP que tengas instalada. Compruébala con php -v, por ejemplo: PHP 8.3.6 (cli) (built: Mar 19 2025 10:08:38) (NTS).
En este ejemplo sería 8.3, por lo que la línea quedaría así: fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
Este archivo de bloque del servidor gestiona las solicitudes en el puerto 80 (HTTP) y comprueba si la solicitud coincide con el server_name especificado, es decir, con tu dominio. También apunta a la carpeta /var/www/[your_domain] que creaste anteriormente para servir los archivos.
Guarda el archivo y sal de Nano con CTRL + X; luego pulsa Y para confirmar y ENTER.
Activa la configuración creando un enlace simbólico en el directorio sites-enabled:
Si no usas un dominio
Si no usas un dominio, elimina o comenta la línea server_name (añadiendo # delante). También deberías desactivar el bloque de servidor predeterminado con:
Code
sudo unlink /etc/nginx/sites-enabled/default
Recomendamos comprobar la sintaxis con el siguiente comando:
Code
sudo nginx -t
Reinicia Nginx para que los cambios surtan efecto:
Code
sudo systemctl reload nginx
Crear el sitio web
Una vez configurado Nginx, crearemos el sitio web que se servirá. La carpeta está vacía por ahora, así que todavía no se mostrará nada. Crearemos una pequeña lista de tareas, como se ha explicado anteriormente.
Preparar la base de datos
Inicia sesión en tu servidor MySQL:
Code
sudo mysql -u root
Crea una base de datos nueva llamada todowebsite y una tabla todoitems en ella:
Code
# Datenbank erstellen
CREATE DATABASE todowebsite;
# Datenbank auswählen
USE todowebsite;
# Tabelle erstellen
CREATE TABLE todoitems (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
is_completed BOOLEAN DEFAULT FALSE,
creation_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Añade algunos elementos de ejemplo:
Code
INSERT INTO todoitems (name, is_completed) VALUES ('Create ZAP-Docs Guide', 0);
INSERT INTO todoitems (name, is_completed) VALUES ('Buy a ZAP-Hosting Server', 1);
INSERT INTO todoitems (name, is_completed) VALUES ('Join ZAP-Hosting Discord', 0);
INSERT INTO todoitems (name, is_completed) VALUES ('Have a great day!', 0);
Crea un usuario dedicado llamado todo para el sitio web:
Code
# Benutzer erstellen
# Ersetze [your_password] durch dein eigenes Passwort
CREATE USER todo@localhost IDENTIFIED BY '[your_password]';
# Rechte vergeben (alles in einer Zeile kopieren)
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER
ON todowebsite.*
TO todo@localhost;
# Rechte neu laden
FLUSH PRIVILEGES;
Sal del shell de MySQL con quit.
Archivos PHP del sitio web
Ahora crearemos el archivo PHP del sitio de la lista de tareas. Abre el editor Nano:
Code
sudo nano /var/www/[your_domain]/index.php
Añade el siguiente código. El primer bloque de PHP establece la conexión con MySQL.
Importante
Sustituye [your_password] por la contraseña que asignaste al usuario todo.
La parte HTML muestra la lista de tareas recuperando los datos de la base de datos.
Code
<?php
// MySQL-Verbindung vorbereiten
$servername = "localhost";
$username = "todo";
$password = "[your_password]";
$dbname = "todowebsite";
// Verbindung erstellen
$conn = new mysqli($servername, $username, $password, $dbname);
// Verbindung prüfen, bei Fehler abbrechen
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// SQL-Abfrage ausführen und Ergebnis speichern
$sql = "SELECT id, name, is_completed, creation_date FROM todoitems ORDER BY creation_date DESC";
$result = $conn->query($sql);
?>
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>To-Do Liste</title>
</head>
<body>
<h1>Coole To-Do Liste :D</h1>
<p>Für unseren tollen ZAP-Hosting Guide: <a href="https://zap-hosting.com/guides/docs/vserver-linux-lemp-stack">https://zap-hosting.com/guides/docs/vserver-linux-lemp-stack</a></p>
<ul>
<?php
// Prüfen, ob Ergebnisse vorhanden sind
if ($result->num_rows > 0) {
// Durch alle Einträge iterieren
foreach ($result as $entry) {
echo "<li>";
// Name anzeigen, htmlspecialchars schützt vor XSS
echo htmlspecialchars($entry["name"]);
// Status anzeigen
if ($entry["is_completed"]) {
echo " <strong>(Abgeschlossen)</strong>";
} else {
echo " <strong>(Offen)</strong>";
}
// Erstellungsdatum anzeigen
echo " - Erstellungsdatum: " . htmlspecialchars($entry['creation_date']);
echo "</li>";
}
} else {
// Falls keine Einträge vorhanden sind
echo "<li>Keine To-Do Einträge gefunden.</li>";
}
?>
</ul>
</body>
</html>
<?php
// Verbindung schließen
$conn->close();
?>
Guarda el archivo y sal de Nano con CTRL + X; luego pulsa Y y ENTER.
Probar el sitio web
¡Has configurado correctamente un sitio web de prueba con una lista de tareas que utiliza todos los componentes de la pila LEMP!
Ahora deberías poder acceder al sitio web a través del dominio (puerto 80 / http) que definiste en el bloque del servidor, en nuestro ejemplo zapdocs.example.com. El resultado debería ser parecido a esto: