LAMP Stack en RHEL
Implantación de Aplicaciones Web
Curso 2024/2025
1 LAMP Stack en RHEL
LAMP es el acrónimo usado para describir un sistema de infraestructura de Internet que usa las siguientes herramientas:
- Linux (Sistema Operativo)
- Apache (Servidor Web)
- MySQL/MariaDB (Sistema Gestor de Bases de Datos)
- PHP (Lenguaje de programación)
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
- 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
- Después de la instalación es necesario reiniciar el servicio de Apache para que se apliquen los cambios.
sudo systemctl restart httpd
- Accedemos al directorio
/var/www/html
.
cd /var/www/html
- Instalamos la utilidad
wget
para poder descargar el código fuente dephpMyAdmin
.
sudo dnf install wget -y
- 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
.
- Descomprimimos el archivo que acabamos de descargar.
sudo tar xvf phpMyAdmin-latest-all-languages.tar.gz
- Eliminamos el archivo
.tar.gz
.
sudo rm phpMyAdmin-latest-all-languages.tar.gz
- Renombramos el directorio.
sudo mv phpMyAdmin-5.2.1-all-languages/ phpmyadmin
- 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:
- Configurar el archivo de configuración
config.inc.php
. - Configuración de la base de datos para
phpMyAdmin
.- Creación de la base de datos.
- Creación de un usuario para la base de datos.
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:
$cfg['blowfish_secret']
: Configura un valor aleatorio de 32 caracteres que se utiliza como clave secreta para cifrar las cookies de sesión de phpMyAdmin.$cfg['TempDir']
: Configura un directorio temporal.
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.
i
: Indica que queremos que los cambios se tienen que aplicar directamente en el archivo que se pasa como parámetro. Si no se utilizase este paráemtro, los cambios se mostrarían por la salida estándar pero el archivo no se modificaría.s/cadena_a_buscar/cadena_de_reemplazo/
: La sintaxis Es la sintaxis que se utiliza para buscar y reemplazar texto en un archivo. En este caso, se busca la cadena$cfg['blowfish_secret'] =
y se reemplaza por la cadena$cfg['blowfish_secret'] = '$RANDOM_VALUE';
.Observe que se utiliza la barra invertida o backslash
\
para escapar los caracteres(
,[
y$
.En la cadena de reemplazo se utiliza
\1 '$RANDOM_VALUE';
. El número\1
quiere decir que se debe poner el patrón que hemos buscado, es decir, se pondrá$cfg['blowfish_secret'] =
seguido del contenido de la variable$RANDOM_VALUE
.
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
- How to Install Latest PHP 8.1 on RHEL Linux
- How To Install phpMyAdmin on CentOS 8 / RHEL 8
- Instalación de phpMyAdmin. Documentación de la página oficial.
- How
to use
sed
to find and replace text in files in Linux/Unix shell - Despliegue de diferentes tipos de servidores. Red Hat Enterprise Linux 8 (HTML)
- Despliegue de diferentes tipos de servidores. Red Hat Enterprise Linux 8 (PDF)
9 Licencia
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.