Blog
Docker para WordPress: Por qué los contenedores aislados lo cambian todo
Un cliente no puede afectar a otro. Un sitio no puede infectar a otro. Esta es la arquitectura detrás de la plataforma de hosting de PAGEnza.
El hosting tradicional de WordPress pone múltiples sitios en un solo servidor. Comparten PHP, comparten acceso al sistema de archivos y, a menudo, comparten un servidor de base de datos. Esto está bien hasta que deja de estarlo, y cuando deja de estarlo, es un problema grave.
PAGEnza provisiona cada sitio de WordPress en su propio contenedor Docker. Esta publicación explica qué significa eso en la práctica y por qué es importante para las agencias que gestionan múltiples sitios de clientes.
El problema del hosting compartido
En un plan de hosting compartido típico o incluso en un VPS básico con múltiples instalaciones de WordPress:
Contención de recursos: un sitio que experimenta un pico de tráfico ralentiza a todos los demás sitios en el servidor. Un plugin mal optimizado en el sitio A degrada el rendimiento en el sitio B.
Fuga de seguridad: si una instalación de WordPress se ve comprometida — a través de un plugin vulnerable, una contraseña débil o una versión obsoleta del núcleo — un atacante que obtiene acceso al sistema de archivos a menudo puede leer archivos de otros sitios en el mismo servidor.
Conflictos de versiones de PHP: el sitio A necesita PHP 7.4 para un plugin antiguo. El sitio B necesita PHP 8.2 para uno más nuevo. En el hosting compartido, eliges uno.
Exposición de la base de datos: los servidores de bases de datos compartidos significan que un permiso de usuario mal configurado puede exponer los datos de otros sitios.
Los contenedores Docker resuelven todos estos problemas a nivel de infraestructura.
Qué es realmente un contenedor
Un contenedor Docker es un proceso ligero y aislado que tiene su propio:
- Sistema de archivos (el contenedor no puede ver archivos fuera de sus límites)
- Pila de red (su propia dirección IP, sus propios puertos)
- Espacio de procesos (no puede ver los procesos de otros contenedores)
- Límites de recursos (límites de CPU y memoria)
Comparte el kernel del host con otros contenedores, pero todo lo que está por encima del kernel está aislado. No es una máquina virtual completa — se inicia en segundos, no en minutos, y utiliza una fracción de los recursos.
Para WordPress, un solo contenedor ejecuta: Nginx, PHP-FPM y los archivos de WordPress. La base de datos se ejecuta en un contenedor separado, conectado solo a ese contenedor específico de WordPress.
Cómo PAGEnza provisiona un sitio
Cuando creas un nuevo sitio de cliente en PAGEnza, esto es lo que sucede en menos de 45 segundos:
- Se inicia un nuevo contenedor Docker a partir de una imagen base de WordPress
- WordPress se configura con una base de datos nueva en la instancia compartida de MariaDB (aislada a las credenciales de ese contenedor)
- El plugin PAGEnza se instala y activa automáticamente
- Se configura un host virtual Nginx con el subdominio del cliente
- Se emite SSL a través de Let's Encrypt
- El contenedor se registra en el proxy inverso con las reglas de enrutamiento correctas
El cliente obtiene una URL como nombrecliente.pagenza.com que está activa en los 45 segundos posteriores a hacer clic en "Crear sitio". Sin configuración manual del servidor, sin SSH, sin tiempo de espera de DNS (para el subdominio — la propagación de DNS de dominios personalizados es aparte).
Aislamiento de contenedores en la práctica
Límites de memoria: cada contenedor tiene un límite de memoria configurable. Si un plugin descontrolado causa un pico de memoria en el sitio de un cliente, no puede consumir la memoria asignada a otros contenedores. El sitio puede ralentizarse o devolver un 503, pero no afectará a otros clientes.
Aislamiento del sistema de archivos: los archivos de WordPress del cliente A son completamente invisibles para el contenedor del cliente B. Un plugin comprometido en el sitio del cliente A no tiene acceso a los archivos del cliente B.
Aislamiento de red: los contenedores se comunican solo a través de puentes de red definidos. El contenedor de base de datos del cliente A solo acepta conexiones del contenedor de WordPress del cliente A, no de ningún otro contenedor en el sistema.
PHP por contenedor: dado que cada contenedor ejecuta su propia instancia de PHP-FPM, puedes ejecutar diferentes versiones de PHP para diferentes clientes. El plugin heredado del cliente A que necesita PHP 7.4 funciona bien junto con la pila moderna del cliente B en PHP 8.2.
Dominios personalizados
La configuración predeterminada otorga a cada cliente un subdominio *.pagenza.com. Para los clientes que desean su propio dominio, el proceso es:
- El cliente apunta el registro A de su dominio a la IP del servidor PAGEnza
- En el panel de control de PAGEnza, ingresas el dominio personalizado
- La configuración del proxy inverso se actualiza automáticamente
- Se emite SSL para el dominio personalizado a través de Let's Encrypt
Las opciones siteurl y home de WordPress se actualizan para que coincidan. Desde la perspectiva del cliente, su sitio simplemente funciona en su dominio, sin redirección, sin subdominio visible para los visitantes.
Qué significa esto para las agencias
El beneficio práctico para las agencias que gestionan múltiples sitios de clientes:
Velocidad de incorporación: la provisión de un nuevo sitio de cliente lleva menos de un minuto. Sin configuración de servidor, sin cPanel, sin instalación manual de WordPress.
Separación de clientes: el sitio de cada cliente está genuinamente aislado. Un cliente que instala un plugin problemático solo afecta a su propio sitio.
Escalabilidad: agregar un nuevo cliente no requiere aprovisionar un nuevo servidor. La infraestructura de contenedores escala a la capacidad del host, y agregar más capacidad es cuestión de agregar más nodos host.
Recuperación ante desastres: dado que cada sitio está contenerizado, la copia de seguridad y la restauración operan a nivel de contenedor. Restaurar el sitio de un solo cliente no afecta a ningún otro cliente.
La desventaja es que el hosting en contenedores cuesta más por sitio que el hosting compartido. Pero para las agencias donde la confiabilidad del sitio y la separación de clientes son innegociables, la economía cuadra, especialmente cuando se tienen en cuenta los ahorros de tiempo de aprovisionamiento.