#!/usr/bin/env bash # Backup diario FRASA — cron: 17 2 * * * /opt/frasa-ecosystem/scripts/backup.sh set -euo pipefail BACKUP_DIR="/backups" FECHA=$(date +%Y%m%d) RETENCION_DIAS=30 mkdir -p "$BACKUP_DIR" cd "$(dirname "$0")/.." # 1. Base de datos SQLite del API (mientras no se migre a Postgres) docker compose exec -T api sh -c 'cat /data/dev.db' > "$BACKUP_DIR/frasa_db_$FECHA.sqlite" || true # 2. Postgres (cuando el API migre; hoy falla en silencio si no hay datos) docker compose exec -T postgres pg_dump -U "${POSTGRES_USER:-frasa_user}" "${POSTGRES_DB:-frasa_db}" \ > "$BACKUP_DIR/frasa_pg_$FECHA.sql" 2>/dev/null || rm -f "$BACKUP_DIR/frasa_pg_$FECHA.sql" # 3. Expedientes subidos (INE, firmas, comprobantes) docker compose exec -T api sh -c 'cd /data && tar czf - uploads' > "$BACKUP_DIR/uploads_$FECHA.tar.gz" || true # 4. Retención find "$BACKUP_DIR" -name "frasa_*" -mtime +$RETENCION_DIAS -delete find "$BACKUP_DIR" -name "uploads_*" -mtime +$RETENCION_DIAS -delete echo "[$(date -Is)] backup completo en $BACKUP_DIR"