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.