LAMP Stack en RHEL

Implantación de Aplicaciones Web

José Juan Sánchez Hernández

Curso 2023/2024



1 LAMP Stack en RHEL

LAMP es el acrónimo usado para describir un sistema de infraestructura de Internet que usa las siguientes herramientas:

2 Linux

En esta práctica vamos a utilizar el sistema operativo Red Hat Enterprise Linux (RHEL).

2.1 Gestor de paquetes dnf

dnf (Dandified Yum) es un gestor de paquetes para distribuciones GNU/Linux basadas en RPM (Red Hat Package Manager). dnf es la evolución de yum Yellowdog Updater, Modified.

2.1.1 Actualizar los paquetes del sistema

Para actualizar los paquetes del sistema podemos utilizar cualquiera de estos comandos:

sudo dnf update
sudo dnf upgrade

En en gestor de paquetes dnf, las opciones update y upgrade realizan la misma acción.

Podemos utilizar una versión abreviada.

sudo dnf up

Si sólo queremos actualizar un paquete del sistema podemos utilizar:

sudo dnf update <nombre_paquete>

2.1.2 Buscar paquetes

sudo dnf search <nombre_paquete>

2.2 Instalar un paquete

sudo dnf install <nombre_paquete>

2.2.1 Eliminar un paquete

sudo dnf autoremove <nombre_paquete>

Para limpiar los archivos temporales de un repositorio que haya sido eliminado o deshabilitado podemos utilizar la opción clean.

sudo dnf clean all

2.2.2 Obtener un listado de todos los paquetes (instalados y disponibles)

Para obtener un listado de los paquetes que están instalados en el sistema y los paquetes que están disponibles en los repositorios para instalar, podemos utilizar cualquiera de estos dos comandos:

sudo dnf list all
sudo dnf list

2.2.3 Obtener un listado de los paquetes instalados

sudo dnf list installed

2.2.4 Obtener información de un paquete

sudo dnf info <nombre_paquete>

Ejemplo:

sudo dnf info mysql-server

3 Apache

3.1 Instalación del servidor web Apache

Instalamos el paquete del servidor web Apache.

sudo dnf install httpd -y

Después de la instalación del servidor hay que iniciar el servicio.

sudo systemctl start httpd

Y habilitar el servicio para que se inicie automáticamente después de cada reinicio.

sudo systemctl enable httpd

Ahora podemos comprobar el estado del servicio para verificar que se está ejecutando.

sudo systemctl status httpd

4 MySQL Server

4.1 Instalación del sistema gestor de bases de datos MySQL Server

Instalamos el paquete de MySQL Server.

sudo dnf install mysql-server -y

Después de la instalación del servidor hay que iniciar el servicio.

sudo systemctl start mysqld

Y habilitar el servicio para que se inicie automáticamente después de cada reinicio.

sudo systemctl enable mysqld

Ahora podemos comprobar el estado del servicio para verificar que se está ejecutando.

sudo systemctl status httpd

5 PHP

5.1 Instalación de PHP

Instalamos el intérprete de PHP con el comando:

sudo dnf install php -y

Podemos comprobar que PHP se ha instalado correctamente ejecutando el siguiente comando:

php -v

Instalamos la extensión de PHP para conectar con MySQL.

sudo dnf install php-mysqlnd -y

Después de la instalación es necesario reiniciar el servicio de Apache para que se apliquen los cambios.

sudo systemctl restart httpd

5.2 Instalar una versión específica de PHP

Consultamos las versiones disponibles de PHP.

sudo dnf module list php

El comando anterior puede devolver una salida similar a esta.

Red Hat Enterprise Linux 8 for x86_64 - AppStream from RHUI (RPMs)
Name                                 Stream                                  Profiles                                                   Summary                                              
php                                  7.2 [d]                                 common [d], devel, minimal                                 PHP scripting language                               
php                                  7.3                                     common [d], devel, minimal                                 PHP scripting language                               
php                                  7.4                                     common [d], devel, minimal                                 PHP scripting language                               
php                                  8.0                                     common [d], devel, minimal                                 PHP scripting language    
php                                  8.1                                     common [d], devel, minimal                              PHP scripting language

Si quisiéramos activar la versión 8.1 de PHP, tendríamos que ejecutar el siguiente comando.

sudo dnf module enable php:8.1

Instalamos la versión que hemos habilitado.

sudo dnf module install php:8.1

6 Herramientas adicionales

6.1 Instalación de phpMyAdmin

  1. Instalamos los módulos de PHP necesarios para phpMyAdmin.
sudo dnf install php-mbstring php-zip php-json php-gd php-fpm php-xml -y
  1. Después de la instalación es necesario reiniciar el servicio de Apache para que se apliquen los cambios.
sudo systemctl restart httpd
  1. Accedemos al directorio /var/www/html.
cd /var/www/html
  1. Instalamos la utilidad wget para poder descargar el código fuente de phpMyAdmin.
sudo dnf install wget -y
  1. Descargamos el código fuente de phpMyAdmin.
sudo wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz

Nota: con el parámetro -P podemos indicar la ruta donde queremos guardar el archivo que vamos a descargar con wget.

  1. Descomprimimos el archivo que acabamos de descargar.
sudo tar xvf phpMyAdmin-latest-all-languages.tar.gz
  1. Eliminamos el archivo .tar.gz.
sudo rm phpMyAdmin-latest-all-languages.tar.gz
  1. Renombramos el directorio.
sudo mv phpMyAdmin-5.2.1-all-languages/ phpmyadmin
  1. Modificamos el propietario y el grupo del directorio. Tenga en cuenta que en RHEL el usuario y el grupo del servidor web es apache.
sudo chown -R apache:apache /var/www/html/phpmyadmin

6.2 Configuración de phpMyAdmin

Para configurar phpMyAdmin necesitamos realizar los siguientes pasos:

6.2.1 Configuración del archivo de configuración config.inc.php

Creamos el archivo de configuración a partir del archivo de ejemplo config.sample.inc.php.

sudo cp /var/www/html/phpmyadmin/config.sample.inc.php /var/www/html/phpmyadmin/config.inc.php

Editamos el archivo de configuración config.inc.php.

sudo nano /var/www/html/phpmyadmin/config.inc.php

En este archivo vamos a configurar las variables:

Ejemplo:

A continuación se muestra una configuración de ejemplo para estas dos variables.

$cfg['blowfish_secret'] = 'f0IGOik2Plvt`Ee}YTU!=M2N(J$onRqg';

$cfg['TempDir'] = '/tmp';

Configuración de la variable $cfg['blowfish_secret']

Tenga en cuenta que tendrá que modificar el valor de la variable blowfish_secret por uno que usted mismo genere. Es recomendable que sea un valor aleatorio y que sea diferente para cada instalación que realice.

Para generar un valor aleatorio de 32 caracteres puede utilizar el comando openssl y para modificar el archivo de configuración puede utilizar el comando sed.

A continuación, se muestra un ejemplo de cómo se podría automatizar este paso en un script de bash.

#!/bin/bash

# Generamos un valor aleatorio de 32 caracteres para la variable blowfish_secret
RANDOM_VALUE=`openssl rand -hex 16`

# Modificamos la variable blowfish_secret en el archivo de configuración
sed -i "s/\(\$cfg\['blowfish_secret'\] =\).*/\1 '$RANDOM_VALUE';/" /var/www/html/phpmyadmin/config.inc.php

El comando sed que se utiliza para modificar y eliminar texto en un archivo. Vamos a explicar los parámetros que se han utilizado en el ejemplo anterior.

Referencia:

Configuración de la variable $cfg['TempDir']

Para configurar la variable $cfg['TempDir'] también vamos a hacer uso del comando sed, pero esta vez utilizaremos el modificador a que nos permite añadir texto después de una línea que coincida con la cadena que estamos buscando.

Ejemplo:

sed -i "/blowfish_secret/a \$cfg\['TempDir'\] = '/tmp';" /var/www/html/phpmyadmin/config.inc.php 

En este caso vamos a busar la cadena blowfish_secret y después de esa línea vamos a añadir la cadena $cfg['TempDir'] = '/tmp';

Una vez que hemos terminado todo el proceso modificamos el propietario y el grupo del directorio /var/www/html.

sudo chown -R apache:apache /var/www/html

6.2.2 Configuración de la base de datos de phpMyAdmin

Creación de la base de datos

Una vez que haya configurado el archivo de configuración debe crear una base de datos y un usuario para phpMyAdmin en MySQL.

En el archivo /var/www/html/phpmyadmin/sql/create_tables.sql tiene el script SQL para crear la base de datos e importar las tablas de phpMyAdmin.

sudo mysql -u root < /var/www/html/phpmyadmin/sql/create_tables.sql

Creación de un usuario para la base de datos

La base de datos que se ha creado se llama phpmyadmin. Ahora tendrá que crear un usuario y una contraseña para que pueda acceder a esa base de datos.

Recuerde que todos estos valores de configuración (nombre de la base de datos, usuario y contraseña) deberán ser variables en su script de instalación de bash.

Puede utilizar las siguientes sentencias SQL.

PMA_USER=pma_user
PMA_PASS=pma_pass
PMA_DB=phpmyadmin

sudo mysql -u root <<< "DROP USER IF EXISTS $PMA_USER@'%'"
sudo mysql -u root <<< "CREATE USER $PMA_USER@'%' IDENTIFIED BY '$PMA_PASS'"
sudo mysql -u root <<< "GRANT ALL PRIVILEGES ON $PMA_DB.* TO $PMA_USER@'%'"

7 Errores que pueden aparecer durante la instalación

Si durante la instalación obtiene el siguiente mensaje de error:

[Errno 12] Cannot allocate memory 
The downloaded packages were saved in cache until the next successful transaction. 
You can remove cached packages by executing 'dnf clean packages'.

Es posible que necesite incrementar la cantidad de memoria de RAM de la instancia. Si está creando instancias EC2 en AWS se recomienda utilizar al menos 4 GB de RAM.

Una posible solución es detener de forma temporal los servicios que estén haciendo un uso intensivo de memoria RAM. Una vez que detenga los servicios puede volver a intentar realizar la instalación y si la operación termina con éxito, puede volver a iniciar los servicios que había detenido.

8 Referencias

9 Licencia

Licencia de Creative Commons
Esta página forma parte del curso Implantación de Aplicaciones Web de José Juan Sánchez Hernández y su contenido se distribuye bajo una licencia Creative Commons Reconocimiento-NoComercial-CompartirIgual 4.0 Internacional.