Cómo instalar LEMP en Ubuntu 18.04 LTS

Vamos a ver en este artículo cómo instalar LEMP en Ubuntu 18.04 LTS Bionic Beaver paso a paso, de modo que al final de este tutorial tendrás integrados y funcionando todos sus componentes en tu servidor o VPS Ubuntu. Una pieza imprescindible para servir potentes aplicaciones web.

Antes de instalar LEMP en Ubuntu 18.04 LTS

Para poder seguir esta pequeña guía de instalación LEMP en Ubuntu 18.04 LTS necesitarás pasar estos sencillos requisitos:

  • Una máquina Ubuntu 18.04 LTS Bionic Beaver actualizada.
  • Un usuario con permisos de sudo.
  • Conexión a Internet.

Puedes ir abriendo una terminal de comandos porque esto empieza ya.

Cómo instalar LEMP en Ubuntu 18.04

Vamos a instalar LEMP en Ubuntu 18.04 usando para sus componentes los paquetes disponibles tanto en la propia distribución como en repositorios externos. Por ello, como primer paso actualizaremos las listas de paquetes:

~$ sudo apt update

Repositorios externos

Debido a que Ubuntu 18.04 LTS sólo ofrece la versión 7.2 de PHP es prácticamente obligatorio instalar algún repositorio que nos ofrezca versiones más modernas. Concretamente instalaremos el que nos permite trabajar con las versiones de la 7.0 a la 8.0.

Instalamos algunas herramientas que vamos a necesitar:

~$ sudo apt install -y software-properties-common

E instalamos el repositorio:

~$ sudo add-apt-repository ppa:ondrej/php

Habrá que aceptar:

...
Pulse [ENTRAR] para continuar o Ctrl+C para cancelar la adición.

Es recomendable instalar el repositorio de Nginx del mismo autor (habrá que aceptar igualmente la operación):

~$ sudo add-apt-repository ppa:ondrej/nginx

Hecho esto es el momento de actualizar las listas de paquetes y algunos paquetes ya instalados para los que hay actualizaciones:

~$ sudo apt upgrade -y

En cuanto a la nomenclatura de los paquetes de PHP, incluirán la partícula php7.x ó php8.x según la versión que nos interese. En caso de no indicar versión, usando sólo la partícula php, se estará haciendo referencia a la versión 7.4, que es la que vamos a instalar en este tutorial.

Instalación de los paquetes

Instalaremos PHP como servicio FastCGI con la extensión para MySQL, Nginx y MariaDB como motor de bases de datos, todo ello con el comando apt:

~$ sudo apt install -y php-fpm php-mysql nginx mariadb-server

Cuando se hayan descargado e instalado todos los paquetes y sus dependencias, se habrán creado nuevos servicios en nuestro sistema Ubuntu 18.04, los servicios phpX.X-fpm.service, nginx.service y mariadb.service (observa que el servicio PHP incluye el número de versión en su nombre). También puedes usar la versión más corta de los nombres de estos servicios: phpX.X-fpm, nginx y mariadb.

Los tres servicios arrancan tras la instalación y están habilitados para iniciar de forma automática junto a Ubuntu 18.04. Puedes comprobar en cualquier momento el estado de estos servicios con el comando systemctl status nginx php7.4-fpm mariadb:

como instalar lemp en ubuntu 18.04 lts bionic beaver

Configurar el firewall UFW para LEMP en Ubuntu 18.04

Si tienes activado el firewall UFW en tu sistema Ubuntu 18.04, sería necesario añadir algunas reglas para los servicios de la pila LEMP, sólo si quieres que sean accesibles desde la red.

El primero y más obvio sería el protocolo HTTP estándar:

~$ sudo ufw allow http

Si vas a ofrecer contenido seguro cifrado con certificados SSL, también tendrás que permitir el protocolo HTTPS:

~$ sudo ufw allow https

Y si quieres administrar remotamente el servicio de bases de datos, podrías habilitar también el puerto correspondiente:

~$ sudo ufw allow mysql

Comprobación rápida del servidor web

Para comprobar el funcionamiento del servidor web y, en su caso, la configuración del firewall, podemos acceder desde un navegador indicando como URL la dirección IP o el dominio del servidor Ubuntu 18.04:

instalar lemp en ubuntu 18.04 lts bionic beaver

Cómo configurar LEMP en Ubuntu 18.04

Ya casi está todo hecho, para configurar la pila LEMP en Ubuntu 18.04 LTS sólo revisaremos unos mínimos ajustes para dejarlo todo en perfecto funcionamiento.

El servicio de bases de datos

Para crear bases de datos y usuarios en MariaDB podrás usar el cliente mysql, instalado como dependencia. El único usuario que existe es root y sólo se puede acceder como un usuario de Ubuntu 18.04 con permisos de sudo:

~$ sudo mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 41
Server version: 10.1.47-MariaDB-0ubuntu0.18.04.1 Ubuntu 18.04

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

Ajustes de PHP

Hay que realizar algún ajuste en la configuración de PHP, a través de su archivo de configuración principal, el famoso php.ini:

~$ sudo nano /etc/php/7.4/fpm/php.ini

Por defecto no se configura la directiva date.timezone, responsable de determinar la zona horaria para las aplicaciones de PHP:

...
;date.timezone =
...

Debemos eliminar el carácter ; inicial y darle el valor de la zona horaria que nos interese:

date.timezone = Europe/Madrid

Consulta en http://php.net/date.timezone si no conoces el valor exacto de tu zona horaria.

Además, PHP por defecto no mostrará errores y avisos importantes en el navegador. Eso está bien si tu servidor LEMP está orientado al público, pero si es para desarrollo querrás ver esos mensajes para poder corregir la aplicación. En ese caso necesitas encontrar las siguientes directivas:

...
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
...
display_errors = Off
...
display_startup_errors = Off
...

Y cambiar sus valores por defecto por estos otros:

...
error_reporting = E_ALL
...
display_errors = On
...
display_startup_errors = On
...

Cualquier cambio realizado en php.ini necesitará recargar el servicio PHP-FPM para que tenga efecto:

~$ sudo systemctl reload php7.4-fpm.service

Ajustes de Nginx

El servidor virtual por defecto de Nginx no conecta con el servicio PHP-FPM, así que debemos editar su archivo de configuración:

~$ sudo nano /etc/nginx/sites-enabled/default

Empezaremos editando la directiva index:

...
# Add index.php to the list if you are using PHP
        index index.html index.htm index.nginx-debian.html;
...

Como indica el comentario, debemos añadir el valor index.php a la lista, ya que es el típico archivo índice de las aplicaciones PHP:

...
        index index.php index.html index.htm index.nginx-debian.html;
...

A continuación buscaremos el bloque location relacionado con PHP:

...
        # pass PHP scripts to FastCGI server
        #
        #location ~ \.php$ {
        #       include snippets/fastcgi-php.conf;
        #
        #       # With php-fpm (or other unix sockets):
        #       fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
        #       # With php-cgi (or other tcp sockets):
        #       fastcgi_pass 127.0.0.1:9000;
        #}
...

Podemos observar que está totalmente desactivado, por lo que lo activaremos, pero de las dos directivas fastcgi_pass activaremos la que conecta como socket de Unix:

...
        # pass PHP scripts to FastCGI server
        #
        location ~ \.php$ {
                include snippets/fastcgi-php.conf;

        #       # With php-fpm (or other unix sockets):
                fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
        #       # With php-cgi (or other tcp sockets):
        #       fastcgi_pass 127.0.0.1:9000;
        }
...

Observa que el valor original de la directiva fastcgi_pass que nos interesa está configurado para PHP 7.0, pero la hemos corregido dándole el valor correspondiente para PHP 7.4 (la versión que hemos instalado).

En el caso de trabajar con scripts de PHP con tiempos de ejecución largos, como instaladores web, por ejemplo, añadiremos dentro del bloque anterior también la directiva fastcgi_read_timeout con un tiempo suficiente, expresado en segundos:

...
location ~ \.php$ {
                include snippets/fastcgi-php.conf;

                # With php-fpm (or other unix sockets):
                fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
                fastcgi_read_timeout 180;
                # With php-cgi (or other tcp sockets):
        #       fastcgi_pass 127.0.0.1:9000;
        }
...

Guardados los cambios y cerrado el archivo, debemos recargar el servicio Nginx:

~$ sudo systemctl reload nginx

Probar rápidamente LEMP en Ubuntu 18.04

Con los mínimos ajustes realizados, escribiremos el típico script PHP que nos dará toda la información sobre nuestro sistema LEMP recién instalado en Ubuntu 18.04:

~$ sudo nano /var/www/html/info.php

El script únicamente consistirá en una llamada a la función phpinfo():

<?php phpinfo();

Ahora podemos acceder desde un navegador, añadiendo la ruta /info.php a la dirección IP o dominio de la máquina Ubuntu 18.04:

como configurar el servidor lemp en ubuntu 18.04 lts bionic beaver

Veremos mucha información, desde números de versión, extensiones de PHP cargadas (entre ellas la necesaria para conectar con MariaDB), la configuración de la zona horaria que establecimos, etc.

Ya sólo queda ponernos a desarrollar o a instalar aplicaciones web.

Conclusión

Ahora que sabes cómo instalar y configurar un entorno LEMP en Ubuntu 18.04 LTS Bionic Beaver tienes una gran plataforma para desarrollar o instalar potentes aplicaciones en tu servidor o VPS Ubuntu.

En caso de dudas, preguntas, sugerencias, etc. puedes dejar algún comentario.

¡Apoya este sitio!

¿Te ha servido esta guía de instalación de la pila LEMP en Ubuntu 18.04? Pues si te apetece agradecérnoslo, cualquier mínima contribución al mantemimiento de este sitio es bienvenida, y puedes hacerlo dejando 1 $ de propina con PayPal:

O, si te sientes especialmente agradecido, invitándonos a un café:

¡Gracias!

Valora esta entrada

5/5 - (1 voto)

2 comentarios en «Cómo instalar LEMP en Ubuntu 18.04 LTS»

  1. Muchas gracias por tu tutorial, lo acabo de hacer y todo bien, pero en las páginas en PHP los scripts me aparecen como texto plano, es decir no se interpretan.

    Responder
    • ¡Hola, Eder! ¿Te llega a funcionar la página con la función phpinfo()? Revisa la configuración de PHP en Nginx, ya que hay que hacer un cambio en una línea de nginx.conf, cambiando php7.0-fpm.sock por php7.2-fpm.sock.

      Responder

Deja un comentario