Cómo instalar Linux, Nginx, MariaDB, PHP (pila LEMP) en Debian 10

Introducción

Índice
  1. Introducción
  • Prerrequisitos
  • Paso 1: Instalación del servidor web Nginx
  • Paso 2: Instalación de MariaDB
  • Paso 3: Instalación de PHP para procesamiento
  • Paso 4: Configuración de Nginx para utilizar el procesador PHP
  • Paso 5: Creación de un archivo PHP para probar la configuración
  • Paso 6: Prueba de la conexión a la base de datos desde PHP (opcional)
  • Conclusión
  • La pila de software LEMP es un grupo de software que se puede utilizar para ofrecer páginas web dinámicas y aplicaciones web. El nombre “LEMP” es un acrónimo que describe un sistema operativo Linux, con un servidor web ( E ) Nginx. Los datos del backend se almacenan en una base de datos MariaDB y el procesamiento dinámico lo gestiona PHP .

    Aunque esta pila de software generalmente incluye MySQL como sistema de gestión de base de datos, algunas distribuciones de Linux (incluido Debian) utilizan MariaDB como reemplazo directo de MySQL.

    En esta guía, instalará una pila LEMP en un servidor Debian 10 utilizando MariaDB como sistema de administración de base de datos.

    Prerrequisitos

    Para completar esta guía, necesitarás acceso a un servidor Debian 10. Este servidor debe tener un usuario normal configurado con sudoprivilegios y un firewall habilitado con ufw. Para configurarlo, puedes seguir nuestra guía Configuración inicial del servidor con Debian 10.

    Paso 1: Instalación del servidor web Nginx

    Para servir páginas web a los visitantes de su sitio, vamos a utilizar Nginx, un servidor web popular que es bien conocido por su rendimiento y estabilidad.

    Todo el software que utilizará para este procedimiento procederá directamente de los repositorios de paquetes predeterminados de Debian. Esto significa que puede utilizar el aptpaquete de administración de paquetes para completar la instalación.

    Dado que es la primera vez que lo usará aptpara esta sesión, debe comenzar actualizando el índice de paquetes local. Luego puede instalar el servidor:

    1. sudo apt update
    2. sudo apt install nginx

    En Debian 10, Nginx está configurado para comenzar a ejecutarse después de la instalación.

    Si tienes el ufwfirewall en funcionamiento, tendrás que permitir las conexiones a Nginx. Debes habilitar el perfil más restrictivo que permita el tráfico que deseas. Dado que aún no has configurado SSL para tu servidor, por ahora solo necesitas permitir el tráfico HTTP en el puerto 80.

    Puedes habilitar esto escribiendo:

    1. sudo ufw allow 'Nginx HTTP'

    Puede verificar el cambio escribiendo:

    1. sudo ufw status

    Debería ver el tráfico HTTP permitido en la salida mostrada:

    OutputStatus: activeTo                         Action      From--                         ------      ----OpenSSH                    ALLOW       AnywhereNginx HTTP                 ALLOW       AnywhereOpenSSH (v6)               ALLOW       Anywhere (v6)Nginx HTTP (v6)            ALLOW       Anywhere (v6)

    Ahora, comprueba si el servidor está en funcionamiento accediendo al nombre de dominio o la dirección IP pública de tu servidor en tu navegador web. Si no tienes un nombre de dominio que apunte a tu servidor y no conoces la dirección IP pública de tu servidor, puedes encontrarla escribiendo una de las siguientes opciones en tu terminal:

    1. ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's//.*$//'

    Esto imprimirá algunas direcciones IP. Puede probarlas una por una en su navegador web.

    Escribe una de las direcciones que recibes en tu navegador web. Debería llevarte a la página de destino predeterminada de Nginx:

    http://your_domain_or_IP

    Si ve la página anterior, ha instalado Nginx correctamente.

    Paso 2: Instalación de MariaDB

    Ahora que tiene un servidor web en funcionamiento, necesita instalar el sistema de base de datos para poder almacenar y administrar los datos de su sitio.

    En Debian 10, el metapaquete mysql-server, que se utilizaba tradicionalmente para instalar el servidor MySQL, fue reemplazado por default-mysql-server. Este metapaquete hace referencia a MariaDB, una bifurcación comunitaria del servidor MySQL original de Oracle, y actualmente es el servidor de base de datos compatible con MySQL predeterminado disponible en los repositorios del administrador de paquetes basado en Debian.

    Sin embargo, para una compatibilidad a largo plazo, se recomienda que en lugar de utilizar el metapaquete instale MariaDB utilizando el paquete real del programa, mariadb-server.

    Para instalar este software, ejecute:

    1. sudo apt install mariadb-server

    Cuando finalice la instalación, se recomienda ejecutar un script de seguridad que viene preinstalado con MariaDB. Este script eliminará algunas configuraciones predeterminadas inseguras y bloqueará el acceso a su sistema de base de datos. Inicie el script interactivo ejecutando lo siguiente:

    1. sudo mysql_secure_installation

    Este script lo guiará a través de una serie de indicaciones donde puede realizar algunos cambios en su configuración de MariaDB. La primera indicación le pedirá que ingrese la contraseña actual de root de la base de datos . Esta no debe confundirse con la root del sistema . El usuario root de la base de datos es un usuario administrativo con privilegios completos sobre el sistema de base de datos. Debido a que acaba de instalar MariaDB y aún no ha realizado ningún cambio de configuración, esta contraseña estará en blanco, así que simplemente presione ENTERen la indicación.

    El siguiente mensaje le preguntará si desea configurar una contraseña de root para la base de datos . Debido a que MariaDB utiliza un método de autenticación especial para el usuario root que suele ser más seguro que el uso de una contraseña, no necesita configurarlo ahora. Escriba Ny luego presione ENTER.

    Desde allí, puede presionar Yy luego ENTERaceptar los valores predeterminados para todas las preguntas posteriores. Esto eliminará los usuarios anónimos y la base de datos de prueba, deshabilitará el inicio de sesión remoto como root y cargará estas nuevas reglas para que MariaDB respete de inmediato los cambios que haya realizado. Cuando haya terminado, inicie sesión en la consola de MariaDB escribiendo:

    1. sudo mariadb

    Esto se conectará al servidor MariaDB como el usuario de base de datos administrativa root , lo que se deduce del uso de sudoal ejecutar este comando. Debería ver un resultado como este:

    OutputWelcome to the MariaDB monitor.  Commands end with ; or g.Your MariaDB connection id is 74Server version: 10.3.15-MariaDB-1 Debian 10Copyright (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)] 

    Tenga en cuenta que no necesitó proporcionar una contraseña para conectarse como usuario root . Esto funciona porque el método de autenticación predeterminado para el usuario administrativo de MariaDB es unix_socketen lugar de password. Aunque esto puede parecer un problema de seguridad al principio, hace que el servidor de base de datos sea más seguro porque los únicos usuarios a los que se les permite iniciar sesión como usuario root de MariaDB son los usuarios del sistema con privilegios sudo que se conectan desde la consola o a través de una aplicación que se ejecuta con los mismos privilegios. En términos prácticos, eso significa que no podrá usar el usuario root de la base de datos administrativa para conectarse desde su aplicación PHP.

    Para mayor seguridad, es mejor tener cuentas de usuario dedicadas con privilegios menos expansivos configurados para cada base de datos, especialmente si planea tener varias bases de datos alojadas en su servidor. Para demostrar dicha configuración, crearemos una base de datos llamada example_database y un usuario llamado example_user , pero puede reemplazar estos nombres con valores diferentes. Para crear una nueva base de datos, ejecute el siguiente comando desde su consola MariaDB:

    1. CREATE DATABASE example_database;

    Ahora puede crear un nuevo usuario y otorgarle privilegios completos en la base de datos personalizada que acaba de crear. El siguiente comando define la contraseña de este usuario como password, pero debe reemplazar este valor con una contraseña segura de su elección.

    1. GRANT ALL ON example_database.* TO 'example_user'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;

    Esto le dará al usuario example_user privilegios completos sobre la base de datos example_database , al tiempo que evitará que este usuario cree o modifique otras bases de datos en su servidor.

    Elimine los privilegios para garantizar que se guarden y estén disponibles en la sesión actual:

    1. FLUSH PRIVILEGES;

    A continuación, salga del shell de MariaDB:

    1. exit

    Puede probar si el nuevo usuario tiene los permisos adecuados iniciando sesión nuevamente en la consola MariaDB, esta vez utilizando las credenciales de usuario personalizadas:

    1. mariadb -u example_user -p

    Tenga en cuenta la -pbandera en este comando, que le solicitará la contraseña utilizada al crear el usuario example_user . Después de iniciar sesión en la consola de MariaDB, confirme que tiene acceso a la base de datos example_database :

    1. SHOW DATABASES;

    Esto le dará el siguiente resultado:

    Output+--------------------+| Database           |+--------------------+| example_database   || information_schema |+--------------------+2 rows in set (0.000 sec)

    Para salir del shell de MariaDB, escriba:

    1. exit

    En este punto, su sistema de base de datos está configurado y puede pasar a instalar PHP, el componente final de la pila LEMP.

    Paso 3: Instalación de PHP para procesamiento

    Tienes instalado Nginx para servir tu contenido y MySQL para almacenar y administrar tus datos. Ahora puedes instalar PHP para procesar código y generar contenido dinámico para el servidor web.

    Mientras que Apache incorpora el intérprete PHP en cada solicitud, Nginx requiere un programa externo para manejar el procesamiento PHP y actuar como puente entre el intérprete PHP y el servidor web. Esto permite un mejor rendimiento general en la mayoría de los sitios web basados ​​en PHP, pero requiere una configuración adicional. Necesitará instalar php-fpm, que significa "administrador de procesos PHP fastCGI", y decirle a Nginx que pase las solicitudes PHP a este software para su procesamiento. Además, necesitará php-mysql, un módulo PHP que permite que PHP se comunique con bases de datos basadas en MySQL. Los paquetes PHP principales se instalarán automáticamente como dependencias.

    Para instalar los paquetes php-fpmy php-mysql, ejecute:

    1. sudo apt install php-fpm php-mysql

    Ya tienes instalados los componentes PHP. A continuación, configurarás Nginx para usarlos.

    Paso 4: Configuración de Nginx para utilizar el procesador PHP

    Al utilizar el servidor web Nginx, se pueden utilizar bloques de servidor (similares a los hosts virtuales de Apache) para encapsular detalles de configuración y alojar más de un dominio en un solo servidor. En esta guía, utilizaremos your_domain como nombre de dominio de ejemplo. Para obtener más información sobre cómo configurar un nombre de dominio con DigitalOcean, consulte nuestra introducción a DigitalOcean DNS.

    En Debian 10, Nginx tiene un bloque de servidor habilitado de manera predeterminada y está configurado para servir documentos desde un directorio en /var/www/html. Si bien esto funciona bien para un solo sitio, puede volverse difícil de administrar si está alojando varios sitios. En lugar de modificar /var/www/html, creemos una estructura de directorio dentro /var/wwwpara el sitio web your_domain , dejando /var/www/htmlen su lugar como el directorio predeterminado para servir si una solicitud de cliente no coincide con ningún otro sitio.

    Cree el directorio web raíz para su_dominio de la siguiente manera:

    1. sudo mkdir /var/www/your_domain

    A continuación, asigne la propiedad del directorio con la variable de entorno $USER, que debe hacer referencia a su usuario actual del sistema:

    1. sudo chown -R $USER:$USER /var/www/your_domain

    A continuación, abra un nuevo archivo de configuración en sites-availableel directorio de Nginx utilizando su editor de línea de comandos preferido. Aquí, utilizaremos nano:

    1. sudo nano /etc/nginx/sites-available/your_domain

    Esto creará un nuevo archivo en blanco. Pegue la siguiente configuración básica:

    /etc/nginx/sites-available/su_dominio

    server {    listen 80;    listen [::]:80;    root /var/www/your_domain;    index index.php index.html index.htm;    server_name your_domain;    location / {        try_files $uri $uri/ =404;    }    location ~ .php$ {        include snippets/fastcgi-php.conf;        fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;    }}

    Esta es una configuración básica que escucha en el puerto 80y envía archivos desde la raíz web que acaba de crear. Solo responderá a las solicitudes al host o la dirección IP proporcionada después de server_name, y cualquier archivo que termine en .phpserá procesado por php-fpmantes de que Nginx envíe los resultados al usuario.

    Nota: Si está ejecutando una versión de PHP diferente a PHP 7.3, deberá ajustarlo fastcgi_passpara que coincida con la versión de PHP que está utilizando.

    Cuando hayas terminado de editar, guarda y cierra el archivo. Si ya habías nanocreado el archivo, hazlo escribiendo CTRL+ Xy luego yy ENTERpara confirmar.

    Active su configuración vinculándose al archivo de configuración desde sites-enabledel directorio de Nginx:

    1. sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/

    Esto le indicará a Nginx que use la configuración la próxima vez que se vuelva a cargar. Puede probar su configuración para detectar errores de sintaxis escribiendo lo siguiente:

    1. sudo nginx -t

    Si se informa algún error, regrese a su archivo de configuración para revisar su contenido antes de continuar.

    Cuando esté listo, vuelva a cargar Nginx para realizar los cambios:

    1. sudo systemctl reload nginx

    A continuación, creará un archivo en su nuevo directorio raíz web para probar el procesamiento de PHP.

    Paso 5: Creación de un archivo PHP para probar la configuración

    Ahora tu pila LEMP debería estar completamente configurada. Puedes probarla para validar que Nginx puede transferir .phparchivos correctamente a tu procesador PHP.

    Puede hacerlo creando un archivo PHP de prueba en la raíz de su documento. Abra un nuevo archivo llamado info.phpdentro de la raíz de su documento en su editor de texto:

    1. nano /var/www/your_domain/info.php

    Escriba o pegue las siguientes líneas en el nuevo archivo. Se trata de un código PHP válido que devolverá información sobre su servidor:

    /var/www/su_dominio/info.php

    ?phpphpinfo();?

    Cuando haya terminado, guarde y cierre el archivo escribiendo CTRL+ Xy luego yy ENTERpara confirmar.

    Ahora puede acceder a esta página en su navegador web visitando el nombre de dominio o la dirección IP pública que ha configurado en su archivo de configuración de Nginx, seguido de /info.php:

    http://your_domain/info.php

    Verá una página web que contiene información detallada sobre su servidor:

    Después de comprobar la información relevante sobre su servidor PHP a través de esa página, es mejor eliminar el archivo que ha creado, ya que contiene información confidencial sobre su entorno PHP y su servidor Debian. Puede utilizar rmpara eliminar ese archivo:

    1. rm /var/www/your_domain/info.php

    Siempre puedes volver a generar este archivo si lo necesitas más adelante. A continuación, probaremos la conexión a la base de datos desde el lado PHP.

    Paso 6: Prueba de la conexión a la base de datos desde PHP (opcional)

    Si desea probar si PHP puede conectarse a MariaDB y ejecutar consultas de base de datos, puede crear una tabla de prueba con datos ficticios y consultar su contenido desde un script PHP.

    Primero, conéctese a la consola MariaDB con el usuario de base de datos que creó en el Paso 2 de esta guía:

    1. mariadb -u example_user -p

    Cree una tabla denominada todo_list . Desde la consola de MariaDB, ejecute la siguiente instrucción:

    CREATE TABLE example_database.todo_list (item_id INT AUTO_INCREMENT,content VARCHAR(255),PRIMARY KEY(item_id));

    Ahora, inserte algunas filas de contenido en la tabla de prueba. Es posible que desee repetir el siguiente comando varias veces, utilizando valores diferentes:

    1. INSERT INTO example_database.todo_list (content) VALUES ("My first important item");

    Para confirmar que los datos se guardaron correctamente en su tabla, ejecute:

    1. SELECT * FROM example_database.todo_list;

    Verá el siguiente resultado:

    Output+---------+--------------------------+| item_id | content                  |+---------+--------------------------+|       1 | My first important item  ||       2 | My second important item ||       3 | My third important item  ||       4 | and this one more thing  |+---------+--------------------------+4 rows in set (0.000 sec)

    Después de confirmar que tiene datos válidos en su tabla de prueba, puede salir de la consola MariaDB:

    1. exit

    nanoAhora puedes crear el script PHP que se conectará a MariaDB y consultará tu contenido. Crea un nuevo archivo PHP en tu directorio raíz web personalizado usando tu editor preferido. Para ello, usaremos :

    1. nano /var/www/your_domain/todo_list.php

    Añade el siguiente contenido a tu script PHP:

    ?php$user = "example_user";$password = "password";$database = "example_database";$table = "todo_list";try {  $db = new PDO("mysql:host=localhost;dbname=$database", $user, $password);  echo "h2TODO/h2ol";   foreach($db-query("SELECT content FROM $table") as $row) {    echo "li" . $row['content'] . "/li";  }  echo "/ol";} catch (PDOException $e) {    print "Error!: " . $e-getMessage() . "br/";    die();}

    Guarde y cierre el archivo cuando haya terminado de editarlo.

    Ahora puede acceder a esta página en su navegador web visitando el nombre de dominio o la dirección IP pública que ha configurado en su archivo de configuración de Nginx, seguido de /todo_list.php:

    http://your_domain/todo_list.php

    Deberías ver una página como ésta, que muestra el contenido que has insertado en tu tabla de prueba:

    Eso significa que su entorno PHP está listo para conectarse e interactuar con su servidor MariaDB.

    Conclusión

    En esta guía, ha creado una base flexible para ofrecer sitios web y aplicaciones PHP a sus visitantes, utilizando Nginx como servidor web. Ha configurado Nginx para que gestione solicitudes PHP a través de php-fpm, y también ha configurado una base de datos MariaDB para almacenar los datos de su sitio web.

    Para mejorar aún más su configuración actual, puede instalar Composer para la gestión de dependencias y paquetes en PHP, y también puede instalar un certificado OpenSSL para su sitio web usando Let's Encrypt.

    SUSCRÍBETE A NUESTRO BOLETÍN 
    No te pierdas de nuestro contenido ni de ninguna de nuestras guías para que puedas avanzar en los juegos que más te gustan.

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

    Subir

    Este sitio web utiliza cookies para mejorar tu experiencia mientras navegas por él. Este sitio web utiliza cookies para mejorar tu experiencia de usuario. Al continuar navegando, aceptas su uso. Mas informacion