Cómo instalar un entorno LEMP en Ubuntu 20.04 Server/Desktop

Este tutorial te mostrará cómo instalar la pila LEMP (Nginx, MariaDB y PHP7.4) en Ubuntu 20.04. Un entorno de software es un conjunto de herramientas de software agrupadas. LEMP significa Linux, Nginx (Engine-X), MariaDB/MySQL y PHP, todos ellos de código abierto y de uso gratuito. Es la pila de software más común que impulsa sitios y aplicaciones web dinámicas. Linux es el sistema operativo; Nginx es el servidor web; MariaDB/MySQL es el servidor de bases de datos y PHP es el lenguaje de scripting del lado del servidor responsable de generar páginas web dinámicas.

Cómo instalar un entorno LEMP en Ubuntu 20.04 Server/Desktop

Requisitos previos para instalar un entorno LEMP

Para seguir este tutorial, necesitas un sistema operativo Ubuntu 20.04 en tu ordenador local o en un servidor remoto.

Si estás buscando un VPS (Servidor Privado Virtual), puedes contratar el tuyo en CONTABO o en OVH.

Si necesitas configurar una pila LEMP con un nombre de dominio, recomiendo la compra de nombres de dominio de NameCheap porque el precio es bajo y dan protección de la privacidad whois libre para la vida.

Paso 1: Actualizar los paquetes de software

Antes de instalar la pila LEMP, es una buena práctica actualizar el repositorio y los paquetes de software ejecutando los siguientes comandos en su sistema operativo Ubuntu 20.04.

sudo apt update

sudo apt upgrade

Paso 2: Instalar el servidor web Nginx

Nginx es un servidor web de alto rendimiento y muy popular en estos días. También se puede utilizar como un proxy inverso y un servidor de caché. Introduzca el siguiente comando para instalar el servidor web Nginx.

sudo apt install nginx

Una vez instalado, podemos habilitar Nginx para que se inicie automáticamente en el arranque ejecutando el siguiente comando.

sudo systemctl enable nginx

A continuación, inicia

sudo systemctl start nginx

Ahora comprueba su estado.

sudo systemctl status nginx

Respuesta:

● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2020-04-10 14:11:43 UTC; 3s ago
       Docs: man:nginx(8)
    Process: 8533 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 8545 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 8549 (nginx)
      Tasks: 3 (limit: 9451)
     Memory: 3.9M
     CGroup: /system.slice/nginx.service
             ├─8549 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
             ├─8550 nginx: worker process
             └─8551 nginx: worker process

Enabled” indica que el auto-inicio en el arranque está habilitado y podemos ver que Nginx se está ejecutando. También puedes ver cuánta RAM está usando Nginx en la salida. Si el comando anterior no sale inmediatamente después de la ejecución. Usted necesita presionar “q” para hacer que salga.

Compruebe la versión de Nginx.

nginx -v

Respuesta:

nginx version: nginx/1.17.9 (Ubuntu)

Ahora escribe la dirección IP pública de tu servidor Ubuntu 20.04 en la barra de direcciones del navegador. Deberías ver la página web “Welcome to Nginx”, lo que significa que el servidor web Nginx está funcionando correctamente. Si estás instalando LEMP en tu ordenador Ubuntu 20.04 local, entonces escribe 127.0.0.1 o localhost en la barra de direcciones del navegador.

Si la conexión se rechaza o no se completa, es posible que haya un cortafuegos que impida las solicitudes entrantes al puerto TCP 80. Si utiliza el cortafuegos iptables, debe ejecutar el siguiente comando para abrir el puerto TCP 80.

sudo iptables -I INPUT -p tcp --dport 80 -j ACCEPT

Si utilizas el cortafuegos UFW, ejecuta este comando para abrir el puerto TCP 80.

sudo ufw allow http

Por último, tenemos que hacer que www-data (usuario Nginx) sea el propietario del directorio web. Por defecto, es propiedad del usuario root.

sudo chown www-data:www-data /usr/share/nginx/html -R

Paso 3: Instalar el servidor de bases de datos MariaDB

MariaDB es un sustituto directo de MySQL. Ha sido desarrollado por antiguos miembros del equipo de MySQL a quienes les preocupa que Oracle pueda convertir MySQL en un producto de código cerrado. Introduce el siguiente comando para instalar MariaDB en Ubuntu 20.04.

sudo apt install mariadb-server mariadb-client

Una vez instalado, el servidor MariaDB debería iniciarse automáticamente. Utiliza systemctl para comprobar su estado.

systemctl status mariadb

Respuesta:

● mariadb.service - MariaDB 10.3.22 database server
     Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2020-04-10 14:19:16 UTC; 18s ago
       Docs: man:mysqld(8)
             https://mariadb.com/kb/en/library/systemd/
   Main PID: 9161 (mysqld)
     Status: "Taking your SQL requests now..."
      Tasks: 31 (limit: 9451)
     Memory: 64.7M
     CGroup: /system.slice/mariadb.service
             └─9161 /usr/sbin/mysqld

Si no se está ejecutando, inícialo con este comando:

sudo systemctl start mariadb

Para que MariaDB se inicie automáticamente en el arranque, ejecuta

sudo systemctl enable mariadb

Ahora ejecuta el script de seguridad posterior a la instalación.

sudo mysql_secure_installation

Cuando te pida que introduzcas la contraseña de root de MariaDB, pulsa la tecla Enter ya que la contraseña de root aún no está establecida. A continuación, introduce una para establecer la contraseña de root para el servidor MariaDB.

A continuación, puedes pulsar Enter para responder a todas las preguntas restantes, lo que eliminará el usuario anónimo, deshabilitará el inicio de sesión de root remoto y eliminará la base de datos de prueba. Este paso es un requisito básico para la seguridad de la base de datos MariaDB. (Observe que Y está en mayúsculas, lo que significa que es la respuesta por defecto).

Por defecto, el paquete MaraiDB en Ubuntu utiliza unix_socket para autenticar el inicio de sesión del usuario, lo que básicamente significa que puede utilizar el nombre de usuario y la contraseña del sistema operativo para iniciar sesión en la consola de MariaDB. Así que puede ejecutar el siguiente comando para iniciar sesión sin proporcionar la contraseña de root de MariaDB.

sudo mariadb -u root

Para salir, ejecuta

exit;

Compruebe la información de la versión del servidor MariaDB.

mariadb --version

Como puedes ver, hemos instalado MariaDB 10.3.22.

mariadb  Ver 15.1 Distrib 10.3.22-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

Paso 4: Instalar PHP7.4

PHP7.4 está incluido en el repositorio de Ubuntu 20.04 y tiene una pequeña mejora de rendimiento respecto a PHP7.3. Introduzca el siguiente comando para instalar PHP7.4 y algunas extensiones comunes.

sudo apt install php7.4 php7.4-fpm php7.4-mysql php-common php7.4-cli php7.4-common php7.4-json php7.4-opcache php7.4-readline php7.4-mbstring php7.4-xml php7.4-gd php7.4-curl

Las extensiones de PHP son comúnmente necesarias para los sistemas de gestión de contenidos (CMS) como WordPress. Por ejemplo, si tu instalación carece de php7.4-xml, entonces algunas de las páginas de tu sitio de WordPress pueden estar en blanco y puede encontrar un error en el registro de errores de Nginx como:

PHP message: PHP Fatal error:  Uncaught Error: Call to undefined function xml_parser_create()

La instalación de estas extensiones de PHP asegura que su CMS funcione sin problemas. Ahora inicia

sudo systemctl start php7.4-fpm

Activar el inicio automático en el arranque.

sudo systemctl enable php7.4-fpm

Comprueba el estado:

systemctl status php7.4-fpm

Ejemplo de resultado:

● php7.4-fpm.service - The PHP 7.4 FastCGI Process Manager
     Loaded: loaded (/lib/systemd/system/php7.4-fpm.service; enabled; vendor pr>
     Active: active (running) since Fri 2020-04-10 14:40:26 UTC; 12s ago
       Docs: man:php-fpm7.4(8)
    Process: 21019 ExecStartPost=/usr/lib/php/php-fpm-socket-helper install /ru>
   Main PID: 21012 (php-fpm7.4)
     Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req>
      Tasks: 3 (limit: 9451)
     Memory: 9.4M
     CGroup: /system.slice/php7.4-fpm.service
             ├─21012 php-fpm: master process (/etc/php/7.4/fpm/php-fpm.conf)
             ├─21017 php-fpm: pool www
             └─21018 php-fpm: pool www

Si el comando anterior no sale inmediatamente después de ejecutarse. Debe pulsar “q” para que salga.

Paso 5: Crear un bloque de servidor en Nginx

Un bloque de servidor Nginx es como un host virtual en Apache. No usaremos el bloque de servidor por defecto porque es inadecuado para ejecutar código PHP y si lo modificamos, se convierte en un lío. Así que elimina el symlink por defecto en el directorio sites-enabled ejecutando el siguiente comando. (Todavía está disponible como /etc/nginx/sites-available/default).

sudo rm /etc/nginx/sites-enabled/default

A continuación, utiliza un editor de texto de línea de comandos como Nano para crear un nuevo archivo de bloque del servidor en el directorio /etc/nginx/conf.d/.

sudo nano /etc/nginx/conf.d/default.conf

Pegue el siguiente texto en el archivo. El siguiente fragmento hará que Nginx escuche en el puerto 80 de IPv4 y en el puerto 80 de IPv6 con un nombre de servidor de captura.

server {
  listen 80;
  listen [::]:80;
  server_name _;
  root /usr/share/nginx/html/;
  index index.php index.html index.htm index.nginx-debian.html;

  location / {
    try_files $uri $uri/ /index.php;
  }

  location ~ \.php$ {
    fastcgi_pass unix:/run/php/php7.4-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
    include snippets/fastcgi-php.conf;
  }

 # A long browser cache lifetime can speed up repeat visits to your page
  location ~* \.(jpg|jpeg|gif|png|webp|svg|woff|woff2|ttf|css|js|ico|xml)$ {
       access_log        off;
       log_not_found     off;
       expires           360d;
  }

  # disable access to hidden files
  location ~ /\.ht {
      access_log off;
      log_not_found off;
      deny all;
  }
}

Guarda y cierra el archivo. (Para guardar un archivo en el editor de texto Nano, pulsa Ctrl+O, y luego pulsa Enter para confirmar. Para salir, pulse Ctrl+X).

A continuación, prueba las configuraciones de Nginx.

sudo nginx -t

Si la prueba es exitosa, reinicia Nginx.

sudo systemctl reload nginx

Paso 6: Probar PHP

Para probar PHP-FPM con el servidor web Nginx, necesitamos crear un archivo info.php en el directorio webroot.

sudo nano /usr/share/nginx/html/info.php

Pega el siguiente código PHP en el archivo.

<?php phpinfo(); ?>

Guarde y cierre el archivo. Ahora, en la barra de direcciones del navegador, introduzca server-ip-address/info.php. Sustituye dirección-ip-servidor por tu IP real. Si sigues este tutorial en tu ordenador local, escribe 127.0.0.1/info.php o localhost/info.php.

Debería ver la información de PHP de su servidor. Esto significa que los scripts PHP pueden ejecutarse correctamente con el servidor web Nginx.

¡Enhorabuena! Has instalado con éxito Nginx, MariaDB y PHP7.4 en Ubuntu 20.04. Para la seguridad de su servidor, debe eliminar el archivo info.php ahora para evitar que los hackers lo vean.

sudo rm /usr/share/nginx/html/info.php

Consejo para la resolución de problemas

Si te encuentras con errores, puedes comprobar el registro de errores de Nginx (/var/log/nginx/error.log) para averiguar qué está mal.

Reinicio automático de Nginx

Si por alguna razón tu proceso Nginx es eliminado, necesitas ejecutar el siguiente comando para reiniciarlo.

sudo systemctl restart nginx

En lugar de escribir manualmente este comando, podemos hacer que Nginx se reinicie automáticamente editando la unidad de servicio nginx.service systemd. Para anular la configuración del servicio systemd por defecto, creamos un directorio separado.

sudo mkdir -p /etc/systemd/system/nginx.service.d/

A continuación, crea un archivo en este directorio.

sudo nano /etc/systemd/system/nginx.service.d/restart.conf

Añade las siguientes líneas en el archivo, que harán que Nginx se reinicie automáticamente 5 segundos después de detectar un fallo. El valor predeterminado de RetartSec es 100ms, que es demasiado pequeño. Nginx puede quejarse de que “la solicitud de inicio se repite demasiado rápido” si RestartSec no es lo suficientemente grande.

[Service]
Restart=always
RestartSec=5s

Guarda y cierra el archivo. A continuación, vuelve a cargar systemd para que los cambios surtan efecto.

sudo systemctl daemon-reload

Para comprobar si esto funciona, mata el proceso Nginx con:

sudo pkill nginx

A continuación, comprueba el estado de Nginx. Encontrará que Nginx se reinicia automáticamente.

systemctl status nginx

Ya tienes tu entorno LEMP funcionando, ya estas listo para hacer una instalación de Mautic, por ejemplo. Yo prefiero usar un entorno Apache para instalar WordPress pero podrías hacerlo también con una pila LEMP.

¡Que tengas un Ingenioso día!

¡que tengas un ingenioso día!

Contrata tu plan Ingenios@ de Sistemas por 5€ al mes y responderé a todas tus preguntas sobre tecnología en el menor tiempo posible. Pasa a formar parte de la comunidad Ingenios@s de Sistemas y disfruta de contenido exclusivo y aprende sobre sistemas Open Source, Blockchain, SmarContract, Web3, Inteligencia Artificial y Reaidad Virtual, súbete al tren de la Revolución 4.0

Si quieres estar al día y no perderte nada Suscribete al Podcast Ingenios@s de Sistemas, un episodio diario que te mantendrá informado y formado en esta vertiginosa carrera.

Deja un comentario

Share to...