Saltar al contenido principal

Lab 5.6 - Instalación de WordPress y GLPI en un Servidor Linux (Ubuntu 24.04)

Objetivos​

Al final de este laboratorio, usted será capaz de:

  • Instalar y configurar Apache con múltiples VirtualHosts
  • Instalar y configurar MariaDB con múltiples bases de datos
  • Instalar WordPress y GLPI en puertos distintos
  • Configurar permisos y seguridad
  • Utilizar scripts shell para automatizar la instalación
  • Gestionar los servicios web y bases de datos

Requisitos Previos​

  • Ubuntu 24.04 instalado
  • Acceso sudo/root
  • Al menos 2 GB de RAM disponible
  • Al menos 5 GB de espacio libre en disco
  • Conexión a Internet

Visión General​

Esta guía proporciona las instrucciones y scripts shell para instalar WordPress y GLPI en un servidor Linux Ubuntu 24.04. Ambas aplicaciones utilizarán puertos y usuarios distintos para evitar cualquier conflicto.

Arquitectura:

  • WordPress: Puerto 8080, base de datos wordpressdb, usuario wordpressuser
  • GLPI: Puerto 8081, base de datos glpidb, usuario glpiuser

Parte 1: Instalación de WordPress​

Paso 1: Crear el script de instalación​

Cree un archivo de script para WordPress:

nano install_wordpress.sh

Paso 2: Contenido del script​

Copie el siguiente contenido en el archivo:

#!/bin/bash

# Actualización de paquetes e instalación de los componentes necesarios
sudo apt update
sudo apt install -y apache2 php php-{mysql,xml,mbstring,curl,zip,gd} libapache2-mod-php mariadb-server wget

# Asegurar la instalación de MariaDB
sudo mysql_secure_installation

# Conexión a MariaDB y creación de la base de datos y usuario de WordPress
sudo mysql -u root <<EOF
CREATE DATABASE wordpressdb;
CREATE USER 'wordpressuser'@'localhost' IDENTIFIED BY 'securepassword1';
GRANT ALL PRIVILEGES ON wordpressdb.* TO 'wordpressuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
EOF

# Descarga y extracción de WordPress
cd /tmp
wget https://wordpress.org/latest.tar.gz
sudo tar xzvf latest.tar.gz -C /var/www/html/

# Configuración de permisos
sudo chown -R www-data:www-data /var/www/html/wordpress
sudo chmod -R 775 /var/www/html/wordpress

# Creación del archivo de configuración para WordPress en Apache
sudo bash -c 'cat <<EOT > /etc/apache2/sites-available/wordpress.conf
<VirtualHost *:8080>
ServerName localhost
DocumentRoot /var/www/html/wordpress

<Directory /var/www/html/wordpress>
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>

ErrorLog ${APACHE_LOG_DIR}/wordpress_error.log
CustomLog ${APACHE_LOG_DIR}/wordpress_access.log combined
</VirtualHost>
EOT'

# Configuración del puerto 8080
echo "Listen 8080" | sudo tee -a /etc/apache2/ports.conf

# Activación de la configuración y reinicio de Apache
sudo a2ensite wordpress.conf
sudo a2enmod rewrite
sudo systemctl restart apache2

# Instrucciones para la instalación vía interfaz web
echo "Instalación vía interfaz web:"
echo "Abra un navegador y acceda a http://127.0.0.1:8080/wordpress"
echo "Siga el asistente de instalación proporcionando la información de la base de datos:"
echo "Nombre de la base de datos: wordpressdb"
echo "Nombre de usuario: wordpressuser"
echo "Contraseña: securepassword1"
echo "Host de la base de datos: localhost"

Paso 3: Hacer el script ejecutable y ejecutarlo​

chmod +x install_wordpress.sh
./install_wordpress.sh

Paso 4: Respuestas para mysql_secure_installation​

Durante la ejecución del script, se le pedirá que responda preguntas para asegurar MariaDB. Aquí están las respuestas recomendadas:

Enter current password for root : [Presione Enter]
Switch to unix_socket authentication [Y/n] Y
Change the root password? [Y/n] n
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] n
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y

Paso 5: Instalación vía interfaz web​

  1. Abra un navegador y acceda a http://127.0.0.1:8080/wordpress

  2. Siga el asistente de instalación proporcionando la información de la base de datos:

    • Nombre de la base de datos: wordpressdb
    • Nombre de usuario: wordpressuser
    • Contraseña: securepassword1
    • Host de la base de datos: localhost
  3. Complete la instalación creando una cuenta de administrador de WordPress

Paso 6: Verificación​

# Verificar que Apache escucha en el puerto 8080
sudo netstat -tulnp | grep :8080

# Verificar el estado de Apache
sudo systemctl status apache2

# Verificar los logs
sudo tail -f /var/log/apache2/wordpress_access.log

Parte 2: Instalación de GLPI​

Paso 1: Crear el script de instalación​

Cree un archivo de script para GLPI:

nano install_glpi.sh

Paso 2: Contenido del script​

Copie el siguiente contenido en el archivo:

#!/bin/bash

# Actualización de paquetes e instalación de los componentes necesarios
sudo apt update
sudo apt install -y apache2 php php-{apcu,cli,common,curl,gd,imap,ldap,mysql,xmlrpc,xml,mbstring,bcmath,intl,zip,bz2} libapache2-mod-php mariadb-server wget

# Asegurar la instalación de MariaDB (si no se ha hecho ya)
# sudo mysql_secure_installation

# Conexión a MariaDB y creación de la base de datos y usuario de GLPI
sudo mysql -u root <<EOF
CREATE DATABASE glpidb;
CREATE USER 'glpiuser'@'localhost' IDENTIFIED BY 'securepassword2';
GRANT ALL PRIVILEGES ON glpidb.* TO 'glpiuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
EOF

# Descarga y extracción de GLPI
cd /tmp
wget https://github.com/glpi-project/glpi/releases/download/10.0.7/glpi-10.0.7.tgz
sudo tar xvf glpi-10.0.7.tgz -C /var/www/html/

# Configuración de permisos
sudo chown -R www-data:www-data /var/www/html/glpi
sudo chmod -R 775 /var/www/html/glpi

# Creación del archivo de configuración para GLPI en Apache
sudo bash -c 'cat <<EOT > /etc/apache2/sites-available/glpi.conf
<VirtualHost *:8081>
ServerName localhost
DocumentRoot /var/www/html/glpi/public

<Directory /var/www/html/glpi/public>
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>

ErrorLog ${APACHE_LOG_DIR}/glpi_error.log
CustomLog ${APACHE_LOG_DIR}/glpi_access.log combined
</VirtualHost>
EOT'

# Configuración del puerto 8081
echo "Listen 8081" | sudo tee -a /etc/apache2/ports.conf

# Activación de la configuración y reinicio de Apache
sudo a2ensite glpi.conf
sudo a2enmod rewrite
sudo systemctl restart apache2

# Instrucciones para la instalación vía interfaz web
echo "Instalación vía interfaz web:"
echo "Abra un navegador y acceda a http://127.0.0.1:8081/glpi"
echo "Siga el asistente de instalación proporcionando la información de la base de datos:"
echo "Nombre de la base de datos: glpidb"
echo "Nombre de usuario: glpiuser"
echo "Contraseña: securepassword2"
echo "Host de la base de datos: localhost"

Paso 3: Hacer el script ejecutable y ejecutarlo​

chmod +x install_glpi.sh
./install_glpi.sh

Paso 4: Instalación vía interfaz web​

  1. Abra un navegador y acceda a http://127.0.0.1:8081/glpi

  2. Siga el asistente de instalación proporcionando la información de la base de datos:

    • Nombre de la base de datos: glpidb
    • Nombre de usuario: glpiuser
    • Contraseña: securepassword2
    • Host de la base de datos: localhost
  3. Inicie sesión con las credenciales por defecto:

    • Usuario: glpi
    • Contraseña: glpi
  4. Importante: Cambie inmediatamente las contraseñas por defecto

  5. Elimine el archivo de instalación por razones de seguridad:

sudo rm /var/www/html/glpi/install/install.php

Parte 3: Comandos Avanzados y Seguridad​

Gestión de permisos​

# Definir los permisos de archivos de manera recursiva
sudo find /var/www/html/wordpress -type f -exec chmod 644 {} \;
sudo find /var/www/html/glpi -type f -exec chmod 644 {} \;

# Definir los permisos de directorios
sudo find /var/www/html/wordpress -type d -exec chmod 755 {} \;
sudo find /var/www/html/glpi -type d -exec chmod 755 {} \;

Configuración del firewall (UFW)​

# Permitir los puertos necesarios
sudo ufw allow 8080/tcp
sudo ufw allow 8081/tcp

# Verificar el estado
sudo ufw status

Monitoreo en tiempo real​

# Monitorear los logs de Apache
sudo tail -f /var/log/apache2/access.log
sudo tail -f /var/log/apache2/wordpress_access.log
sudo tail -f /var/log/apache2/glpi_access.log

# Monitorear los procesos del sistema
htop

# Monitorear el estado de MySQL/MariaDB
sudo mysqladmin -u root -p status

Parte 4: Resolución de Problemas​

Error de configuración de Apache​

Si encuentra un error de configuración de Apache:

# Verificar la sintaxis de la configuración
sudo apache2ctl configtest

# Ver los logs detallados
sudo journalctl -xeu apache2.service

# Verificar los archivos de configuración
sudo nano /etc/apache2/sites-available/wordpress.conf
sudo nano /etc/apache2/sites-available/glpi.conf

Verificar que los puertos estén libres​

# Verificar los puertos en escucha
sudo netstat -tulnp | grep :8080
sudo netstat -tulnp | grep :8081

# Alternativa con ss
sudo ss -tulnp | grep :8080
sudo ss -tulnp | grep :8081

Verificar los permisos​

# Verificar los permisos de los directorios
ls -ld /var/www/html/wordpress
ls -ld /var/www/html/glpi

# Verificar el propietario
ls -la /var/www/html/

Parte 5: Ejercicios Prácticos​

Ejercicio 1: Añadir comentarios a los scripts​

  1. Abra los scripts install_wordpress.sh y install_glpi.sh
  2. Añada comentarios (#) explicando cada sección del script
  3. Explique qué hace cada comando importante

Ejercicio 2: Cambiar los puertos​

Modifique los puertos para usar 8080 y 8082 en lugar de 8080 y 8081:

  1. Modifique los archivos de configuración de Apache
  2. Modifique el archivo ports.conf
  3. Reinicie Apache
  4. Pruebe el acceso a las aplicaciones

Comandos a utilizar:

# Modificar el puerto en la configuración de GLPI
sudo nano /etc/apache2/sites-available/glpi.conf
# Cambie *:8081 por *:8082

# Añadir el puerto 8082
echo "Listen 8082" | sudo tee -a /etc/apache2/ports.conf

# Reiniciar Apache
sudo systemctl restart apache2

# Verificar
sudo netstat -tulnp | grep :8082

Ejercicio 3: Monitoreo y supervisión​

  1. Utilice htop para monitorear los recursos durante la instalación
  2. Monitoree los logs de Apache en tiempo real
  3. Verifique el estado de MariaDB con mysqladmin

Preguntas de Reflexión​

Responda las siguientes preguntas en un documento separado:

  1. ¿Cuál es la importancia de configurar usuarios y bases de datos distintos para WordPress y GLPI?

    • Explique los riesgos de seguridad si ambas aplicaciones compartieran la misma base de datos
  2. ¿Qué sucedería si WordPress y GLPI usaran ambos el puerto 80?

    • Explique las implicaciones técnicas y las posibles soluciones
  3. ¿Por qué es necesario asegurar la instalación de MariaDB durante la configuración inicial?

    • Detalle los riesgos si se omite este paso
  4. ¿Qué relación existe entre la base de datos y los archivos de WordPress/GLPI descargados en el servidor?

    • Explique cómo interactúan ambos
  5. Explique qué sucede cuando accede a WordPress o GLPI a través de un navegador después de la instalación.

    • Describa el flujo de la solicitud desde el navegador hasta la base de datos

Anexo 1: Métodos de Configuración de Puertos​

Método 1: Archivo de configuración separado (Recomendado)​

# Crear un archivo de configuración para el puerto
sudo bash -c 'echo "Listen 8080" > /etc/apache2/conf-available/port8080.conf'
sudo bash -c 'echo "Listen 8081" > /etc/apache2/conf-available/port8081.conf'

# Activar las configuraciones
sudo a2enconf port8080
sudo a2enconf port8081

# Reiniciar Apache
sudo systemctl restart apache2

Ventajas:

  • Más modular
  • Facilita la gestión de configuraciones
  • No modifica los archivos principales

Método 2: Adición directa en ports.conf​

# Añadir directamente en ports.conf
echo "Listen 8080" | sudo tee -a /etc/apache2/ports.conf
echo "Listen 8081" | sudo tee -a /etc/apache2/ports.conf

# Reiniciar Apache
sudo systemctl restart apache2

Ventajas:

  • Simple y rápido
  • Todas las configuraciones de puertos en el mismo lugar

Desventajas:

  • Modifica el archivo principal
  • Menos modular

Diferencia entre tee y bash -c​

echo "Listen 8081" | sudo tee -a /etc/apache2/ports.conf :

  • Modifica directamente el archivo de configuración principal
  • Simple pero menos modular
  • Todas las configuraciones en el mismo lugar

sudo bash -c 'echo "Listen 8080" > /etc/apache2/conf-available/port8080.conf' :

  • Crea un archivo de configuración separado
  • Más modular y estructurado
  • Permite activar/desactivar fácilmente
  • No modifica los archivos principales

Anexo 2: Seguridad Avanzada​

Eliminar los archivos de instalación​

# WordPress (si está presente)
sudo rm -rf /var/www/html/wordpress/wp-admin/install.php

# GLPI
sudo rm /var/www/html/glpi/install/install.php

Configurar permisos estrictos​

# Permisos para WordPress
sudo chown -R www-data:www-data /var/www/html/wordpress
sudo find /var/www/html/wordpress -type d -exec chmod 755 {} \;
sudo find /var/www/html/wordpress -type f -exec chmod 644 {} \;

# Permisos para GLPI
sudo chown -R www-data:www-data /var/www/html/glpi
sudo find /var/www/html/glpi -type d -exec chmod 755 {} \;
sudo find /var/www/html/glpi -type f -exec chmod 644 {} \;

Configurar respaldos​

# Script de respaldo de base de datos WordPress
sudo mysqldump -u wordpressuser -p wordpressdb > /backup/wordpress_$(date +%Y%m%d).sql

# Script de respaldo de base de datos GLPI
sudo mysqldump -u glpiuser -p glpidb > /backup/glpi_$(date +%Y%m%d).sql

Resumen de Comandos Importantes​

ComandoDescripción
sudo systemctl status apache2Verificar el estado de Apache
sudo systemctl restart apache2Reiniciar Apache
sudo apache2ctl configtestProbar la configuración de Apache
sudo netstat -tulnp | grep :8080Verificar si el puerto está en escucha
sudo tail -f /var/log/apache2/access.logMonitorear los logs en tiempo real
htopMonitorear los procesos del sistema
sudo mysqladmin -u root -p statusVerificar el estado de MariaDB
sudo ufw allow 8080/tcpPermitir el puerto en el firewall

Verificación Final​

Verifique que ha logrado:

  • Instalar WordPress en el puerto 8080
  • Instalar GLPI en el puerto 8081
  • Configurar las bases de datos distintas
  • Acceder a ambas aplicaciones vía navegador
  • Configurar el firewall (UFW)
  • Comprender la diferencia entre los métodos de configuración de puertos
  • Añadir comentarios a los scripts
  • Responder a las preguntas de reflexión

Próximos Pasos​

  • Módulo 7: Red y Configuración (para profundizar en la configuración de red)
  • Módulo 8: Servicios y Demonios (para automatizar con systemd)
  • Módulo 9: Seguridad del Sistema (para asegurar aún más las instalaciones)

Recursos Complementarios​


Lab creado el: Diciembre 2024