En este artículo detallo la arquitectura y el flujo de trabajo de la infraestructura que soporta este blog. Se trata de una solución robusta, escalable y automatizada que combina la flexibilidad de un CMS flat-file como Grav con la potencia de la virtualización moderna y el almacenamiento en red profesional.


1. El Corazón del Sistema: Ubuntu 24.04 LTS

El servidor opera sobre la última versión de soporte extendido (LTS) de Ubuntu, Noble Numbat. Esta elección garantiza:

  • Estabilidad: Kernel optimizado y repositorios actualizados.
  • Seguridad: Parches críticos durante al menos 5 años.
  • Compatibilidad: Soporte nativo y optimizado para el motor de Docker actual.

2. Almacenamiento Persistente con TrueNAS y NFS

Una de las piezas clave de esta arquitectura es el desacoplamiento de los datos y el motor de ejecución.

  • Tecnología: El directorio reside en un servidor TrueNAS externo, montado en Ubuntu vía NFS.
  • Ventajas:
    • Persistencia real: Los datos están seguros en el pool ZFS de TrueNAS independientemente del nodo de computación.
    • Backups: TrueNAS gestiona snapshots periódicos a nivel de dataset.
    • Rendimiento: Latencia mínima para un CMS basado en archivos.

3. Orquestación con Docker Compose

El despliegue se gestiona mediante contenedores, lo que facilita la portabilidad y el aislamiento.

services:
  grav:
    image: lscr.io/linuxserver/grav:latest
    container_name: grav-cms
    restart: unless-stopped
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Madrid
    networks:
      - proxy_network
    volumes:
      - ./config:/config
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.grav.rule=Host(`antoniotirado.com`)"
      - "traefik.http.routers.grav.tls.certresolver=letsencrypt"

4. Networking y Seguridad: El Proxy Traefik

El tráfico externo es gestionado por Traefik:

  • HTTPS Automático: Gestión de certificados SSL vía Let's Encrypt.
  • Aislamiento: El contenedor Grav solo se comunica a través de la red interna proxy_network.

5. Optimización Interna (Nginx)

Dentro del contenedor, Nginx está ajustado para:

  • Seguridad: Bloqueo de carpetas sensibles (system/, vendor/, etc.).
  • Caché: Expiración de 30 días para activos estáticos.
  • Compresión: Gzip activo para acelerar la carga.

6. Mantenimiento y Salud

  • Grav Scheduler: Monitorización de tareas en scheduler.log.
  • Backups: Generación automática de snapshots en config/www/backup/.
  • Diagnóstico: Uso del plugin "Problems" para verificar la integridad del entorno.

Este despliegue representa un equilibrio entre sencillez para el autor y sofisticación técnica en la infraestructura, garantizando que el sitio sea rápido, seguro y fácil de mantener.

Entrada Anterior