Infraestructura WordPress de alto rendimiento: instalación y configuración

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/apache y ./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.

Leave a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll to Top