Cómo instalar la pila Linux, Apache, MariaDB, PHP (LAMP) en Debian 10

0 acciones
0
0
0
0

Introducción

La pila LAMP es un conjunto de software de código abierto que suele instalarse conjuntamente para permitir que un servidor aloje sitios web y aplicaciones web dinámicos. El término se refiere al sistema operativo Linux con servidor web Apache. Los datos del sitio se almacenan en una base de datos MariaDB y el contenido dinámico se procesa mediante PHP.

Aunque esta pila de software generalmente incluye MySQL como sistema de gestión de base de datos, algunas distribuciones de Linux, incluida Debian, utilizan MariaDB como alternativa a MySQL.

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

Requisitos previos

Para seguir este tutorial, necesitará un servidor Debian 10 con una cuenta sudo no root activa y un firewall básico.

Paso 1: Instalar Apache y actualizar el firewall

El servidor web Apache es uno de los más populares del mundo. Está bien documentado y se ha utilizado ampliamente a lo largo de gran parte de la historia de la web, lo que lo convierte en una excelente opción para el alojamiento web.

Comience actualizando la caché del administrador de paquetes. Si es la primera vez que usa sudo en esta sesión, se le solicitará su contraseña de usuario para verificar que tiene los privilegios necesarios para administrar paquetes del sistema con apt:

sudo apt update

Luego instale Apache con el siguiente comando:

sudo apt install apache2

Este comando le solicitará que confirme la instalación de Apache. Confirme pulsando Y y luego ENTER. Una vez completada la instalación, deberá configurar su firewall. Si siguió las instrucciones iniciales de configuración del servidor para instalar y habilitar el firewall UFW, asegúrese de que su firewall permita el tráfico HTTP y HTTPS.

En Debian 10, UFW incluye perfiles de aplicación que puede usar para configurar los ajustes de su firewall. Consulte la lista completa de perfiles de aplicación ejecutando:

sudo ufw app list

Los perfiles WWW se utilizan para administrar los puertos utilizados por los servidores web:

Output
Available applications:
. . .
WWW
WWW Cache
WWW Full
WWW Secure
. . .

Si verifica el perfil completo de WWW, muestra que está habilitando el tráfico en los puertos 80 y 443:

sudo ufw app info "WWW Full"
Output
Profile: WWW Full
Title: Web Server (HTTP,HTTPS)
Description: Web Server (HTTP,HTTPS)
Ports:
80,443/tcp

Se permite el tráfico entrante HTTP y HTTPS para este perfil:

sudo ufw allow in "WWW Full"

Puedes verificar que todo salió según lo previsto visitando la dirección IP pública de tu servidor en tu navegador web:

http://your_server_ip

Esto devuelve la página web Apache Debian 10 predeterminada, que está allí para fines informativos y de prueba:

Si su navegador devuelve esta página, su servidor web ahora está correctamente instalado y es accesible a través de su firewall.

Cómo encontrar la dirección IP pública de su servidor

Si no conoce la dirección IP pública de su servidor, existen varias maneras de encontrarla. Normalmente, esta es la dirección que usa para conectarse a su servidor mediante SSH.

Hay varias maneras de hacerlo desde la línea de comandos. Primero, puede usar la herramienta iproute2 para obtener su dirección IP ejecutando lo siguiente:

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

Esto retrocederá dos o tres líneas. Todas son direcciones válidas, pero es posible que tu computadora solo pueda usar una, así que prueba cada una.

Una forma alternativa de utilizar la herramienta rizo Sirve para contactar a un tercero y decirle cómo ve su servidor. Puede ejecutar el siguiente comando para preguntarle a un servidor específico cuál es su dirección IP:

Desde Debian 10 tiene rizo No es predeterminado, debes instalarlo primero:

sudo apt install curl

Luego ejecute el siguiente comando para preguntar a un servidor específico cuál es su dirección IP:

curl http://icanhazip.com

Independientemente del método, escriba su dirección IP en su navegador web para verificar que su servidor esté ejecutando la página Apache predeterminada.

Paso 2 – Instalar MariaDB

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

En Debian 10, el metapaquete MySQL-server, tradicionalmente utilizado para instalar el servidor MySQL, fue reemplazado por default-MySQL-server. Este metapaquete hace referencia a MariaDB, una bifurcación del servidor MySQL original de Oracle, y ahora es el servidor de bases de datos compatible con MySQL por defecto disponible en los repositorios de gestión de paquetes de Debian.

Sin embargo, para una compatibilidad a largo plazo, se recomienda instalar MariaDB utilizando el paquete de aplicación real, mariadb-server, en lugar de utilizar el paquete meta.

Para instalar el software MariaDB, ejecute:

sudo apt install mariadb-server

Una vez finalizada la instalación, se recomienda ejecutar un script de seguridad 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:

sudo mysql_secure_installation

Este script le guiará a través de una serie de comandos para modificar la configuración de MariaDB. El primer mensaje le pedirá que introduzca la contraseña actual del usuario root de la base de datos. No debe confundirse con la del usuario root del sistema. El usuario root de la base de datos es un usuario administrativo con privilegios completos en el sistema de la base de datos. Dado que ha instalado MariaDB recientemente y aún no ha realizado cambios en la configuración, esta contraseña estará en blanco; pulse INTRO cuando se le pida.

El siguiente mensaje le preguntará si desea establecer una contraseña de root para la base de datos. Dado que MariaDB utiliza un método de autenticación especial para el usuario root, que suele ser más seguro que usar una contraseña, no necesita establecerla ahora. Presione N y luego ENTER.

Desde allí, puede presionar Y y luego ENTER para aceptar los valores predeterminados para todas las preguntas subsiguientes. Esto eliminará a 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 aplique inmediatamente los cambios realizados.

Cuando haya terminado, inicie sesión en la consola MariaDB:

sudo mariadb

Esto se conectará al servidor MariaDB como usuario root de la base de datos administrativa, lo cual se deduce al usar sudo al ejecutar este comando. Debería obtener el siguiente resultado:

Output
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 42
Server version: 10.3.36-MariaDB-0+deb10u2 Debian 10
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)]>

Tenga en cuenta que no necesita 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 la contraseña unix_socket. Si bien esto puede parecer un problema de seguridad al principio, aumenta la seguridad del servidor de bases de datos, ya que los únicos usuarios autorizados para iniciar sesión como usuario root de MariaDB son los usuarios del sistema con privilegios sudo, lo cual se puede hacer desde la consola o mediante una aplicación en ejecución con los mismos privilegios. En la práctica, esto significa que no puede usar el usuario root de la base de datos administrativa para conectarse desde su aplicación PHP.

Para mayor seguridad, es mejor configurar cuentas de usuario dedicadas con privilegios menos amplios para cada base de datos, especialmente si planea alojar varias bases de datos en su servidor.

Puede salir de la consola MariaDB con lo siguiente:

exit

Su servidor MariaDB ya está instalado y protegido. A continuación, instalará PHP, el último componente de la pila LAMP.

Paso 3 – Instalar PHP

Tiene instalado Apache para servir su contenido y MariaDB para almacenar y administrar sus datos. PHP es parte de su configuración que procesa el código para mostrar contenido dinámico al usuario final. Puede ejecutar scripts, conectarse a sus bases de datos MariaDB para recuperar información y entregar el contenido procesado a su servidor web para su visualización.

Además del paquete php, necesita php-mysql, un módulo PHP que permite a PHP comunicarse con bases de datos basadas en MySQL, como MariaDEB. También necesita libapache2-mod-php para que Apache pueda gestionar archivos PHP. Los paquetes principales de PHP se instalan automáticamente como dependencias.

Para instalar estos paquetes, ejecute el siguiente comando:

sudo apt install php libapache2-mod-php php-mysql

Una vez completada la instalación, puedes verificar tu versión de PHP con el siguiente comando:

php -v
Output
PHP 7.3.31-1~deb10u2 (cli) (built: Dec 15 2022 09:39:10) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.31, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.3.31-1~deb10u2, Copyright (c) 1999-2018, by Zend Technologies

En la mayoría de los casos, querrá cambiar la forma en que Apache sirve los archivos. Actualmente, si un usuario solicita un directorio al servidor, Apache primero busca un archivo llamado index.html. Para indicarle al servidor web que priorice los archivos PHP, puede configurar Apache para que primero busque un archivo index.php.

Para ello, ejecute el siguiente comando para abrir el archivo dir.conf en su editor de texto favorito con privilegios de root. En este ejemplo, usaremos nano:

sudo nano /etc/apache2/mods-enabled/dir.conf

El contenido será el siguiente:

<IfModule mod_dir.c>
DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm
</IfModule>

Mueva el archivo de directorio PHP a la primera posición después de la especificación DirectoryIndex, como se muestra a continuación:

<IfModule mod_dir.c>
DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
</IfModule>

Cuando termines, guarda y cierra el archivo. Si usas nano, puedes hacerlo presionando CTRL+X, luego Y y ENTER para confirmar.

Ahora recargue la configuración de Apache:

sudo systemctl reload apache2

Puede comprobar el estado del servicio apache2 con systemctl status:

sudo systemctl status apache2
Sample Output
● apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset:
Active: active (running) since Fri 2023-01-20 22:21:24 UTC; 2min 12s ago
Docs: https://httpd.apache.org/docs/2.4/
Process: 13076 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCC
Process: 13097 ExecReload=/usr/sbin/apachectl graceful (code=exited, status=0/
Main PID: 13080 (apache2)
Tasks: 6 (limit: 4915)
Memory: 13.7M
CGroup: /system.slice/apache2.service
├─13080 /usr/sbin/apache2 -k start
├─13101 /usr/sbin/apache2 -k start
├─13102 /usr/sbin/apache2 -k start
├─13103 /usr/sbin/apache2 -k start
├─13104 /usr/sbin/apache2 -k start
└─13105 /usr/sbin/apache2 -k start

En este punto, tu pila LAMP está completamente operativa, pero antes de probarla con un script PHP, es recomendable configurar un host virtual Apache adecuado para alojar los archivos y carpetas de tu sitio web. Lo configurarás en el siguiente paso.

Paso 4 – Crea un host virtual para tu sitio web

Al usar el servidor web Apache, puede crear hosts virtuales (similares a los bloques de servidor en Nginx) para encapsular los detalles de configuración y alojar más de un dominio desde un solo servidor. En esta sección, configurará un dominio llamado "your_domain", pero debe reemplazarlo por su nombre de dominio.

De forma predeterminada, Apache sirve su contenido desde el directorio /var/www/html, utilizando la configuración de /etc/apache2/sites-available/000-default.conf. En lugar de modificar el archivo de configuración predeterminado del sitio web, conviene crear un nuevo host virtual para probar el entorno PHP. Los hosts virtuales permiten alojar varios sitios web en un único servidor Apache. También se crea una estructura de directorios en /var/www para your_domain, dejando /var/www/html como directorio predeterminado en caso de que la solicitud de un cliente no coincida con ningún otro sitio.

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

sudo mkdir /var/www/your_domain

A continuación, asigne la propiedad del directorio con la variable de entorno $USER, que hará referencia al usuario actual en su sistema:

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

A continuación, abra un nuevo archivo de configuración en el directorio de sitios disponibles de Apache con su editor de texto preferido. En el siguiente ejemplo se utiliza Nano:

sudo nano /etc/apache2/sites-available/your_domain.conf

Esto creará un nuevo archivo vacío. Agregue la siguiente configuración básica con su nombre de dominio:

<VirtualHost *:80>
ServerName your_domain
ServerAlias www.your_domain 
ServerAdmin webmaster@localhost
DocumentRoot /var/www/your_domain
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Con esta configuración de VirtualHost, le indica a Apache que sirva su_dominio usando /var/www/su_dominio como directorio raíz web. Si desea probar Apache sin un nombre de dominio, puede eliminar o comentar las opciones ServerName y ServerAlias ​​agregando un signo de almohadilla (#) al principio de cada línea.

Cuando termine, guarde y cierre el archivo.

Ahora use a2ensite para activar este host virtual:

sudo a2ensite your_domain

Quizás quieras deshabilitar el sitio web predeterminado instalado con Apache. Esto es necesario si no usas un nombre de dominio personalizado, ya que en ese caso Apache sobrescribirá la configuración predeterminada de tu host virtual. Para deshabilitar el sitio web predeterminado de Apache, ejecuta:

sudo a2dissite 000-default

Para asegurarse de que su archivo de configuración no contenga errores de sintaxis, puede ejecutar:

sudo apache2ctl configtest

Por último, recargue Apache para que estos cambios surtan efecto:

sudo systemctl reload apache2

A continuación, creará un script PHP para probar que PHP esté correctamente instalado y configurado en su servidor.

Paso 5: Pruebe el procesamiento de PHP en su servidor web

Ahora que tiene una ubicación personalizada para alojar los archivos y carpetas de su sitio web, cree un script de prueba PHP para verificar que Apache pueda manejar y procesar solicitudes de archivos PHP.

Comience creando un nuevo archivo llamado info.php dentro de su carpeta raíz web personalizada:

nano /var/www/your_domain/info.php

Esto abrirá un archivo en blanco. Agregue el siguiente texto, que es código PHP válido, al archivo:

<?php
phpinfo();

Cuando hayas terminado, guarda y cierra el archivo.

Para probar el script, vaya a su navegador web y acceda al nombre de dominio o dirección IP de su servidor, luego ingrese el nombre del script, que en este caso es info.php:

http://your_domain/info.php

A continuación se muestra un ejemplo de una página web PHP predeterminada:

Esta página proporciona información básica sobre su servidor desde una perspectiva PHP. Es útil para depurar y garantizar que la configuración se aplique correctamente.

Si aparece esta página en su navegador, su instalación de PHP está funcionando como se esperaba.

Después de revisar la información de su servidor PHP en esa página, es recomendable eliminar el archivo que creó, ya que contiene información confidencial sobre su entorno PHP y su servidor Debian. Puede usar rm para hacerlo:

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

Siempre puedes volver a crear esta página si necesitas acceder a la información nuevamente.

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

Si desea comprobar si PHP puede conectarse a MariaDB y ejecutar consultas a la base de datos, puede crear una tabla de prueba con datos de prueba y consultar su contenido desde un script PHP. Antes de hacerlo, debe crear una nueva base de datos MariaDB y un usuario configurado correctamente para acceder a ella.

Primero, conéctese a la consola MariaDB usando la cuenta raíz:

sudo mariadb

Para crear una nueva base de datos, ejecute el siguiente comando desde su consola MariaDB:

CREATE DATABASE example_database;

Ahora crea un nuevo usuario y dale privilegios completos en la base de datos personalizada que creaste.

El siguiente comando crea un nuevo usuario llamado example_user que se autentica con una contraseña. La contraseña de este usuario se define como password, pero debe reemplazar este valor por una contraseña segura de su elección:

CREATE USER 'example_user'@'%' IDENTIFIED BY 'password';

A continuación, otorgue a este usuario permiso para utilizar la base de datos example_database:

GRANT ALL ON example_database.* TO 'example_user'@'%';

Esto le otorga al usuario example_user privilegios completos sobre la base de datos example_database, al tiempo que evita que el usuario cree o modifique otras bases de datos en su servidor.

A continuación, borre los privilegios para asegurarse de que se guarden y estén disponibles en la sesión actual:

FLUSH PRIVILEGES;

Después de esto, salga del shell MariaDB:

exit

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

mariadb -u example_user -p

Tenga en cuenta el indicador -p en este comando, que le solicita que introduzca la contraseña utilizada al crear example_user. Una vez iniciada la sesión en la consola de MariaDB, verifique que tenga acceso a example_database:

SHOW DATABASES;

Esto le dará el siguiente resultado:

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

Luego, cree una tabla de prueba llamada 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)
);

Inserte algunas filas de datos en la tabla de prueba. Repita el siguiente comando varias veces con diferentes valores para rellenar la tabla de prueba:

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

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

SELECT * FROM example_database.todo_list;

Obtendrás el siguiente resultado:

+---------+--------------------------+
| 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 verificar que tiene datos válidos en su tabla de prueba, puede salir de la consola MariaDB:

exit

Ahora puedes crear el script PHP que se conectará a MariaDB y consultará tu contenido. Crea un nuevo archivo PHP en el directorio raíz de tu web personalizada con tu editor favorito. En este ejemplo se usa Nano:

nano /var/www/your_domain/todo_list.php

El siguiente script PHP se conecta a la base de datos MariaDB, busca el contenido de la tabla todo_list y muestra los resultados en una lista. Genera una excepción si hay un problema al conectarse a la base de datos.

Agregue este contenido a su script todo_list.php, recordando reemplazar los valores example_user y password con sus propios valores:

<?php
$user = "example_user";
$password = "password";
$database = "example_database";
$table = "todo_list";
try {
$db = new PDO("mysql:host=localhost;dbname=$database", $user, $password);
echo "<h2>TODO</h2><ol>"; 
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();
}

Guarda y cierra el archivo cuando hayas terminado de editar.

Ahora puede acceder a esta página en su navegador web visitando el nombre de dominio o la dirección IP pública de su sitio web seguido de /todo_list.php:

http://your_domain/todo_list.php

Esta página web mostrará al visitante el contenido que usted incluyó en su tabla de prueba:

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

Resultado

En esta guía, ha creado una base flexible para entregar sitios web y aplicaciones PHP a sus visitantes utilizando Apache como servidor web y MariaDB como sistema de base de datos.

Como siguiente paso inmediato, debe asegurarse de que las conexiones a su servidor web sean seguras mediante HTTPS. Puede usar Let's Encrypt para ello. También puede consultar nuestra guía sobre cómo instalar y usar Composer para la gestión de dependencias y paquetes en PHP.

Deja una respuesta

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

También te puede gustar