Configuración de Docker Compose para WordPress + MySQL 8.0 + phpMyAdmin
Cuándo usar este stack
Esta combinación es ideal para entornos de desarrollo local, pruebas de concepto (PoC) o staging que requieren despliegues rápidos y desacoplados de WordPress. Permite a los desarrolladores iterar sobre temas y plugins con paridad de infraestructura, mientras que phpMyAdmin facilita la inspección directa, depuración y manipulación de esquemas relacionales sin necesidad de clientes CLI o herramientas de escritorio locales. No se recomienda mantener phpMyAdmin activo en entornos productivos de alta concurrencia.
Variables de entorno críticas para producción
MYSQL_ROOT_PASSWORD(en el servicio MySQL): Debe establecerse con una cadena criptográficamente segura (mínimo 32 caracteres) para evitar accesos administrativos no autorizados a nivel de motor.WORDPRESS_DB_PASSWORD/MYSQL_PASSWORD(compartida entre WordPress y MySQL): Credencial del usuario de la base de datos con privilegios exclusivos sobre el esquema de WordPress.WORDPRESS_AUTH_KEY/WORDPRESS_SECURE_AUTH_KEY(y sales criptográficas): Claves secretas de cifrado para las cookies de sesión y hashes de contraseñas. Si no se configuran explícitamente, WordPress generará claves efímeras por contenedor, invalidando sesiones ante reinicios.
Consejo de Arquitectura: Seguridad y Rendimiento
Aísla phpMyAdmin y restringe el acceso a la red:
Elimina la exposición directa de puertos de phpMyAdmin (ports: - "8080:80") hacia internet público. En su lugar, agrúpalo en una red interna de Docker (internal: true) y accede a él exclusivamente mediante un túnel SSH o detrás de un Reverse Proxy (Traefik/Nginx) protegido con mTLS, autenticación básica HTTP y lista blanca de IPs. Mantener phpMyAdmin expuesto públicamente convierte el stack en un objetivo de alta prioridad para ataques de fuerza bruta automatizados.
En rendimiento (MySQL 8.0): Configura el parámetro --default-authentication-plugin=mysql_native_password si usas versiones anteriores del cliente PHP de WordPress, y limita la memoria en el compose (deploy.resources.limits.memory) ajustando innodb_buffer_pool_size para prevenir que el proceso sea terminado por el OOM Killer en instancias pequeñas.
Checklist de Seguridad antes de desplegar
- Cambiar las contraseñas por defecto en el archivo .env
- Mapear volúmenes persistentes en el VPS
- Configurar las reglas de firewall para los puertos requeridos