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

332
docs/guias/configuracion.md Normal file
View File

@@ -0,0 +1,332 @@
# Guia de Configuracion
## Configuracion General
### Variables de Entorno
El archivo `.env` contiene toda la configuracion del sistema:
```env
# ==================== BASE DE DATOS ====================
# URL de conexion a PostgreSQL
DATABASE_URL="postgresql://usuario:password@host:5432/database?schema=public"
# Credenciales para Docker
POSTGRES_USER=mspmonitor
POSTGRES_PASSWORD=password-seguro
POSTGRES_DB=msp_monitor
# ==================== CACHE Y COLAS ====================
# URL de conexion a Redis
REDIS_URL="redis://localhost:6379"
# ==================== SEGURIDAD ====================
# Clave secreta para JWT (minimo 32 caracteres)
JWT_SECRET="clave-muy-segura-de-al-menos-32-caracteres"
# ==================== INTEGRACIONES ====================
# MeshCentral
MESHCENTRAL_URL="https://mesh.tudominio.com"
MESHCENTRAL_USER="admin"
MESHCENTRAL_PASS="password"
MESHCENTRAL_DOMAIN="default"
# LibreNMS
LIBRENMS_URL="https://librenms.tudominio.com"
LIBRENMS_TOKEN="tu-token-api"
# Headwind MDM
HEADWIND_URL="https://mdm.tudominio.com"
HEADWIND_TOKEN="tu-token-api"
# ==================== NOTIFICACIONES ====================
# SMTP
SMTP_HOST="smtp.gmail.com"
SMTP_PORT="587"
SMTP_USER="tu-email@gmail.com"
SMTP_PASS="tu-app-password"
SMTP_FROM="MSP Monitor <noreply@tudominio.com>"
# Twilio (opcional)
TWILIO_ACCOUNT_SID=""
TWILIO_AUTH_TOKEN=""
TWILIO_PHONE_NUMBER=""
# ==================== APLICACION ====================
# URL publica de la aplicacion
NEXT_PUBLIC_APP_URL="https://monitor.tudominio.com"
# Entorno
NODE_ENV="production"
```
## Configuracion de Integraciones
### MeshCentral
1. **Crear usuario API en MeshCentral**:
- Acceder a MeshCentral como admin
- Ir a "My Account" > "Security" > "Create Login Token"
- O crear usuario dedicado con permisos de API
2. **Configurar en el dashboard**:
- Ir a Configuracion > Integraciones
- Ingresar URL, usuario y password
- Probar conexion
3. **Mapear grupos**:
- Cada cliente puede tener un grupo de MeshCentral asignado
- Los dispositivos del grupo se sincronizaran automaticamente
### LibreNMS
1. **Crear API Token en LibreNMS**:
- Ir a "Settings" > "API" > "API Settings"
- Crear nuevo token con permisos de lectura
2. **Configurar en el dashboard**:
- Ir a Configuracion > Integraciones
- Ingresar URL y token
- Probar conexion
3. **Mapear grupos de dispositivos**:
- Crear grupos en LibreNMS para cada cliente
- Asignar el grupo al cliente en el dashboard
### Headwind MDM
1. **Obtener API Token**:
- Acceder a panel de admin de Headwind
- Ir a configuracion de API
- Copiar token de acceso
2. **Configurar en el dashboard**:
- Ir a Configuracion > Integraciones
- Ingresar URL y token
- Probar conexion
## Configuracion de Notificaciones
### Email (SMTP)
Para Gmail:
1. Habilitar autenticacion de dos factores
2. Crear "App Password" en configuracion de seguridad
3. Usar el app password en `SMTP_PASS`
```env
SMTP_HOST="smtp.gmail.com"
SMTP_PORT="587"
SMTP_USER="tu-cuenta@gmail.com"
SMTP_PASS="xxxx-xxxx-xxxx-xxxx" # App password
SMTP_FROM="MSP Monitor <noreply@tudominio.com>"
```
Para otros proveedores:
| Proveedor | Host | Puerto |
|-----------|------|--------|
| Gmail | smtp.gmail.com | 587 |
| Office 365 | smtp.office365.com | 587 |
| SendGrid | smtp.sendgrid.net | 587 |
| Mailgun | smtp.mailgun.org | 587 |
### SMS (Twilio)
1. Crear cuenta en Twilio
2. Obtener Account SID y Auth Token
3. Comprar numero de telefono
4. Configurar en `.env`:
```env
TWILIO_ACCOUNT_SID="ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
TWILIO_AUTH_TOKEN="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
TWILIO_PHONE_NUMBER="+1234567890"
```
### Webhooks
Los webhooks se configuran por regla de alerta:
1. Crear regla de alerta
2. Habilitar "Notificar por Webhook"
3. Ingresar URL del endpoint
Formato del payload:
```json
{
"id": "alert-id",
"severidad": "CRITICAL",
"titulo": "Titulo de la alerta",
"mensaje": "Descripcion detallada",
"dispositivo": "Nombre del dispositivo",
"cliente": "Nombre del cliente",
"timestamp": "2024-01-15T10:30:00Z"
}
```
## Configuracion de Usuarios y Permisos
### Roles de Usuario
| Rol | Descripcion | Permisos |
|-----|-------------|----------|
| SUPER_ADMIN | Administrador global | Todo |
| ADMIN | Admin de cliente | Gestion de su cliente |
| TECNICO | Soporte tecnico | Operaciones y monitoreo |
| CLIENTE | Usuario cliente | Solo lectura |
| VIEWER | Vista limitada | Dashboard basico |
### Crear Usuario
1. Ir a Configuracion > Usuarios
2. Click en "Nuevo Usuario"
3. Completar:
- Email
- Nombre
- Rol
- Cliente (opcional)
- Password (o usar SSO de MeshCentral)
### Permisos Granulares
Ademas del rol, se pueden asignar permisos especificos:
```
recursos: dispositivos, alertas, reportes, configuracion, usuarios
acciones: read, write, delete, execute
```
## Configuracion de Alertas
### Reglas Predefinidas
El sistema incluye reglas por defecto:
| Regla | Metrica | Umbral | Severidad |
|-------|---------|--------|-----------|
| CPU Alta | cpu | > 90% | WARNING |
| CPU Critica | cpu | > 95% | CRITICAL |
| RAM Alta | ram | > 85% | WARNING |
| Disco Lleno | disco | > 90% | WARNING |
| Temperatura Alta | temperatura | > 80 | WARNING |
| Bateria Baja | bateria | < 15 | WARNING |
### Crear Regla Personalizada
1. Ir a Alertas > Reglas
2. Click en "Nueva Regla"
3. Configurar:
- Nombre descriptivo
- Tipo de dispositivo (opcional)
- Metrica a monitorear
- Condicion (>, <, >=, <=, ==)
- Valor umbral
- Duracion minima (evitar falsos positivos)
- Severidad
- Canales de notificacion
## Configuracion de Backups
### Backup Automatico
Agregar al crontab del servidor:
```bash
# Backup diario a las 2am
0 2 * * * /opt/msp-monitor/scripts/backup-db.sh >> /var/log/msp-backup.log 2>&1
```
### Configuracion de Backup
Variables en `.env`:
```env
# Directorio de backups
BACKUP_DIR="/backups"
# Dias de retencion
RETENTION_DAYS=30
# S3 (opcional)
S3_BUCKET="mi-bucket-backups"
AWS_ACCESS_KEY_ID="..."
AWS_SECRET_ACCESS_KEY="..."
```
### Restaurar Backup
```bash
./scripts/restore-db.sh /backups/msp_monitor_20240115_020000.sql.gz
```
## Configuracion de SSL
### Renovacion Automatica
El contenedor de Certbot renueva automaticamente. Verificar:
```bash
docker compose -f docker/docker-compose.yml logs certbot
```
### Certificado Manual
1. Copiar certificados a `docker/nginx/ssl/`
2. Actualizar paths en `docker/nginx/conf.d/default.conf`
3. Reiniciar Nginx: `docker compose restart nginx`
## Configuracion de Logs
### Niveles de Log
En `.env`:
```env
# Nivel de log: debug, info, warn, error
LOG_LEVEL="info"
```
### Rotacion de Logs
Docker maneja la rotacion. Configurar en `/etc/docker/daemon.json`:
```json
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
```
## Personalizacion
### Tema Visual
Editar `tailwind.config.ts` para cambiar colores:
```typescript
colors: {
primary: {
500: '#06b6d4', // Color principal
// ...
},
// ...
}
```
### Logo
Reemplazar archivo en `public/logo.png`
### Titulo
Editar `src/app/layout.tsx`:
```typescript
export const metadata: Metadata = {
title: 'Mi Dashboard MSP',
// ...
}
```

359
docs/guias/instalacion.md Normal file
View File

@@ -0,0 +1,359 @@
# Guia de Instalacion
## Requisitos del Sistema
### Hardware Minimo
| Componente | Minimo | Recomendado |
|------------|--------|-------------|
| CPU | 2 cores | 4+ cores |
| RAM | 4 GB | 8+ GB |
| Disco | 40 GB SSD | 100+ GB SSD |
| Red | 100 Mbps | 1 Gbps |
### Software
- **Sistema Operativo**: Ubuntu 22.04 LTS o Debian 12
- **Docker**: 24.0+
- **Docker Compose**: 2.20+
- **Node.js**: 20.x (solo para desarrollo)
### Requisitos de Red
- Puerto 80 (HTTP)
- Puerto 443 (HTTPS)
- Puerto 5432 (PostgreSQL, solo interno)
- Puerto 6379 (Redis, solo interno)
- Acceso a MeshCentral, LibreNMS y/o Headwind MDM
## Instalacion en Produccion
### 1. Preparar el Servidor
```bash
# Actualizar sistema
sudo apt update && sudo apt upgrade -y
# Instalar dependencias
sudo apt install -y curl git
# Instalar Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
# Agregar usuario al grupo docker
sudo usermod -aG docker $USER
newgrp docker
# Instalar Docker Compose
sudo apt install -y docker-compose-plugin
```
### 2. Clonar el Repositorio
```bash
# Crear directorio
sudo mkdir -p /opt/msp-monitor
cd /opt/msp-monitor
# Clonar repositorio
git clone https://git.consultoria-as.com/msp/msp-monitor-dashboard.git .
# Configurar permisos
sudo chown -R $USER:$USER /opt/msp-monitor
```
### 3. Configurar Variables de Entorno
```bash
# Copiar archivo de ejemplo
cp .env.example .env
# Editar configuracion
nano .env
```
Configuracion minima requerida:
```env
# Seguridad - CAMBIAR ESTOS VALORES
POSTGRES_PASSWORD=<password-seguro>
JWT_SECRET=<clave-jwt-minimo-32-caracteres>
# MeshCentral (opcional si no se usa)
MESHCENTRAL_URL=https://mesh.tudominio.com
MESHCENTRAL_USER=admin
MESHCENTRAL_PASS=password
MESHCENTRAL_DOMAIN=default
# LibreNMS (opcional si no se usa)
LIBRENMS_URL=https://librenms.tudominio.com
LIBRENMS_TOKEN=tu-api-token
# Headwind MDM (opcional si no se usa)
HEADWIND_URL=https://mdm.tudominio.com
HEADWIND_TOKEN=tu-api-token
# Email (para notificaciones)
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USER=tu-email@gmail.com
SMTP_PASS=tu-app-password
SMTP_FROM=MSP Monitor <noreply@tudominio.com>
# URL de la aplicacion
APP_URL=https://monitor.tudominio.com
```
### 4. Configurar SSL
#### Opcion A: Certificado Let's Encrypt (recomendado)
```bash
# Crear directorios
mkdir -p docker/nginx/ssl
# Iniciar Nginx sin SSL primero
docker compose -f docker/docker-compose.yml up -d nginx
# Obtener certificado
docker compose -f docker/docker-compose.yml run --rm certbot certonly \
--webroot \
--webroot-path=/var/www/certbot \
-d monitor.tudominio.com \
--email tu-email@tudominio.com \
--agree-tos \
--no-eff-email
# Reiniciar con SSL
docker compose -f docker/docker-compose.yml restart nginx
```
#### Opcion B: Certificado Propio
```bash
# Copiar certificados
cp /ruta/certificado.crt docker/nginx/ssl/live/monitor.tudominio.com/fullchain.pem
cp /ruta/certificado.key docker/nginx/ssl/live/monitor.tudominio.com/privkey.pem
```
### 5. Configurar Nginx
Editar `docker/nginx/conf.d/default.conf`:
```nginx
server {
listen 443 ssl http2;
server_name monitor.tudominio.com; # Cambiar por tu dominio
ssl_certificate /etc/nginx/ssl/live/monitor.tudominio.com/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/live/monitor.tudominio.com/privkey.pem;
# ... resto de configuracion
}
```
### 6. Iniciar Servicios
```bash
# Construir imagenes
docker compose -f docker/docker-compose.yml build
# Iniciar servicios
docker compose -f docker/docker-compose.yml up -d
# Verificar estado
docker compose -f docker/docker-compose.yml ps
```
### 7. Aplicar Migraciones
```bash
# Ejecutar migraciones
docker compose -f docker/docker-compose.yml exec dashboard npx prisma db push
# Verificar conexion a BD
docker compose -f docker/docker-compose.yml exec dashboard npx prisma studio
```
### 8. Crear Usuario Administrador
```bash
# Conectar a la BD
docker compose -f docker/docker-compose.yml exec postgres psql -U mspmonitor -d msp_monitor
# Crear usuario (dentro de psql)
INSERT INTO usuarios (id, email, nombre, password_hash, rol, activo, created_at, updated_at)
VALUES (
gen_random_uuid(),
'admin@tudominio.com',
'Administrador',
'$2a$12$hash-del-password', -- Generar con bcrypt
'SUPER_ADMIN',
true,
NOW(),
NOW()
);
```
O usando el script de setup interactivo:
```bash
./scripts/setup.sh
```
### 9. Verificar Instalacion
1. Acceder a `https://monitor.tudominio.com`
2. Iniciar sesion con las credenciales creadas
3. Verificar conexion a MeshCentral, LibreNMS, Headwind
4. Revisar logs: `docker compose -f docker/docker-compose.yml logs -f`
## Instalacion en Desarrollo
### 1. Requisitos
- Node.js 20+
- npm o yarn
- Docker (para PostgreSQL y Redis)
### 2. Configurar Entorno
```bash
# Clonar repositorio
git clone https://git.consultoria-as.com/msp/msp-monitor-dashboard.git
cd msp-monitor-dashboard
# Instalar dependencias
npm install
# Configurar variables
cp .env.example .env
# Editar .env con configuracion local
```
### 3. Iniciar Servicios de Base de Datos
```bash
# Solo PostgreSQL y Redis
docker compose -f docker/docker-compose.yml up -d postgres redis
```
### 4. Configurar Base de Datos
```bash
# Generar cliente Prisma
npm run db:generate
# Aplicar schema
npm run db:push
# (Opcional) Abrir Prisma Studio
npm run db:studio
```
### 5. Iniciar Desarrollo
```bash
# Iniciar servidor de desarrollo
npm run dev
# En otra terminal, iniciar workers (opcional)
npm run jobs:start
```
Acceder a `http://localhost:3000`
## Actualizacion
### Actualizacion en Produccion
```bash
cd /opt/msp-monitor
# Detener servicios
docker compose -f docker/docker-compose.yml down
# Actualizar codigo
git pull origin main
# Reconstruir imagenes
docker compose -f docker/docker-compose.yml build
# Iniciar servicios
docker compose -f docker/docker-compose.yml up -d
# Aplicar migraciones si hay cambios de BD
docker compose -f docker/docker-compose.yml exec dashboard npx prisma db push
```
### Actualizacion en Desarrollo
```bash
# Actualizar codigo
git pull origin main
# Actualizar dependencias
npm install
# Regenerar cliente Prisma
npm run db:generate
# Aplicar migraciones
npm run db:push
```
## Solucion de Problemas
### Error de Conexion a Base de Datos
```bash
# Verificar que PostgreSQL esta corriendo
docker compose -f docker/docker-compose.yml ps postgres
# Ver logs de PostgreSQL
docker compose -f docker/docker-compose.yml logs postgres
# Verificar conectividad
docker compose -f docker/docker-compose.yml exec postgres pg_isready
```
### Error de Conexion a Redis
```bash
# Verificar que Redis esta corriendo
docker compose -f docker/docker-compose.yml ps redis
# Probar conexion
docker compose -f docker/docker-compose.yml exec redis redis-cli ping
```
### Dashboard no Carga
```bash
# Ver logs del dashboard
docker compose -f docker/docker-compose.yml logs dashboard
# Verificar variables de entorno
docker compose -f docker/docker-compose.yml exec dashboard env
# Reiniciar servicio
docker compose -f docker/docker-compose.yml restart dashboard
```
### Workers no Procesan Jobs
```bash
# Ver logs del worker
docker compose -f docker/docker-compose.yml logs worker
# Verificar colas en Redis
docker compose -f docker/docker-compose.yml exec redis redis-cli KEYS "bull:*"
```
## Proximos Pasos
- [Configuracion del Sistema](configuracion.md)
- [Integracion con MeshCentral](../integraciones/meshcentral.md)
- [Integracion con LibreNMS](../integraciones/librenms.md)
- [Integracion con Headwind MDM](../integraciones/headwind.md)