Files
MSP-CAS/scripts/setup.sh

170 lines
4.4 KiB
Bash
Executable File

#!/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 "======================================"