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, usuariowordpressuser - GLPI: Puerto 8081, base de datos
glpidb, usuarioglpiuser
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
-
Abra un navegador y acceda a http://127.0.0.1:8080/wordpress
-
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
- Nombre de la base de datos:
-
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
-
Abra un navegador y acceda a http://127.0.0.1:8081/glpi
-
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
- Nombre de la base de datos:
-
Inicie sesión con las credenciales por defecto:
- Usuario:
glpi - Contraseña:
glpi
- Usuario:
-
Importante: Cambie inmediatamente las contraseñas por defecto
-
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
- Abra los scripts
install_wordpress.shyinstall_glpi.sh - Añada comentarios (
#) explicando cada sección del script - 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:
- Modifique los archivos de configuración de Apache
- Modifique el archivo
ports.conf - Reinicie Apache
- 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
- Utilice
htoppara monitorear los recursos durante la instalación - Monitoree los logs de Apache en tiempo real
- Verifique el estado de MariaDB con
mysqladmin
Preguntas de Reflexión
Responda las siguientes preguntas en un documento separado:
-
¿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
-
¿Qué sucedería si WordPress y GLPI usaran ambos el puerto 80?
- Explique las implicaciones técnicas y las posibles soluciones
-
¿Por qué es necesario asegurar la instalación de MariaDB durante la configuración inicial?
- Detalle los riesgos si se omite este paso
-
¿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
-
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
| Comando | Descripción |
|---|---|
sudo systemctl status apache2 | Verificar el estado de Apache |
sudo systemctl restart apache2 | Reiniciar Apache |
sudo apache2ctl configtest | Probar la configuración de Apache |
sudo netstat -tulnp | grep :8080 | Verificar si el puerto está en escucha |
sudo tail -f /var/log/apache2/access.log | Monitorear los logs en tiempo real |
htop | Monitorear los procesos del sistema |
sudo mysqladmin -u root -p status | Verificar el estado de MariaDB |
sudo ufw allow 8080/tcp | Permitir 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