https://github.com/edummorenolp/universal-backup-microservice
Microservicio universal de backup y análisis de bases de datos Sequelize para cualquier proyecto.
https://github.com/edummorenolp/universal-backup-microservice
backend backup javascript microservice nodejs
Last synced: 3 months ago
JSON representation
Microservicio universal de backup y análisis de bases de datos Sequelize para cualquier proyecto.
- Host: GitHub
- URL: https://github.com/edummorenolp/universal-backup-microservice
- Owner: EduMMorenolp
- Created: 2025-10-30T17:11:53.000Z (5 months ago)
- Default Branch: develop
- Last Pushed: 2025-11-04T18:53:40.000Z (5 months ago)
- Last Synced: 2025-11-04T20:26:04.158Z (5 months ago)
- Topics: backend, backup, javascript, microservice, nodejs
- Language: JavaScript
- Homepage:
- Size: 108 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
Awesome Lists containing this project
README
# 🔄 Universal Backup Microservice
Microservicio universal de backup y análisis de bases de datos Sequelize para cualquier proyecto.
## 🎯 Características
### Características Básicas
- ✅ **Análisis Automático** - Inspecciona estructura de BD y modelos
- ✅ **Resolución de Dependencias** - Ordena modelos según claves foráneas
- ✅ **Backup Universal** - Funciona con cualquier BD Sequelize
- ✅ **Multi-Formato** - Genera seeders, JSON o SQL
- ✅ **API REST** - Endpoints para análisis y extracción
- ✅ **Multi-Servicio** - Gestiona múltiples bases de datos
- ✅ **Local y Nube** - Soporta bases de datos locales y en la nube
### Características Avanzadas
- ✅ **Backups Programados** - Cron scheduling con retención automática
- ✅ **Comparación de Backups** - Detecta diferencias entre backups
- ✅ **Upload a S3 con Metadatos** - Compresión, metadatos estructurados y manifest.json
- ✅ **Restore Completo** - Restauración con transacciones y rollback automático
- ✅ **Métricas Completas** - Estadísticas de backups y base de datos
- ✅ **Backup Incremental** - Base para backups diferenciales
- ✅ **Análisis de Esquemas** - Extrae estructura de BD y genera migraciones
- ✅ **Migraciones Incrementales** - Detecta cambios entre esquemas y genera migraciones
## 🚀 Instalación
```bash
cd backup-microservice
npm install
```
## ⚙️ Configuración
### 1. Variables de Entorno
Copiar `.env.example` a `.env`:
```env
PORT=4000
BACKUP_DIR=./backups
# AWS S3 (opcional - para upload a S3)
AWS_ACCESS_KEY_ID=your_access_key
AWS_SECRET_ACCESS_KEY=your_secret_key
AWS_REGION=us-east-1
AWS_BUCKET_NAME=your-bucket-name
```
### 2. Configurar Servicios
Editar `config/services.json`:
```json
{
"services": [
{
"name": "my-backend",
"database": {
"host": "localhost",
"port": 5432,
"database": "my_database",
"username": "postgres",
"password": "password"
}
}
]
}
```
## 🎮 Uso
### Iniciar Microservicio
```bash
npm start
# o en desarrollo
npm run dev
```
El servidor estará disponible en `http://localhost:4000`
## 📚 Documentación
La documentación completa está organizada en la carpeta `documents/`:
- **[API-ENDPOINTS.md](documents/API-ENDPOINTS.md)** - Documentación completa de todos los endpoints
- **[ADVANCED-FEATURES.md](documents/ADVANCED-FEATURES.md)** - Guía de características avanzadas
- **[CLOUD-DATABASES.md](documents/CLOUD-DATABASES.md)** - Configuración para bases de datos en la nube
- **[ARCHITECTURE.md](documents/ARCHITECTURE.md)** - Arquitectura y estructura del microservicio
- **[EXAMPLES.md](documents/EXAMPLES.md)** - Ejemplos de uso y casos prácticos
## 🔧 API Endpoints - Resumen
### Básicos
- `GET /health` - Health check
- `POST /api/backup/analyze` - Analizar base de datos
- `POST /api/backup/extract` - Extraer backup (completo o incremental)
- `GET /api/backup/list` - Listar backups
- `DELETE /api/backup/database/:dbName` - Eliminar todos los backups de una BD
### Avanzados
- `POST /api/advanced/schedule` - Programar backup automático
- `GET /api/advanced/schedules` - Listar backups programados
- `DELETE /api/advanced/schedule/:id` - Cancelar backup programado
- `POST /api/advanced/compare` - Comparar dos backups
- `POST /api/advanced/upload-s3` - Subir backup a S3 con metadatos
- `GET /api/advanced/metrics` - Obtener métricas
### Restore
- `POST /api/restore` - Restaurar backup en BD destino
- `POST /api/restore/info` - Obtener información de backup
- `POST /api/restore/validate` - Validar BD destino
- `POST /api/restore/clean` - Limpiar BD destino
### Testing
- `POST /api/test/run` - Ejecutar tests automáticos
### Schema
- `POST /api/schema/extract` - Extraer estructura de BD y generar migraciones
- `POST /api/schema/incremental` - Detectar cambios entre esquemas y generar migraciones incrementales
Ver documentación completa en [documents/API-ENDPOINTS.md](documents/API-ENDPOINTS.md)
## 📊 Flujo de Trabajo Básico
### 1. Analizar Base de Datos
```bash
curl -X POST http://localhost:4000/api/backup/analyze \
-H "Content-Type: application/json" \
-d '{"dbConfig": {"host": "localhost", "port": 5432, "database": "my_db", "username": "postgres", "password": "pass"}}'
```
### 2. Generar Backup
```bash
curl -X POST http://localhost:4000/api/backup/extract \
-H "Content-Type: application/json" \
-d '{"dbConfig": {...}, "options": {"chunkSize": 300, "format": "seeders"}}'
```
### 3. Restaurar Backup
```bash
curl -X POST http://localhost:4000/api/restore \
-H "Content-Type: application/json" \
-d '{"database": "my_db", "backupId": "backup-20250128-143022", "targetDbConfig": {...}, "options": {"force": true}}'
```
## 🎯 Casos de Uso
1. **Backup Automático** - Programar backups diarios con retención
2. **Migración de Datos** - Entre entornos (dev → staging → prod)
3. **Disaster Recovery** - Restore rápido con seeders generados
4. **Análisis de Estructura** - Documentar y entender BD
5. **Datos de Prueba** - Generar datasets consistentes
6. **Auditoría** - Comparar backups para detectar cambios
7. **Almacenamiento Cloud** - Upload automático a S3
8. **Migraciones de Esquema** - Generar migraciones de Sequelize desde estructura de BD
9. **Control de Cambios** - Detectar diferencias entre versiones de BD y generar migraciones incrementales
## 📁 Estructura de Backups
Los backups se organizan por nombre de base de datos:
```
backups/
├── my_database/
│ ├── backup-20250128-143022/ # Backup completo
│ │ ├── metadata.json
│ │ ├── 20250128120000-roles.cjs
│ │ ├── 20250128120001-users-part-1.cjs
│ │ └── ...
│ ├── incremental-20250128-150000/ # Backup incremental
│ │ ├── metadata.json
│ │ ├── 20250128150000-inc-new-posts-part-1.cjs
│ │ ├── 20250128150001-inc-modified-users-part-1.cjs
│ │ ├── 20250128150002-inc-deleted-comments-part-1.cjs
│ │ └── ...
│ └── backup-20250128-160000/
│ └── ...
└── another_database/
└── backup-20250128-160000/
└── ...
```
### Tipos de Backup
- **Completo** (`backup-*`): Todos los datos de la BD
- **Incremental** (`incremental-*`): Solo cambios desde último backup
- `inc-new-*`: Registros nuevos (INSERT)
- `inc-modified-*`: Registros modificados (UPDATE)
- `inc-deleted-*`: Registros eliminados (soft delete)
## 🌐 Bases de Datos Soportadas
Compatible con cualquier PostgreSQL accesible por red:
- **Local** - PostgreSQL en localhost
- **AWS RDS** - Amazon Relational Database Service
- **Google Cloud SQL** - Google Cloud Platform
- **Azure Database** - Microsoft Azure
- **Heroku Postgres** - Heroku managed database
- **DigitalOcean** - Managed Databases
- **Cualquier PostgreSQL** - Con acceso de red
Ver configuración detallada en [documents/CLOUD-DATABASES.md](documents/CLOUD-DATABASES.md)
## 🔒 Seguridad
- ✅ No almacena credenciales (solo en memoria durante conexión)
- ✅ Conexiones temporales y cerradas después de uso
- ✅ Backups locales por defecto
- ✅ Soporte SSL para conexiones seguras
- ✅ Sin acceso externo por defecto
- ✅ Credenciales S3 opcionales y configurables
## 🚀 Características Destacadas
### Backups Programados
```javascript
// Backup diario a las 2 AM, retención de 7 días
{
"schedule": "0 2 * * *",
"retentionDays": 7
}
```
### Comparación de Backups
```javascript
// Detecta diferencias entre dos backups
{
"backupId1": "backup-20250128-143022",
"backupId2": "backup-20250128-150000"
}
```
### Upload a S3 con Metadatos
```javascript
// Comprime, sube con metadatos y genera manifest.json
{
"backupId": "backup-20250128-143022",
"s3Config": {
"bucket": "my-backups",
"region": "us-east-1"
}
}
// Genera:
// - backup.zip con metadatos (database, records, version, size)
// - manifest.json con resumen completo
```
### Restore con Transacciones
```javascript
// Restaura con rollback automático en caso de error
{
"database": "my_database",
"backupId": "backup-20250128-143022",
"targetDbConfig": {...},
"options": {
"force": true // Limpia BD automáticamente
}
}
```
### Métricas Completas
- Total de backups por base de datos
- Tamaño total de backups
- Estadísticas de registros
- Información de tablas
## 📦 Tecnologías
- **Node.js** - Runtime
- **Express** - API REST
- **Sequelize** - ORM y análisis de modelos
- **PostgreSQL** - Base de datos soportada
- **node-cron** - Scheduling de backups
- **AWS SDK** - Upload a S3
- **archiver** - Compresión de backups
## 📝 Notas Importantes
- Compatible con PostgreSQL (local y nube)
- Requiere Sequelize en servicios objetivo
- Genera seeders con formato seguro (IDs específicos en down)
- Fragmentación automática en chunks de 300 registros
- Funciona con cualquier BD accesible por red
- Backups organizados por nombre de base de datos
## 🔄 Roadmap
- [x] Análisis automático de modelos
- [x] Resolución de dependencias
- [x] Extracción con chunking
- [x] Backups programados (cron)
- [x] Comparación de backups
- [x] Upload a S3 con metadatos y manifest
- [x] Restore con transacciones y rollback
- [x] Métricas y estadísticas
- [x] Backup incremental completo (detecta nuevos, modificados y eliminados)
- [x] Sistema de testing automático
- [x] Eliminación masiva de backups por BD
- [x] Análisis de esquemas de BD y generación de migraciones
- [x] Migraciones incrementales para cambios de estructura
- [ ] Anonimización de datos
- [ ] Dashboard web
- [ ] Soporte para MySQL
- [ ] Notificaciones (email/webhook)
- [ ] Download desde S3
- [ ] Restore desde S3
## 📖 Documentación Adicional
- [Postman Collection](Universal%20Backup%20Microservice.postman_collection.json) - Colección completa de endpoints
- [CHANGELOG.md](CHANGELOG.md) - Historial de cambios
## 🤝 Contribución
Este es un microservicio universal diseñado para ser independiente y reutilizable en cualquier proyecto.
## 📄 Licencia
MIT
---
**Microservicio universal para cualquier proyecto Sequelize**