Tutorial

Cómo instalar la pila Linux, Apache, MariaDB y PHP (LAMP) en CentOS 8

ApachePHPLAMP StackMariaDB

Introducción

Una pila “LAMP” es un grupo de aplicaciones de software de código abierto que se instalan normalmente juntas para permitir que un servidor aloje aplicaciones web y sitios web dinámicos escritos en PHP. Este término es en realidad un acrónimo que representa al sistema operativo Linux, con el servidor web Apache. Los datos de backend se almacenan en una base de datos de MariaDB y el procesamiento dinámico se gestiona a través de PHP.

La capa de la base de datos de una pila LAMP es normalmente un servidor de base de datos de MySQL, pero antes de la publicación de CentOS 8, MySQL no estaba disponible a través de los repositorios predeterminados de CentOS. Debido a esto, MariaDB, una ramificación de la comunidad de MySQL, se convirtió en una alternativa ampliamente aceptada a MySQL como sistema de base de datos predeterminado para pilas LAMP en máquinas con CentOS. MariaDB funciona como reemplazo directo del servidor MySQL original, lo que en la práctica significa que puede realizar el cambio a MariaDB sin necesidad de realizar cambios en la configuración o el código de su aplicación.

Con esta guía, instalará una pila LAMP en un servidor de CentOS 8 usando MariaDB como sistema de gestión de bases de datos.

Requisitos previos

Para seguir esta guía, necesitará acceso a un servidor de CentOS 8 como non-root user con privilegios sudo y un firewall activo instalado en su servidor. Para configurarlo, siga nuestra guía Configuración inicial para servidores con CentOS 8.

Paso 1: Instalar el servidor web Apache

Para mostrar páginas web a los visitantes de nuestro sitio vamos a usar Apache, un servidor web de código abierto popular que se puede configurar para presentar páginas PHP. Usaremos dnf, el nuevo administrador de paquetes predeterminado de CentOS 8, para instalar este software.

Instale el paquete httpd con lo siguiente:

  • sudo dnf install httpd

Cuando se le solicite, introduzca y para confirmar que desea instalar Apache.

Cuando finalice la instalación, ejecute el siguiente comando para habilitar e iniciar el servidor:

  • sudo systemctl start httpd

En caso de que haya habilitado el firewall firewalld conforme a nuestra guía inicial de configuración para servidores, deberá permitir las conexiones a Apache. Con el siguiente comando se habilitarán de forma permanente las conexiones HTTP, que se ejecutan en el puerto 80 por defecto:

  • sudo firewall-cmd --permanent --add-service=http

Para verificar que se aplicó el cambio, puede ejecutar lo siguiente:

  • sudo firewall-cmd --permanent --list-all

Verá un resultado como este:

Output
public target: default icmp-block-inversion: no interfaces: sources: services: cockpit dhcpv6-client http ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:

Deberá volver a cargar la configuración del firewall para que los cambios surtan efecto:

  • sudo firewall-cmd --reload

Una vez añadida la nueva regla de firewall, podrá verificar si su servidor está activo accediendo a la dirección IP pública o al nombre del dominio de este desde su navegador web.

Nota: En caso de que utilice DigitalOcean como proveedor de hosting de DNS, puede consultar nuestros documentos sobre productos para hallar instrucciones detalladas sobre cómo configurar un nuevo nombre de dominio y orientarlo hacia su servidor.

Si no tiene un nombre de dominio para su servidor y no conoce la dirección IP pública de este, puede encontrarla ejecutando el siguiente comando:

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

Con esto se mostrarán algunas direcciones IP. Puede probar cada una de estas en su navegador web.

Como alternativa, podrá verificar la dirección IP accesible, como se ve desde otras ubicaciones de Internet:

  • curl -4 icanhazip.com

Escriba la dirección que reciba en su navegador web. Esta lo llevará a la página de destino predeterminada de Apache:

Página predeterminada de Apache, CentOS 8

Si ve esta página, su servidor web estará correctamente instalado.

Paso 2 - Instalar MariaDB

Ahora que dispone de un servidor web funcional, deberá instalar un sistema de base de datos para poder almacenar y gestionar los datos de su sitio. Instalaremos MariaDB, una ramificación del servidor MySQL original de Oracle desarrollada por la comunidad.

Para instalar este software, ejecute lo siguiente:

  • sudo dnf install mariadb-server

Cuando termine la instalación, habilite e inicie el servidor de MariaDB con lo siguiente:

  • sudo systemctl start mariadb

Para mejorar la seguridad del servidor de su base de datos, se recomienda que ejecute una secuencia de comandos de seguridad que se incluye con MariaDB. Con esta secuencia de comandos se eliminarán algunos ajustes predeterminados poco seguros y se bloqueará el acceso a su sistema de base de datos. Inicie la secuencia de comandos interactiva ejecutando lo siguiente:

  • sudo mysql_secure_installation

Con esta secuencia de comandos, verá una serie de solicitudes mediante las cuales podrá realizar cambios en las opciones de seguridad de su instalación de MariaDB. En la primera solicitud, se pedirá que introduzca la contraseña root de la base de datos actual. Esto no debe confundirse con el root user de sistema. El root user de 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 realizó cambios en la configuración, el espacio de esta contraseña estará en blanco. Por ello, pulse INTRO en la solicitud.

En la siguiente solicitud se pregunta si desea configurar una contraseña root de base de datos. Debido a que MariaDB usa un método de autenticación especial para el root user que normalmente proporciona más seguridad que una contraseña, no es necesario que lo configure ahora. Escriba N y pulse ENTER.

Desde allí, puede pulsar Y y luego ENTER para aceptar los valores predeterminados para todas las preguntas siguientes. Con esto, se eliminarán algunos usuarios anónimos y la base de datos de prueba, se deshabilitará el inicio de sesión remoto de root y se cargarán estas nuevas reglas para que el servidor respete de inmediato los cambios que realizó.

Cuando termine, inicie sesión en la consola de MariaDB escribiendo lo siguiente:

  • sudo mysql

Esto permitirá establecer conexión con el servidor de MariaDB como root user de la base de datos administrativa, lo que se infiere del uso de sudo cuando se ejecuta este comando. Debería ver el siguiente resultado:

Output
Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 9 Server version: 10.3.17-MariaDB MariaDB Server 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)]>

Observe que no era necesario proporcionar una contraseña para establecer conexión como root user. Eso funciona porque el método de autenticación predeterminado para el usuario administrativo de MariaDB es unix_socket en vez de una password. Aunque esto pueda parecer un problema de seguridad al principio, hace que el servidor de la base de datos sea más seguro porque los únicos usuarios que pueden iniciar sesión como root user de MariaDB son los usuarios del sistema con privilegios sudo que establecen conexión desde la consola o a través de una aplicación que se ejecute 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 establecer conexión desde su aplicación PHP.

Para mayor seguridad, es mejor disponer de cuentas de usuario dedicadas con privilegios de menor alcance configurados para cada base de datos, en especial si planea disponer de 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 sustituir estos nombres por valores diferentes.

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

  • CREATE DATABASE example_database;

Ahora puede crear un nuevo usuario y concederle privilegios completos sobre la base de datos personalizada que acaba de crear. Con el siguiente comando se define la contraseña de este usuario como password, pero debería sustituir este valor por una contraseña segura que elija:

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

Esto proporcionará al usuario example_user privilegios completos sobre la base de datos example\_database y, al mismo tiempo, evitará que este usuario cree o modifique otras bases de datos en su servidor.

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

  • FLUSH PRIVILEGES;

Después de esto, cierre el shell de MariaDB:

  • exit

Puede verificar si el nuevo usuario tiene los permisos adecuados iniciando sesión de nuevo en la consola de MariaDB, esta vez con las credenciales de usuario personalizadas.

  • mysql -u example_user -p

Observe el indicador -p en este comando; le solicitará la contraseña que eligió cuando creó el usuario example_user. Después de iniciar sesión en la consola de MariaDB, confirme que tenga acceso a la base de datos example\_database:

  • SHOW DATABASES;

Con esto se generará el siguiente resultado:

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

Para cerrar el shell de MariaDB, escriba lo siguiente:

  • exit

En este punto, el sistema de bases de datos estará configurado y podrá proceder a instalar PHP, el componente final de la pila LAMP.

Paso 3: Instalar PHP

Instaló Apache para presentar su contenido y MariaDB para almacenar y gestionar sus datos. PHP es el componente de nuestra configuración que procesará el código para mostrar contenido dinámico al usuario final. Además del paquete php, necesitará php-mysqlnd, un módulo PHP que permite que este se comunique con bases de datos basadas en MySQL. Los paquetes PHP básicos se instalarán automáticamente como dependencias.

Para instalar los paquetes php y php-mysqlnd usando el administrador de paquetes dnf, ejecute lo siguiente:

sudo dnf install php php-mysqlnd

Tras finalizar la instalación, reinicie el servidor web Apache para habilitar el módulo PHP:

sudo systemctl restart httpd

Su servidor quedará, así, completamente configurado. En el siguiente paso, crearemos una secuencia de comandos de pruebas PHP para verificar que todo funcione como se espera.

Paso 4: Probar PHP con Apache

La instalación predeterminada de Apache en CentOS 8 creará una raíz de documentos ubicada en /var/www/html. No es necesario que realice cambios en la configuración predeterminada de Apache para que PHP funcione correctamente en su servidor web.

El único ajuste que realizaremos consiste en cambiar la configuración de permisos predeterminada en su carpeta raíz de documentos de Apache. De esta forma, podrá crear y modificar archivos en ese directorio con su usuario de sistema regular, sin necesidad de añadir a cada comando el prefijo sudo.

Con el siguiente comando se cambiará la propiedad de la raíz del documento predeterminado de Apache a un usuario y grupo llamado sammy. Por lo tanto, asegúrese de resaltar el nombre de usuario y el grupo en este comando de modo que refleje el nombre de usuario y grupo de su sistema.

  • sudo chown -R sammy.sammy /var/www/html/

Ahora, crearemos una página PHP de prueba para garantizar que el servidor web funcione como se espera.

El editor de texto predeterminado que viene con CentOS 8 es vi. vi es un editor de texto extremadamente potente, pero puede ser un tanto obtuso para los usuarios que carecen de experiencia con él. Posiblemente desee instalar un editor más sencillo, como nano, para facilitar la edición de los archivos en su servidor de CentOS 8.

  • sudo dnf install nano

Escriba y cuando se le solicite confirmar la instalación.

Ahora, cree un nuevo archivo PHP llamado info.php en el directorio /var/www/html:

  • nano /var/www/html/info.php

El siguiente código PHP mostrará información sobre el entorno PHP actual activo en el servidor:

/var/www/html/info.php
<?php

phpinfo();

Cuando termine, guarde y cierre el archivo. Si utiliza nano, puede hacerlo pulsando CTRL+X, Y e INTRO para confirmar.

Ahora, podemos verificar si nuestro servidor web puede mostrar correctamente el contenido generado por una secuencia de comandos comandos Vaya a su navegador y acceda al nombre de host o la dirección IP de su servidor; agregue /info.php al final:

http://server_host_or_IP/info.php

Verá una página similar a la siguiente:

Información de PHP predeterminada de CentOS 8, Apache

Tras comprobar la información pertinente sobre su servidor PHP a través de esa página, será mejor que elimine el archivo que creó porque contiene información confidencial sobre su entorno PHP y su servidor CentOS. Puede usar rm para eliminar ese archivo:

  • rm /var/www/html/info.php

Siempre puede regenerar este archivo si lo necesita más adelante. A continuación, probaremos la conexión con la base de datos del lado PHP.

Paso 5: Probar la conexión con la base de datos desde PHP (opcional)

Si desea probar si PHP puede establecer conexión con MariaDB y ejecutar consultas a la base de datos, puede crear una tabla de prueba con datos ficticios y realizar consultas relacionadas con su contenido desde una secuencia de comandos PHP.

Primero, establezca conexión con la consola de MariaDB usando el usuario de la base de datos que creó en el paso 2 de esta guía:

  • mysql -u example_user -p

Cree una tabla 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)
);

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

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

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

  • SELECT * FROM example_database.todo_list;

Verá esto:

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 haya datos válidos en su tabla de prueba, podrá cerrar la consola de MariaDB:

  • exit

Ahora podrá crear una secuencia de comandos PHO que se conectará a MariaDB y realizará consultas relacionadas con su contenido. Cree un nuevo archivo PHP en su directorio web root personalizado usando su editor preferido. En este caso, usaremos nano:

  • nano /var/www/html/todo_list.php

Añada el siguiente contenido a su secuencia de comandos PHP:

/usr/share/nginx/html/todo_list.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 "<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();
}

Guarde y cierre el archivo cuando finalice la edición.

Ahora puede acceder a esta página en su navegador web visitando el nombre de host o la dirección IP pública de su servidor. Agregue /todo_list.php después:

http://server_host_or_IP/todo_list.php

Debería ver una página como esta, en la que se muestra el contenido que insertó en su tabla de prueba:

Ejemplo de la lista “todo” PHP

Eso significa que su entorno PHP está listo para establecer conexión con su servidor de MariaDB e interactuar con él.

Conclusión

A lo largo de esta guía, creó una base flexible para presentar sitios web y aplicaciones PHP a sus visitantes usando Apache como servidor web. Configuró Apache para que administre solicitudes PHP y también preparó una base de datos de MariaDB para almacenar los datos de su sitio web.

0 Comments

Creative Commons License