Almacenamiento persistente en contenedores para Fathom Lite: Herramientas de respaldo

El análisis de sitios web centrado en la privacidad, como el proporcionado por Fathom Lite, requiere una estrategia robusta para proteger los datos recolectados. La naturaleza efímera de los contenedores puede ocasionar la pérdida irreversible de datos si no se implementan mecanismos de persistencia y respaldo adecuados. Este artículo aborda la configuración de un almacenamiento duradero y el desarrollo de herramientas de copia de seguridad automatizadas para asegurar la integridad de los datos analíticos.

Los conocimientos clave que se adquirirán incluyen:

  • Métodos para persistir datos fuera del ciclo de vida de un contenedor.
  • Creación y programación de scripts de respaldo.
  • Procedimientos para la restauración de datos desde copias de seguridad.
  • Configuración de alertas basadas en el estado de los respaldos.

Arquitectura para la persistencia de datos

De manera predeterminada, Fathom Lite emplea una base de datos SQLite. En un entorno containerizado, los datos generados se perderán al eliminarse el contenedor si no se montan volúmenes externos. Docker ofrece varias estrategias para aislar los datos de la aplicación.

Análisis del archivo de composición

Un archivo docker-compose.yml típico define múltiples servicios. Para este escenario, se consideran:

  • Servicio de aplicación (fathom): Se ejecuta la imagen principal, configurada con variables de entorno para la conexión a base de datos.
  • Servicio de base de datos (db): Se utiliza una imagen oficial de base de datos (ej. MySQL, PostgreSQL), cuyo directorio de datos se mapea a un volumen.
# Fragmento de configuración
services:
  app:
    image: fathom:latest
    environment:
      - "FATHOM_DATABASE_DRIVER=mysql"
      - "FATHOM_DATABASE_HOST=db:3306"
    depends_on:
      db:
        condition: service_healthy

  db:
    image: mysql:8.0
    volumes:
      - datos_db:/var/lib/mysql

volumes:
  datos_db:

Estrategias de persistencia disponibles

1. Montaje de directorio del anfitrión

Consiste en vincular un directorio del sistema de archivos del host al interior del contenedor. Es el enfoque más directo para la inspección y gestión de los archivos.

services:
  db:
    # ...
    volumes:
      - ./persistencia/datos_mysql:/var/lib/mysql

2. Volúmenes nombrados de Docker

Docker administra la ubicación física de los datos, lo que simplifica la gestión y el ciclo de vida del volumen.

volumes:
  vol_fathom_datos:
    driver: local

services:
  db:
    volumes:
      - vol_fathom_datos:/var/lib/mysql

3. Volúmenes de almacenamiento remoto

Ideal para arquitecturas distribuidas, permitiendo utilizar sistemas de archivos de red como NFS o almacenamientos definidos por software.

volumes:
  vol_fathom_nfs:
    driver: local
    driver_opts:
      type: nfs
      o: "addr=servidor-nfs.local,ro"
      device: ":/ruta/exportada/fathom"

Implementación de un sistema de respaldo

Script de copia de seguridad

Se crea un script en Bash que automatiza la exportación de la base de datos, gestiona la rotación de copias y registra eventos.

#!/bin/bash
# Script: respaldo_fathom.sh
# Propósito: Crear copias de seguridad comprimidas de la base de datos.

RUTA_RESPALDOS="/copias/fathom"
NOMBRE_CONTENEDOR_DB="fathom-db-1"
DIAS_CONSERVACION=30
USUARIO_DB="fathom_user"
NOMBRE_DB="fathom_db"
ARCHIVO_LOG="$RUTA_RESPALDOS/registro.log"

mkdir -p "$RUTA_RESPALDOS"

FECHA_HORA=$(date +%Y%m%d_%H%M%S)
ARCHIVO_RESPALDO="$RUTA_RESPALDOS/fathom_$FECHA_HORA.sql.gz"

# Ejecutar volcado y compresión
docker exec "$NOMBRE_CONTENEDOR_DB" mysqldump -u "$USUARIO_DB" -p"ContraseñaSegura" "$NOMBRE_DB" | gzip > "$ARCHIVO_RESPALDO"

if [ $? -eq 0 ]; then
    echo "[$(date)] Respaldo exitoso: $ARCHIVO_RESPALDO" >> "$ARCHIVO_LOG"
else
    echo "[$(date)] ERROR: Falló el respaldo." >> "$ARCHIVO_LOG"
    exit 1
fi

# Eliminar respaldos antiguos
find "$RUTA_RESPALDOS" -name "fathom_*.sql.gz" -mtime +$DIAS_CONSERVACION -exec rm -f {} \;

Automatización con cron

Programar el script para que se ejecute diariamente fuera de las horas pico.

# Ejecutar todos los días a las 2:30 AM
30 2 * * * /ruta/a/respaldo_fathom.sh

Procedimiento de restauración

Recuperación desde un archivo de respaldo

Secuencia de pasos para reintegrar los datos en caso de pérdida.

# 1. Detener los servicios activos
docker compose down

# 2. Inflar y restaurar el volcado SQL
gunzip < /copias/fathom/fathom_20251025_023000.sql.gz | docker exec -i fathom-db-1 mysql -u fathom_user -p"ContraseñaSegura" fathom_db

# 3. Reiniciar el entorno
docker compose up -d

Migración entre entornos

Transferir datos de un servidor de pruebas a producción.

# Exportar desde el origen
docker exec -t db_origen mysqldump -u root -p"Clave1" nombre_db > volcado_temporal.sql

# Importar en el destino
cat volcado_temporal.sql | docker exec -i db_destino mysql -u root -p"Clave2" nombre_db

Monitoreo y alertas

Verificación del estado de los respaldos

Un script para validar que se haya creado un respaldo reciente. Si no existe, puede integrarse con un sistema de notificaciones.

#!/bin/bash
# Script: verificar_respaldo.sh

RUTA_RESPALDOS="/copias/fathom"
ARCHIVO_RECIENTE=$(find "$RUTA_RESPALDOS" -name "*.sql.gz" -mmin -1440 | head -1)

if [ -z "$ARCHIVO_RECIENTE" ]; then
    # Ejemplo de notificación (adaptar al canal deseado)
    # curl -X POST ... "No se detectó un respaldo en las últimas 24 horas"
    echo "ALERTA: No hay respaldo reciente."
    exit 1
else
    echo "OK: Respaldo reciente encontrado: $ARCHIVO_RECIENTE"
    exit 0
fi

Health check del contenedor de base de datos

Incorporar una verificación de salud directamente en la definición del servicio en docker-compose.yml.

services:
  db:
    # ...
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 25s
      timeout: 10s
      retries: 4
      start_period: 30s

Consideraciones y mejores prácticas

  • Defensa en profundidad: Combinar volúmenes persistentes con respaldos programados y, si es posible, copias en un sistema de almacenamiento externo o en la nube.
  • Rendimiento: Programar los respaldos durante periodos de baja demanda. Emplear compresión y, para bases de datos muy grandes, considerar soluciones de respaldo incremental.
  • Seguridad: Aplicar permisos restrictivos (chmod 600) a los archivos de respaldo. Cifrar los volcados que contengan datos sensibles. Validar periódicamente la capacidad de restauración.

Etiquetas: Docker contenedores persistencia de datos copias de seguridad bash scripting

Publicado el 6-9 20:49