Initial commit: MSP Monitor Dashboard

- Next.js 14 frontend with dark cyan/navy theme
- tRPC API with Prisma ORM
- MeshCentral, LibreNMS, Headwind MDM integrations
- Multi-tenant architecture
- Alert system with email/SMS/webhook notifications
- Docker Compose deployment
- Complete documentation
This commit is contained in:
MSP Monitor
2026-01-21 19:29:20 +00:00
commit f4491757d9
57 changed files with 10503 additions and 0 deletions

103
scripts/restore-db.sh Normal file
View File

@@ -0,0 +1,103 @@
#!/bin/bash
# MSP Monitor Dashboard - Database Restore Script
# Restaura un backup de la base de datos PostgreSQL
set -e
# Verificar argumentos
if [ -z "$1" ]; then
echo "Uso: $0 <archivo_backup>"
echo ""
echo "Ejemplo: $0 /backups/msp_monitor_20240115_120000.sql.gz"
echo ""
echo "Backups disponibles:"
ls -la ${BACKUP_DIR:-/backups}/msp_monitor_*.sql.gz 2>/dev/null || echo "No se encontraron backups"
exit 1
fi
BACKUP_FILE="$1"
# Verificar que el archivo existe
if [ ! -f "$BACKUP_FILE" ]; then
echo "[✗] Archivo no encontrado: $BACKUP_FILE"
exit 1
fi
# Cargar variables de entorno
if [ -f .env ]; then
export $(cat .env | grep -v '^#' | xargs)
fi
# Valores por defecto
DB_HOST="${DB_HOST:-localhost}"
DB_PORT="${DB_PORT:-5432}"
DB_USER="${POSTGRES_USER:-mspmonitor}"
DB_NAME="${POSTGRES_DB:-msp_monitor}"
DB_PASSWORD="${POSTGRES_PASSWORD:-changeme}"
echo "======================================"
echo " MSP Monitor - Database Restore"
echo "======================================"
echo "Fecha: $(date)"
echo "Archivo: $BACKUP_FILE"
echo "Base de datos: $DB_NAME"
echo ""
# Confirmar restauracion
echo "ADVERTENCIA: Esta operacion eliminara todos los datos actuales."
read -p "¿Desea continuar? (si/no): " CONFIRM
if [ "$CONFIRM" != "si" ]; then
echo "Operacion cancelada"
exit 0
fi
export PGPASSWORD="$DB_PASSWORD"
# Crear backup de seguridad antes de restaurar
echo ""
echo "Creando backup de seguridad antes de restaurar..."
SAFETY_BACKUP="/tmp/msp_monitor_pre_restore_$(date +%Y%m%d_%H%M%S).sql.gz"
pg_dump -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d "$DB_NAME" \
--no-owner --no-privileges --format=custom | gzip > "$SAFETY_BACKUP"
echo "[✓] Backup de seguridad: $SAFETY_BACKUP"
# Terminar conexiones activas
echo ""
echo "Terminando conexiones activas..."
psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d postgres -c \
"SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = '$DB_NAME' AND pid <> pg_backend_pid();" \
> /dev/null 2>&1 || true
# Eliminar y recrear base de datos
echo ""
echo "Recreando base de datos..."
psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d postgres -c "DROP DATABASE IF EXISTS $DB_NAME;"
psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d postgres -c "CREATE DATABASE $DB_NAME;"
echo "[✓] Base de datos recreada"
# Restaurar backup
echo ""
echo "Restaurando backup..."
if [[ "$BACKUP_FILE" == *.gz ]]; then
gunzip -c "$BACKUP_FILE" | pg_restore -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d "$DB_NAME" --no-owner --no-privileges
else
pg_restore -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d "$DB_NAME" --no-owner --no-privileges "$BACKUP_FILE"
fi
echo "[✓] Backup restaurado"
unset PGPASSWORD
# Aplicar migraciones pendientes
echo ""
echo "Verificando migraciones..."
npx prisma db push --skip-generate 2>/dev/null || echo "[!] No se pudieron aplicar migraciones automaticamente"
echo ""
echo "======================================"
echo " Restauracion completada"
echo "======================================"
echo ""
echo "El backup de seguridad esta en: $SAFETY_BACKUP"
echo "Elimine manualmente cuando ya no lo necesite."