Skip to content

Instantly share code, notes, and snippets.

@oscarhugopaz
Last active November 9, 2025 22:19
Show Gist options
  • Select an option

  • Save oscarhugopaz/4e606c72fb41495385d000f5f5585834 to your computer and use it in GitHub Desktop.

Select an option

Save oscarhugopaz/4e606c72fb41495385d000f5f5585834 to your computer and use it in GitHub Desktop.
Cómo crear un servidor LEMP desde cero

Curso 1: Cómo crear un servidor LEMP desde cero

Descripción

En este curso aprenderás a desplegar un servidor LEMP (Linux, Nginx, MariaDB/MySQL y PHP) desde cero. Usaremos un método sencillo y automatizado con https://lemp.run para instalar y configurar los componentes principales del stack.
Además, exploraremos qué hace exactamente el script de instalación, paso a paso, para que entiendas cómo personalizarlo en tus propios entornos.

Este curso está diseñado para desarrolladores, administradores de sistemas y entusiastas DevOps que quieren montar un servidor LEMP de forma rápida y confiable.


Contenido

  1. Introducción al stack LEMP
  2. Requisitos previos
  3. Instalación automática con lemp.run
  4. Explicando el script paso a paso
  5. Creación de un script en Bash
  6. Conclusión y siguientes paso

Desarrollo

1. Introducción al stack LEMP

  • Qué es LEMP y por qué usarlo
  • Diferencias entre LEMP y LAMP
  • Componentes:
    • Linux (sistema base)
    • Nginx (servidor web)
    • MariaDB/MySQL (base de datos)
    • PHP (lenguaje backend)

2. Requisitos previos

  • Acceso a un servidor Linux con privilegios sudo
  • Conexión a Internet
  • Terminal con curl instalado
  • Conocimientos básicos de comandos en Linux

3. Instalación automática con lemp.run

La forma más rápida de levantar tu servidor es con estos comandos:

# Instalar solo Nginx
curl -fsSL https://lemp.run/install/nginx.sh | sh

# Instalar Nginx, MariaDB y PHP
curl -fsSL https://lemp.run/install/nginx-mariadb-php.sh | sh

# Alternativa: Nginx, MySQL y PHP
curl -fsSL https://lemp.run/install/nginx-mysql-php.sh | sh```

Estos comandos descargan e instalan automáticamente todos los paquetes necesarios según tu distribución de Linux (Debian, RedHat, Arch o Alpine).


4. Explicando el script paso a paso

1. Identificar la distribución de Linux

A continuación, analizaremos el contenido del script nginx-mariadb-php.sh:

#!/bin/bash
# Script para instalar Nginx, MariaDB y PHP en diferentes distribuciones de Linux

echo "Detectando la distribución de Linux..."
if [ -f /etc/debian_version ]; then
    OS="debian"
elif [ -f /etc/redhat-release ]; then
    OS="redhat"
elif [ -f /etc/arch-release ]; then
    OS="arch"
elif [ -f /etc/alpine-release ]; then
    OS="alpine"
else
    echo "Distribución no compatible."
    exit 1
fi

echo "Distribución detectada: $OS"
echo "Instalando Nginx, MariaDB y PHP..."
  • Detecta la distribución de Linux para usar el gestor de paquetes correcto.
  • Soporta Debian/Ubuntu, RedHat/CentOS, Arch y Alpine.

2. Instalación de paquetes según distribución

if [ "$OS" = "debian" ]; then
    sudo apt update -y
    sudo apt install -y nginx mariadb-server php-fpm php-mysql
elif [ "$OS" = "redhat" ]; then
    sudo dnf install -y nginx mariadb-server php php-mysql
elif [ "$OS" = "arch" ]; then
    sudo pacman -Syu --noconfirm nginx mariadb php php-fpm
elif [ "$OS" = "alpine" ]; then
    sudo apk add nginx mariadb php php-mysqli
fi
  • Instala Nginx, MariaDB y PHP según el gestor de paquetes nativo.
  • Incluye extensiones necesarias para conectar PHP con MariaDB/MySQL.
  • También puedes instalar otros paquetes y configurar el servidor para diferentes tipos de aplicaciones:
    • Aplicaciones en Python, usando Gunicorn o Uvicorn detrás de Nginx como reverse proxy.
    • Aplicaciones en JavaScript (Node.js), usando Express, Next.js u otros frameworks.
    • Aplicaciones estáticas (React, Vue, Svelte), servidas directamente desde Nginx sin necesidad de un backend adicional.

3. Habilitar y arrancar servicios

sudo systemctl enable nginx
sudo systemctl start nginx
sudo systemctl enable mariadb
sudo systemctl start mariadb
  • systemctl enable: asegura que los servicios inicien automáticamente al arrancar el servidor
  • systemctl start: inicia los servicios inmediatamente

4. Configuración de Nginx

El script genera un bloque de servidor básico para /etc/nginx/sites-available/default:

server {
    listen 80;
    root /var/www/html;
    index index.php index.html index.htm;

    server_name _;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php-fpm.sock;
    }

    location ~ /\. {
        deny all;
        access_log off;
        log_not_found off;
    }
}
  • Configura Nginx para servir PHP mediante FastCGI
  • Asegura que archivos . no sean accesibles

5. Reiniciar Nginx para aplicar cambios

sudo systemctl restart nginx

5. Creación de un script en Bash

Los scripts de Bash permiten automatizar tareas en Linux, como instalar paquetes, configurar servicios o ejecutar varios comandos en secuencia.
En esta sección aprenderás a crear y ejecutar tu propio script paso a paso.

1. Crear un archivo de script

Primero, crea un archivo con extensión .sh:

nano script.sh

2. Escribir el contenido del script

Todo script debe comenzar con la línea shebang, que indica al sistema que debe usar Bash para interpretarlo:

#!/bin/bash

Luego puedes escribir los comandos que quieras automatizar. Por ejemplo:

echo "Hola mundo"

3. Ejecutar el script

Opción 1: Ejecutar directamente (usando permisos de ejecución)

Asegúrate de que el script tenga permisos de ejecución:

chmod +x script.sh

Ejecuta tu script directamente desde la terminal:

./script.sh
Opción 2: Ejecutar usando explícitamente el intérprete Bash

También puedes ejecutar el script directamente con el comando bash, sin importar los permisos:

bash script.sh

O incluso con una ruta absoluta:

/usr/bin/bash script.sh

Esta forma no requiere chmod +x. Bash abrirá el archivo y lo ejecutará línea por línea, aunque el script no tenga permisos de ejecución.


6. Conclusión y siguientes paso

  • Acabas de desplegar un servidor LEMP funcional en minutos.
  • Comprendiste qué hace el script y cómo puedes modificarlo.
  • Puedes extender esta base para:
    • Deplegar sitios en WordPress, Laravel, Python o JavaScript
    • Configurar certificados SSL (ej. con Let’s Encrypt)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment