← Volver al Generador Principal

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

  1. 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.
  2. 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.
  3. 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