Desarrollo con Docker Compose para WordPress

Contents

Desarrollo con Docker Compose para WordPress

En el ecosistema moderno de desarrollo web, Docker Compose se ha consolidado como una herramienta esencial para simplificar el despliegue y la orquestación de entornos complejos. En este artículo exploraremos en detalle cómo configurar un entorno de desarrollo de WordPress usando Docker Compose, abarcando desde los fundamentos hasta las mejores prácticas de producción.

1. ¿Por qué Docker Compose

  • Reproducibilidad: Define servicios, redes y volúmenes en un único archivo (docker-compose.yml), garantizando que todos los desarrolladores compartan el mismo entorno.
  • Aislamiento: Cada contenedor corre de forma independiente, evitando conflictos de dependencias.
  • Escalabilidad: Facilidad para aumentar o disminuir réplicas de servicios como bases de datos o balanceadores.
  • Rapidez: Los contenedores son más ligeros que las VM y se inician en fracciones de segundo.

2. Requisitos Previos

  • Sistema Operativo: Linux, macOS o Windows con Docker Desktop.
  • Docker: versión mínima 20.x. (https://docs.docker.com/engine/)
  • Docker Compose: versión mínima 1.29.x. (https://docs.docker.com/compose/)
  • Conocimientos básicos: Línea de comandos, YAML, fundamentos de WordPress.

3. Estructura del Proyecto

Estructura de carpetas sugerida:

  • docker-compose.yml
  • wp-config.php (opcionalmente personalizado)
  • Dockerfile (para añadir extensiones PHP específicas)
  • ./html/ (donde residirá el código de WordPress)
  • ./db_data/ (volumen para persistir datos de MySQL)

4. Archivo docker-compose.yml

version: 3.8
services:
db:
image: mysql:8.0
container_name: wp_db
volumes:
– db_data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: root_password
MYSQL_DATABASE: wordpress
MYSQL_USER: wp_user
MYSQL_PASSWORD: wp_pass
networks:
– wp_network

wordpress:
depends_on:
– db
build: .
image: custom_wp:latest
container_name: wp_app
ports:
– 8080:80
volumes:
– ./html:/var/www/html
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wp_user
WORDPRESS_DB_PASSWORD: wp_pass
WORDPRESS_DB_NAME: wordpress
networks:
– wp_network

volumes:
db_data:

networks:
wp_network:
driver: bridge

4.1 Explicación de cada sección

Clave Función
services.db Servicio MySQL 8.0 para WordPress.
services.wordpress Contenedor PHP Apache con WordPress.
volumes.db_data Persistencia de la base de datos.
networks.wp_network Red interna para comunicación entre contenedores.

5. Personalización con Dockerfile

Si necesitas extensiones de PHP adicionales o cambios en Apache, crea un Dockerfile junto al docker-compose.yml:

FROM php:8.0-apache
RUN apt-get update apt-get install -y
libzip-dev zip unzip
docker-php-ext-install mysqli pdo_mysql zip
COPY –chown=www-data:www-data html/ /var/www/html/
EXPOSE 80

6. Volúmenes y Permisos

  • Volumen de código: ./html:/var/www/html permite editar en caliente desde tu IDE.
  • Permisos: Asegúrate que el usuario del host tenga acceso a las carpetas. En Linux, chown -R UID:GID html/.
  • Persistencia de DB: Evita pérdida de datos usando volumes: db_data.

7. Flujo de Trabajo en Local

  1. Clona o inicia tu proyecto con git clone o composer create-project.
  2. Coloca los archivos de WordPress en ./html.
  3. Configura las credenciales en docker-compose.yml y wp-config.php si es necesario.
  4. Ejecuta docker-compose up -d --build.
  5. Visita http://localhost:8080 para completar la instalación.
  6. Desarrolla plugins o temas y prueba cambios en tiempo real.
  7. Para detener el entorno: docker-compose down.

8. Seguridad y Buenas Prácticas

  • Variables de entorno: No expongas contraseñas en texto plano. Usa .env y docker-compose --env-file.
  • Backups automatizados: Emplea volúmenes nombrados y scripts de respaldo periódicos.
  • Actualizaciones: Mantén imágenes oficiales y extiende versiones estables.
  • Escaneo de vulnerabilidades: Utiliza herramientas como Trivy o Grype.
  • Entorno de producción: Deshabilita plugins innecesarios y ajusta mecanismos de cache (Redis, WP Super Cache).

9. Despliegue y Escalabilidad

Para pasar de desarrollo a producción:

  • Utiliza Docker Swarm o Kubernetes para alta disponibilidad.
  • Configura proxies inversos como Traefik o Nginx.
  • Aplica autoescalado de instancias de aplicación, manteniendo la base de datos en un clúster separado.
  • Implementa CI/CD (GitLab CI, GitHub Actions) para pruebas automáticas y despliegues seguros.

10. Optimización de Rendimiento

  • Activa OPcache y PHP-FPM si es posible.
  • Emplea redes de entrega de contenido (CDN) para activos estáticos.
  • Configura un contenedor de Redis para objetos transitorios de WordPress.
  • Monitoriza con Prometheus y Grafana usando exporters.

11. Solución de Problemas Comunes

  • Error de conexión MySQL: Verifica que WORDPRESS_DB_HOST apunte correctamente a db:3306 y que el servicio db esté corriendo.
  • Permisos de archivos: Ajusta el user ID del contenedor o cambia permisos en el host.
  • Errores 502/504: Asegúrate de no tener conflictos de puerto y suficiente memoria asignada a Docker.
  • Cuellos de botella: Analiza logs con docker logs y herramientas de profiling.

12. Conclusión

Implementar un entorno de WordPress con Docker Compose acelera el desarrollo, reduce errores de configuración y facilita la transición a producción. Siguiendo las buenas prácticas mencionadas y personalizando tu docker-compose.yml y Dockerfile, podrás construir un flujo de trabajo robusto, seguro y escalable.

Referencias



Acepto donaciones de BAT's mediante el navegador Brave 🙂



Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *