#!/bin/bash # MSP Monitor Dashboard - Setup Script # Este script configura el entorno de desarrollo/produccion set -e echo "======================================" echo " MSP Monitor Dashboard - Setup" echo "======================================" # Colores para output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # Funcion para imprimir mensajes print_status() { echo -e "${GREEN}[✓]${NC} $1" } print_warning() { echo -e "${YELLOW}[!]${NC} $1" } print_error() { echo -e "${RED}[✗]${NC} $1" } # Verificar si se ejecuta como root if [ "$EUID" -ne 0 ]; then print_warning "Este script debe ejecutarse como root para algunas operaciones" fi # Verificar dependencias echo "" echo "Verificando dependencias..." check_command() { if command -v $1 &> /dev/null; then print_status "$1 instalado" return 0 else print_error "$1 no encontrado" return 1 fi } MISSING_DEPS=0 check_command docker || MISSING_DEPS=1 check_command docker-compose || check_command "docker compose" || MISSING_DEPS=1 check_command node || MISSING_DEPS=1 check_command npm || MISSING_DEPS=1 if [ $MISSING_DEPS -eq 1 ]; then print_error "Faltan dependencias. Instale las herramientas faltantes antes de continuar." exit 1 fi # Crear archivo .env si no existe if [ ! -f .env ]; then echo "" echo "Creando archivo .env..." cp .env.example .env # Generar JWT_SECRET aleatorio JWT_SECRET=$(openssl rand -base64 32) sed -i "s|JWT_SECRET=.*|JWT_SECRET=\"$JWT_SECRET\"|" .env print_status "Archivo .env creado" print_warning "Edite el archivo .env con sus configuraciones antes de continuar" else print_status "Archivo .env ya existe" fi # Instalar dependencias de Node.js echo "" echo "Instalando dependencias de Node.js..." npm install print_status "Dependencias instaladas" # Generar cliente de Prisma echo "" echo "Generando cliente de Prisma..." npx prisma generate print_status "Cliente de Prisma generado" # Preguntar si iniciar en modo desarrollo o produccion echo "" echo "Seleccione el modo de ejecucion:" echo "1) Desarrollo (npm run dev)" echo "2) Produccion (Docker)" echo "3) Solo configurar, no iniciar" read -p "Opcion [1-3]: " MODE case $MODE in 1) echo "" echo "Iniciando servicios de desarrollo..." # Iniciar PostgreSQL y Redis con Docker docker-compose -f docker/docker-compose.yml up -d postgres redis # Esperar a que los servicios esten listos echo "Esperando a que los servicios esten listos..." sleep 5 # Aplicar migraciones echo "" echo "Aplicando migraciones de base de datos..." npx prisma db push print_status "Migraciones aplicadas" # Iniciar aplicacion echo "" print_status "Iniciando servidor de desarrollo..." npm run dev ;; 2) echo "" echo "Construyendo e iniciando contenedores de produccion..." # Construir imagenes docker-compose -f docker/docker-compose.yml build # Iniciar servicios docker-compose -f docker/docker-compose.yml up -d # Esperar a que los servicios esten listos echo "Esperando a que los servicios esten listos..." sleep 10 # Aplicar migraciones echo "" echo "Aplicando migraciones de base de datos..." docker-compose -f docker/docker-compose.yml exec dashboard npx prisma db push print_status "Migraciones aplicadas" print_status "Servicios iniciados" echo "" echo "Dashboard disponible en: http://localhost:3000" echo "" echo "Comandos utiles:" echo " docker-compose -f docker/docker-compose.yml logs -f # Ver logs" echo " docker-compose -f docker/docker-compose.yml down # Detener servicios" echo " docker-compose -f docker/docker-compose.yml restart # Reiniciar servicios" ;; 3) print_status "Configuracion completada" echo "" echo "Proximos pasos:" echo "1. Edite el archivo .env con sus configuraciones" echo "2. Ejecute 'npm run dev' para desarrollo" echo "3. O ejecute 'docker-compose -f docker/docker-compose.yml up -d' para produccion" ;; *) print_error "Opcion no valida" exit 1 ;; esac echo "" echo "======================================" echo " Setup completado" echo "======================================"