8.2 La Pila de Software (LEMP Stack)
¡Prepárate!
- Entenderás el significado del acrónimo corporativo global LEMP. - Sabrás
conectar Nginx a un ejecutor CGI invisible capaz de leer código pesado PHP
(
php-fpm). - Instalarás un motor de SQL Relacional abierto (MariaDB). - Auditarás las colisiones de comunicación usandojournalctl.
1. Dejando atrás la edad de piedra
Sección titulada “1. Dejando atrás la edad de piedra"En la lección anterior encendimos un Nginx capaz de mostrar un solitario archivo index.html.
El problema en 2026 es que ninguna página corporativa real usa HTML estático crudo dictado a mano. Las empresas emplean Gestores de Contenido monstruosos (como WordPress) o ERPs (como Odoo), los cuales están programados puramente usando Lenguajes Dinámicos (como PHP o Python) y almacenan millones de usuarios en Bases de Datos relacionales estructuradas.
Al ecosistema Sysadmin mundial estándar conformado por Linux, Engine-X (Nginx), MariaDB y PHP se le conoce corporativamente como la infraestructura Stack LEMP.
2. El Procesador de Lenguaje (PHP-FPM)
Sección titulada “2. El Procesador de Lenguaje (PHP-FPM)"Nginx es un genio sirviendo archivos pasivos a la red (como fotos o HTML), pero es un inútil intentando entender código de lenguajes de programación.
Si un usuario intenta visitar http://empresa.com/login.php, Nginx no tiene ni ideal de procesarlo y, por defecto, se rinde y ofrece al usuario la “descarga fría” de todo el código de programación interno a su disco local. ¡Un agujero de seguridad brutal!
Para solucionar esto existen los FPM (FastCGI Process Managers). Básicamente son demonios de sistema (systemctl) que corren independientemente escondidos al fondo escuchando órdenes.
# Instalamos la navaja suiza de ejecución rápida asincrónica php-fpmsudo apt install php-fpmConfigurando a Nginx para que delegue peticiones
Sección titulada “Configurando a Nginx para que delegue peticiones"A Nginx hay que instruirle para que derive el trabajo difícil a nuestro recién instalado obrero de fondo. En el archivo sites-available/empresa.com añadiremos un bloque “Location” de francotirador especial que dice: “En el instante en el que veas un archivo con terminación .php, ni lo mires, envíaselo por un conducto TCP local a nuestro amigo FPM instalado ahora, él te devolverá el HTML masticado”.
server { listen 80; server_name mi-empresa.com; root /var/www/mi-empresa.com/html; # Decimos que prefiera correr index.php primero si existe index index.php index.html;
# ¡El conducto Socket maestro! location ~ \.php$ { include snippets/fastcgi-php.conf; # Lanzando el balón de trabajo al socket unix ultrarrápido del obrero FPM versión 8 fastcgi_pass unix:/var/run/php/php8.2-fpm.sock; }}3. El Corazón Transaccional (MariaDB)
Sección titulada “3. El Corazón Transaccional (MariaDB)"El último pilar de la Pila LEMP recae sobre el almacenamiento elástico. Sustituiremos la obsoleta deidad original (MySQL) por su alternativa comunitaria Open Source superior, estandarizada actualmente en los servidores de todo el globo terráqueo: MariaDB.
# Lo bajará y arrancará el servicio automáticamentesudo apt install mariadb-server
# El script LFCS que CIERRA puertas vulnerables de fábricasudo mariadb-secure-installation(Ese maravilloso script de aseguramiento te obligará interactivamente a colocarle clave al administrador maestro (“Root”), borrará bases de datos “Test” inútiles y prohibirá brutalmente que alguien averigüe tu IP pública y se conecte a la base de datos sin estar logueado localmente).
4. Auditoría Post-Despliegue
Sección titulada “4. Auditoría Post-Despliegue"La complejidad se multiplica al apilar servicios dispares (Nginx, PHP, y MariaDB), todos atados fuertemente por sus permisos del Módulo 2 al usuario maestro estandarizado de la web www-data.
Si tras realizar el ensamblado en el examen LFCS del Stack el navegador vomita una fatal Página Blanca de la Muerte (Error HTTP 500), ¡jamás toques botones ni te inventes soluciones rezando!
- Pídele al demonio Web que te narre los horrores que ha vivido:
journalctl -u nginx --no-pager | tail -n 20 - Ve al diario sangriento local que guardan los obreros y revísalo con los comandos clásicos:
tail -f /var/log/nginx/error.log
Encontrarás respuestas precisas como “php-fpm carece del driver mariadb-php para conectar al corazón del SQL” o “Permiso denegado al abrir archivo var/www/…”.
Comprueba tus conocimientos
Sección titulada “Comprueba tus conocimientos"-
Es de noche. Has desplegado el Stack LEMP. Echas a andar Nginx subiendo tu archivo de programación secreta
calculos-financieros.phpal publichtml web. Como eres un purista, ignoraste instalar y activar el eslabón obrero mágicophp-fpmo no incluiste su respectivo bloque traductor especial _location fastcgi_pass en el archivo “sites-available”. Un cliente real carga por primera vez la recien nacida URL desde Mozilla Firefox. ¿Cual es el estrepitoso y dantesco resultado visible desencadenado por el navegador según el protocolo estandarizado? -
Hemos inyectado MariaDB. Se espera que corra eternamente como un banco. Un programador se enfadó contigo en Slack exigiéndote que configures mediante UFW un
allow 3306puro abierto de MariaDB para la IP de su casa. Sin embargo el servidor deniega su conexión desde fuera incesantemente. Descubres asombrado que MariaDB ni siquiera instaló un puerto global atado arrojandoss -tulpny mostrando “127.0.0.1:3306” por bandera. Tú no programaste eso. ¿Quién le ató las manos y cortó el cuello remoto de la base de datos por seguridad de tu infraestructura? -
Conoces profundamente la anatomía sysadmin LFCS. Cuando descargas una herramienta corporativa gigantesca (como un CRM de facturación), te regalan centenares de miles de archivos PHP revueltos en descargas comprimidas tarballs. Si tú las descomprimes burdamente todas con tu usuario personal local logueado desde tu casa hacia el trono maestro de despacho web ubicado en
/var/www/crm/htmlmediante un simple arrastre… ¿qué orden correctiva OBLIGATORIA global te quedará por dictar sobre todo el enjambre arbóreo de carpetas antes de esperar que el FPM y Nginx arranquen mágicamente los procesamientos dinámicos sin estallar con “Denials 403”?