* Práctica 2.3: WordPress con MariaDB
Relación 2.3¶
Descripción¶
Actividad: Despliegue de WordPress con MariaDB
En esta práctica desplegarás un CMS (Sistema de Gestión de Contenidos) completo utilizando WordPress, una de las plataformas más populares para la creación de sitios web. Este despliegue requiere la integración de dos contenedores: un servidor web con WordPress y una base de datos MariaDB.
Objetivo general¶
Aprender a:
- Desplegar aplicaciones web complejas con dependencias de base de datos.
- Integrar múltiples servicios mediante redes Docker.
- Gestionar persistencia de datos tanto de la aplicación como de la base de datos.
- Configurar aplicaciones mediante múltiples variables de entorno.
- Comprender el ciclo de vida de aplicaciones con estado y base de datos.
- Trabajar con volúmenes para datos críticos.
Contexto de trabajo¶
WordPress es un CMS de código abierto que permite crear y gestionar sitios web de forma sencilla. Para su funcionamiento requiere:
Componentes de la arquitectura:
-
Servidor Web + WordPress:
- Servidor web Apache con PHP y WordPress instalado.
- Escucha en el puerto 80/tcp.
- Almacena contenido en
/var/www/html/wp-content. - Imagen Docker:
wordpress
-
Base de datos MariaDB:
- Sistema de gestión de base de datos relacional.
- Escucha en el puerto 3306/tcp.
- Almacena datos en
/var/lib/mysql. - Imagen Docker:
mariadb
Características importantes:
- WordPress necesita conectarse a la base de datos para almacenar contenido, usuarios, configuraciones, etc.
- Ambos servicios requieren persistencia de datos mediante volúmenes.
- La comunicación entre servicios se realiza mediante red Docker interna.
🔹 Parte 1: Despliegue básico de WordPress¶
Tarea 1.1: Preparación del entorno¶
-
Crea una red Docker personalizada llamada
red_wppara la comunicación entre los contenedores. -
Crea los directorios en el host para la persistencia de datos:
/opt/mysql_wp- Para los datos de MariaDB/opt/wordpress- Para el contenido de WordPress
-
Investiga en Docker Hub la documentación de las imágenes:
mariadb- Identifica las variables de entorno necesariaswordpress- Identifica las variables de entorno de configuración
Tarea 1.2: Despliegue del contenedor de base de datos¶
-
Despliega el contenedor de MariaDB con las siguientes características:
- Nombre del contenedor:
servidor_mysql - Conectado a la red
red_wp - Volumen montado desde
/opt/mysql_wpdel host a/var/lib/mysqldel contenedor - Variables de entorno necesarias:
- Nombre de la base de datos:
bd_wp - Usuario de la base de datos:
user_wp - Contraseña del usuario: (elige una segura)
- Contraseña del usuario root: (elige una segura)
- Nombre de la base de datos:
- Ejecutando en modo daemon
- Nombre del contenedor:
-
Verifica que el contenedor está en ejecución.
-
Inspecciona los logs del contenedor para ver el proceso de inicialización de la base de datos.
Tarea 1.3: Despliegue del contenedor de WordPress¶
-
Despliega el contenedor de WordPress con las siguientes características:
- Nombre del contenedor:
servidor_wp - Conectado a la red
red_wp - Volumen montado desde
/opt/wordpressdel host a/var/www/html/wp-contentdel contenedor - Puerto 80 del host mapeado al puerto 80 del contenedor
- Variables de entorno necesarias:
- Host de la base de datos: (nombre del contenedor de MariaDB)
- Usuario de la base de datos
- Contraseña de la base de datos
- Nombre de la base de datos
- Ejecutando en modo daemon
- Nombre del contenedor:
-
Verifica que el contenedor está en ejecución.
-
Accede a WordPress desde tu navegador (http://localhost).
Tarea 1.4: Instalación y configuración de WordPress¶
-
Completa la instalación de WordPress desde el navegador:
- Título del sitio
- Usuario administrador
- Contraseña del administrador
- Correo electrónico
-
Accede al panel de administración de WordPress.
-
Crea al menos:
- 2 páginas
- 3 entradas (posts)
- 1 categoría personalizada
-
Instala y activa un tema diferente al predeterminado.
-
Instala al menos un plugin.
🔹 Parte 2: Verificación de la persistencia¶
Tarea 2.1: Persistencia de WordPress¶
-
Detén y elimina el contenedor
servidor_wp(NO elimines el volumen). -
Verifica el contenido del directorio
/opt/wordpressen el host. -
Vuelve a crear el contenedor
servidor_wpcon la misma configuración. -
Accede a WordPress y verifica que:
- Todo el contenido creado sigue presente
- El tema instalado sigue activo
- Los plugins siguen instalados
Tarea 2.2: Persistencia de la base de datos¶
-
Detén y elimina ambos contenedores (NO elimines los volúmenes).
-
Verifica el contenido del directorio
/opt/mysql_wpen el host. -
Vuelve a crear ambos contenedores con la misma configuración.
-
Accede a WordPress y verifica que toda la información se mantiene.
🔹 Parte 3: Análisis de la arquitectura¶
Tarea 3.1: Comunicación entre contenedores¶
-
Desde el contenedor de WordPress, verifica la conectividad con la base de datos:
- Realiza un ping al contenedor de MariaDB
- Verifica que se puede resolver el nombre del contenedor de base de datos
-
Intenta acceder al puerto 3306 del contenedor de MariaDB desde el contenedor de WordPress.
-
Reflexiona sobre por qué WordPress puede acceder a MariaDB sin que este último tenga puertos expuestos al host.
Tarea 3.2: Variables de entorno y configuración automática¶
-
Inspecciona el archivo
wp-config.phpdentro del contenedor de WordPress. -
Verifica que las credenciales de la base de datos coinciden con las variables de entorno que definiste.
-
Investiga qué hace el script
docker-entrypoint.shen ambos contenedores.
🔹 Parte 4: Configuración avanzada¶
Tarea 4.1: Cambio del nombre del servidor de base de datos¶
-
Elimina ambos contenedores (mantén la red y los volúmenes).
-
Crea el contenedor de MariaDB con un nombre diferente, por ejemplo
mariadb_wordpress. -
Modifica la configuración del contenedor de WordPress para que se conecte al nuevo nombre del servidor de base de datos.
-
Verifica que WordPress funciona correctamente.
Tarea 4.2: Exposición de la base de datos¶
-
Recrea el contenedor de MariaDB exponiendo su puerto 3306 al host (por ejemplo, en el puerto 3307).
-
Utiliza un cliente de base de datos (MySQL Workbench, DBeaver, o
mysqldesde línea de comandos) para conectarte a la base de datos desde tu host. -
Explora las tablas creadas por WordPress.
-
Identifica dónde se almacenan:
- Los posts/entradas
- Las páginas
- Los usuarios
- Las opciones de configuración
🔹 Parte 5: Análisis y documentación¶
Tarea 5.1: Preguntas de análisis¶
Responde a las siguientes preguntas en tu documentación:
-
Arquitectura de la aplicación:
- ¿Por qué WordPress necesita una base de datos?
- ¿Qué tipo de datos se almacenan en la base de datos vs. en el volumen de WordPress?
- ¿Cómo se comunican WordPress y MariaDB?
-
Persistencia de datos:
- ¿Qué pasaría si no usáramos volúmenes?
- ¿Por qué es crítico hacer backups de ambos volúmenes?
- ¿Qué estrategias de backup recomendarías para un WordPress en producción?
-
Seguridad:
- ¿Es necesario exponer el puerto de MariaDB al host? ¿Por qué?
- ¿Qué riesgos de seguridad existen al exponer la base de datos?
- ¿Cómo mejorarías la seguridad de este despliegue?
-
Scripts de inicialización:
- ¿Qué función cumple el
docker-entrypoint.shen MariaDB? - ¿Qué función cumple el
docker-entrypoint.shen WordPress? - ¿En qué momento se crea el archivo
wp-config.php?
- ¿Qué función cumple el
-
Comparación con prácticas anteriores:
- ¿En qué se diferencia este despliegue de Guestbook?
- ¿En qué se diferencia de la aplicación Temperaturas?
- ¿Cuál es más compleja de mantener y por qué?
-
Escalabilidad y alta disponibilidad:
- ¿Se podría ejecutar múltiples instancias de WordPress conectadas a la misma base de datos?
- ¿Cómo se podría implementar alta disponibilidad en la base de datos?
- ¿Qué limitaciones tiene este despliegue para un entorno de producción?
Tarea 5.2: Comandos utilizados¶
Documenta todos los comandos Docker utilizados para:
- Crear la red y los directorios
- Desplegar y gestionar el contenedor de MariaDB
- Desplegar y gestionar el contenedor de WordPress
- Verificar logs y estado de los contenedores
- Inspeccionar la configuración de red
- Acceder y consultar la base de datos
🔹 Parte 6 (opcional): Docker Compose¶
Tarea 6.1: Archivo docker-compose.yml¶
-
Crea un archivo
docker-compose.ymlque defina toda la infraestructura de WordPress. -
El archivo debe incluir:
- Definición de la red
- Servicio de MariaDB con volumen y variables de entorno
- Servicio de WordPress con volumen, mapeo de puertos y variables de entorno
- Dependencia explícita de WordPress respecto a MariaDB
- Reinicio automático de los servicios
-
Despliega la aplicación completa con Docker Compose.
-
Verifica que todo funciona correctamente.
Tarea 6.2: Gestión con Docker Compose¶
-
Practica los comandos básicos de Docker Compose:
- Iniciar servicios
- Detener servicios
- Ver logs
- Escalar servicios (si es posible)
-
Documenta las ventajas de usar Docker Compose vs. comandos individuales de Docker.
Entregables¶
-
Documentación en formato Markdown o PDF que incluya:
- Todos los comandos utilizados en cada tarea
- Capturas de pantalla que demuestren:
- WordPress funcionando en el navegador
- Panel de administración de WordPress
- Contenido creado (páginas, posts, tema, plugins)
- Lista de contenedores en ejecución
- Inspección de la red Docker
- Estructura de directorios de los volúmenes
- Conexión a la base de datos y exploración de tablas
- Respuestas detalladas a todas las preguntas de análisis
- Comparación con las prácticas anteriores (Guestbook y Temperaturas)
-
(Opcional) Archivo
docker-compose.ymlfuncional y documentación de su uso.
Evaluación¶
Se evaluará:
- La correcta implementación de la arquitectura completa.
- El funcionamiento de WordPress con todos sus componentes.
- La demostración de persistencia de datos en ambos servicios.
- La exploración de la base de datos.
- La profundidad del análisis técnico.
- La claridad y completitud de la documentación.
- La comparación crítica entre diferentes arquitecturas de aplicaciones.
Condiciones de entrega¶
Las publicadas en la plataforma Moodle del curso.
Recursos de apoyo¶
- Documentación oficial de Docker: https://docs.docker.com
- Imagen MariaDB en Docker Hub: https://hub.docker.com/_/mariadb
- Imagen WordPress en Docker Hub: https://hub.docker.com/_/wordpress
- Documentación de WordPress: https://wordpress.org/support/
- Volúmenes en Docker: https://docs.docker.com/storage/volumes/
- Docker Compose: https://docs.docker.com/compose/
- Variables de entorno en Docker: https://docs.docker.com/engine/reference/commandline/run/#env