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
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
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
:
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
- Clona o inicia tu proyecto con
git clone
ocomposer create-project
. - Coloca los archivos de WordPress en
./html
. - Configura las credenciales en
docker-compose.yml
ywp-config.php
si es necesario. - Ejecuta
docker-compose up -d --build
. - Visita http://localhost:8080 para completar la instalación.
- Desarrolla plugins o temas y prueba cambios en tiempo real.
- 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
ydocker-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 adb:3306
y que el serviciodb
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 🙂 |