Resumen del despliegue
Se ha desplegado una infraestructura Docker de alto rendimiento y seguridad para alojar este sitio WordPress en el servidor wp-ia.talentocorporativo.com. A continuación se detalla el trabajo realizado.
Arquitectura de servicios
- Traefik v3 — Proxy inverso con TLS automático vía Let’s Encrypt. Único contenedor expuesto en los puertos 80 y 443. Gestiona la redirección HTTP→HTTPS, cabeceras de seguridad y limitación de tasa de peticiones.
- Apache + PHP 8.3 — Servidor web con mod_php, OPcache+JIT (128 MB), extensión phpredis y módulos de compresión y caché de navegador.
- MariaDB (latest) — Base de datos con InnoDB tuneado (512 MB buffer pool), UTF8MB4 y log de errores para monitorización.
- Redis 7 — Caché de objetos en memoria con política LRU (256 MB). Conectado a WordPress mediante el plugin Redis Object Cache y la extensión phpredis nativa.
- phpMyAdmin — Administración de base de datos accesible solo bajo subdominio dedicado y protegido con Basic Auth en Traefik.
- WP-CLI — Contenedor on-demand para administración desatendida de WordPress por línea de comandos.
- fail2ban — Protección activa con 11 jails: SSH (vía journal de systemd), Apache (auth, badbots, noscript, overflows, shellshock, botsearch, fakegooglebot), PHP, WordPress login y MySQL. Baneos progresivos en iptables.
Red y aislamiento
Dos redes Docker diferenciadas: wpia_frontend (bridge con salida a internet, usada por Traefik, WordPress y phpMyAdmin) y wpia_backend (red interna sin salida, exclusiva de MariaDB y Redis). La base de datos y el caché nunca son accesibles desde el exterior.
Persistencia (bind mounts)
./wp_data— WordPress completo (uploads, plugins, temas, idiomas)./db_data— Datos de MariaDB./letsencrypt_data— Certificados Let’s Encrypt (acme.json, chmod 600)./traefick_data— Logs de Traefik./logs/apachey./logs/mysql— Logs leídos por fail2ban
Seguridad implementada
- TLS automático con Let’s Encrypt (certificado válido, renovación automática)
- Apache con
ServerTokens Prod+ServerSignature Off: versión y SO ocultos - Cabeceras HTTP de seguridad: HSTS con preload, X-Frame-Options DENY, X-Content-Type-Options nosniff, X-XSS-Protection, Referrer-Policy, Permissions-Policy
- mod_remoteip: Apache registra la IP real del cliente (no la de Traefik) para que fail2ban banee la dirección correcta
- Bloqueo de ficheros sensibles: wp-config.php, xmlrpc.php, .sql, .bak, .log, etc.
- Sin ejecución de PHP en el directorio uploads/
- DISALLOW_FILE_EDIT activado en WordPress
- fail2ban con baneos progresivos (1h → 2h → 4h → … hasta 1 semana) operando en DOCKER-USER e INPUT de iptables
Instalación desatendida
Todo el proceso de instalación se realizó de forma completamente automatizada mediante WP-CLI:
- WordPress instalado y configurado en español
- Tema Astra instalado y activado
- Plugin Yoast SEO instalado y activado
- Plugin Redis Object Cache instalado, activado y enlazado al servicio Redis
- Permalinks configurados en estructura
/%postname%/
Estado actual
Infraestructura completamente operativa. El sitio sirve con certificado TLS válido de Let’s Encrypt, la caché de objetos Redis está activa (conexión confirmada, phpredis como cliente), y los 11 jails de fail2ban monitorizan en tiempo real las conexiones SSH y el tráfico web.
Despliegue realizado el 2 de junio de 2026.