En este artículo veremos cómo instalar una pila LEMP en Debian 9 Stretch paso a paso, de modo que el conjunto formado por Nginx, PHP y MariaDB/MySQL quede perfectamente integrado en tu servidor o VPS Debian para tus desarrollos o soporte de complejas aplicaciones web.
Tabla de contenidos
Antes de instalar LEMP en Debian 9 Stretch
Si quieres completar esta guía de instalación y configuración LEMP en Debian 9 Stretch necesitas satisfacer algunos aspectos básicos:
- Una máquina Debian 9 Stretch lo más actualizada posible.
- Un usuario con privilegios de sudo o el propio root.
- Acceso a Internet.
Para crear el entorno o pila LEMP en tu sistema Debian 9 Stretch podrías optar por MariaDB o MySQL, ya que ambas opciones son perfectamente válidas, pero en esta guía nos decantaremos por MariaDB.
Por otro lado, teniendo en cuenta que los repositorios oficiales de Debian 9 sólo ofrecen PHP 7.0, nos vemos obligados a instalar un repositorio adicional para disponer de versiones más actuales.
Cómo instalar LEMP en Debian 9 Stretch
Antes de instalar la pila LEMP en Debian 9 Stretch vamos a añadir el repositorio de sury.org para poder tener las últimas versiones de PHP en el sistema. Al tratarse de un repositorio disponible a través de conexión segura es necesario instalar el transporte HTTPS para apt:
~$ sudo apt -y install apt-transport-https
Además es un repositorio firmado, por lo que instalaremos la clave pública:
~$ sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
Creamos la configuración del repositorio en un archivo aparte:
~$ sudo nano /etc/apt/sources.list.d/php-sury.org.list
Y añadimos la única fuente de paquetes:
deb https://packages.sury.org/php/ stretch main
Es el momento de actualizar las listas de paquetes:
~$ sudo apt update
Seguramente sea necesario actualizar algún paquete ya instalado:
~$ sudo apt upgrade -y
Ya podemos instalar los paquetes necesarios para la pila LEMP en Debian 9. Si quieres otra versión de los paquetes cambia en sus nombres el prefijo por php7.4- por lo que corresponda:
~$ sudo apt -y install nginx php7.4-fpm php7.4-mysql mariadb-server
En el nuevo repositorio los nombres que empiezan por php- se refieren a la última versión estable de PHP, la 8.0 en el momento de actualizar este tutorial. Conviene especificar la versión deseada, aunque sea la última, ya que de no hacerlo cuando aparezca una nueva versión se actualizará automáticamente y podrían aparecer incompatibilidades con las aplicaciones LEMP instaladas.
Tras la descarga e instalación de estos paquetes y sus dependencias se crearán tres nuevos servicios en Debian 9, los servicios nginx.service, php7.4-fpm.service y mariadb.service, aunque también podemos trabajar con sus nombres cortos, nginx, php7.4-fpm y mariadb.
Los tres servicios que constituyen la pila LEMP quedan en ejecución y habilitados para su inicio automático en cada arranque de Debian 9 Stretch.
Podemos comprobar en cualquier momento que los servicios se encuentran en ejecución con el comando systemctl status nginx php7.4-fpm mariadb
:
Cómo configurar LEMP en Debian 9 Stretch
Antes de probar la pila LEMP es necesario realizar algunos ajustes rápidos en la configuración de sus elementos.
MariaDB
Realmente la configuración por defecto de MariaDB es bastante segura. Únicamente cabe advertir que el usuario root no tiene contraseña, pero sólo se puede conectar con el mismo habiendo iniciado sesión como root en Debian 9:
~# mysql Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 3 Server version: 10.1.48-MariaDB-0+deb9u1 Debian 9.9 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)]>
O con otro usuario que pueda utilizar sudo:
~$ sudo mysql Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 4 Server version: 10.1.48-MariaDB-0+deb9u1 Debian 9.9 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)]>
Cuando necesitemos crear una base de datos y un usuario que la maneje para cualquier aplicación web que lo requiera, una vez iniciada sesión con el cliente mysql creamos la base:
> create database lemp_db;
Creamos el usuario:
> create user lemp_user@localhost identified by 'XXXXXXXX';
Otorgamos permisos al usuario sobre la base:
> grant all privileges on lemp_db.* to lemp_user@localhost;
Y refrescamos la tabla de permisos antes de salir del cliente mysql:
> flush privileges; > exit
PHP
El archivo de configuración de PHP es php.ini, sobre el que debemos realizar algún ajuste (cambiando la ruta de forma adecuada según la versión de PHP que hayamos instalado):
~$ sudo nano /etc/php/7.4/fpm/php.ini
Debemos ajustar el valor de la zona horaria que se adecúe a la ubicación del servidor (o que queramos que tomen las aplicaciones web), lo que se hace a través de la directiva date.timezone:
... ;date.timezone = ...
Activamos la directiva y le damos el valor de la zona horaria:
... date.timezone = Europe/Madrid ...
Si no conoces el valor de tu zona horaria, puedes consultarlo en https://www.php.net/manual/es/timezones.php.
Si estás montando un servidor LEMP para producción no habría que hacer nada más en principio, pero si se trata de un servidor para desarrollo deberías activar los mensajes de error para que se muestren en el navegador. Esto se hace localizando las directivas siguientes y dándoles los valores mostrados:
... error_reporting = E_ALL ... display_errors = On ... display_startup_errors = On ...
Hecho esto, podemos guardar los cambios y cerrar el archivo.
Cualquier cambio realizado en la configuración del servicio PHP-FPM no entra en vigor hasta recargar su configuración:
~$ sudo systemctl reload php7.4-fpm
Nginx
Hay que configurar Nginx para que sepa cómo conectar con el servicio PHP-FPM, para lo cual editaremos la configuración del servidor virtual por defecto:
~$ sudo nano /etc/nginx/sites-available/default
En primer lugar añadimos los archivos index.php como archivos índice en la directiva index:
... index index.html index.htm index.nginx-debian.html; ...
Podría quedar así:
... index index.php index.html index.htm index.nginx-debian.html; ...
A continuación buscaremos la configuración para la conexión con PHP-FPM:
... #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; #} ...
Está desactivada por completo, así que activaremos este bloque location, y dentro de este sólo las directivas necesarias para conectar por sockets de Unix:
... 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; } ...
Además, hemos cambiado el valor de fastcgi_pass ya que el valor por defecto hace referencia a PHP 7.0 y estamos trabajando con una versión distinta.
Guardamos los cambios y podemos recargar la configuración de Nginx:
~$ sudo systemctl reload nginx
Hemos terminado la configuración básica de los elementos de la pila LEMP en Debian 9 Stretch.
Configurar el firewall UFW para LEMP en Debian 9 Stretch
Si tienes activado el firewall UFW, que es lo recomendable, debes añadir alguna regla para permitir conectar con el servidor desde la red. Si sólo estás interesado en ofrecer contenido mediante protocolo HTTP estándar, añade esta regla:
~$ sudo ufw allow http
Si además quieres ofrecer contenido mediante conexiones seguras, añade esta otra regla:
~$ sudo ufw allow https
Cómo probar la pila LEMP en Debian 9 Stretch
Haremos una sencilla prueba para comprobar que la pila LEMP funciona, creando un simple script en PHP, situado en alguna ubicación fácilmente accesible vía web, como la carpeta raíz de la página por defecto de Nginx en Debian 9:
~$ sudo nano /var/www/html/info.php
Añadiremos únicamente esta línea:
<?php phpinfo();
Una vez guardados los cambios y cerrado el archivo, podemos usar el navegador con la URL formada por la dirección IP, nombre de máquina o dominio del servidor añadiendo el sufijo /info.php:
Conclusión
Ya has visto qué rápido y fácil es instalar una pila o entorno LEMP en Debian 9 Stretch, por lo que en breves minutos dispones en tu servidor o VPS Debian 9 de la base necesaria para desarrollar o instalar potentes aplicaciones web que tienen este requisito.
Si tienes alguna sugerencia, duda, pregunta o notificación, puedes dejar algún comentario.
Ah, y si gracias a esta breve guía de instalación y configuración LEMP en Debian 9 Stretch ya tienes listo tu servidor o VPS y quieres agradecérmelo, puedes hacerlo dejando 1 $ de propina desde PayPal:
¡Gracias!