217 lines
7.0 KiB
Bash
Executable File
217 lines
7.0 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Script de inicio robusto para Anexo76
|
|
# Este script inicializa el proyecto completo con validaciones
|
|
|
|
set -e
|
|
|
|
echo "========================================="
|
|
echo " Anexo76 - Inicio Rápido"
|
|
echo "========================================="
|
|
echo ""
|
|
|
|
# Colores
|
|
GREEN='\033[0;32m'
|
|
BLUE='\033[0;34m'
|
|
YELLOW='\033[1;33m'
|
|
RED='\033[0;31m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# Función para verificar si un servicio está saludable
|
|
wait_for_healthy() {
|
|
local service=$1
|
|
local max_attempts=60
|
|
local attempt=1
|
|
|
|
echo -e "${BLUE}Esperando a que ${service} esté saludable...${NC}"
|
|
while [ $attempt -le $max_attempts ]; do
|
|
if docker compose ps | grep "$service" | grep -q "healthy"; then
|
|
echo -e "${GREEN}✓ ${service} está saludable${NC}"
|
|
return 0
|
|
fi
|
|
echo " Intento $attempt/$max_attempts..."
|
|
sleep 3
|
|
attempt=$((attempt + 1))
|
|
done
|
|
|
|
echo -e "${RED}✗ ${service} no estuvo disponible después de $max_attempts intentos${NC}"
|
|
echo "Logs del servicio:"
|
|
docker compose logs --tail=50 "$service"
|
|
return 1
|
|
}
|
|
|
|
# 1. Verificar Docker
|
|
echo -e "${BLUE}[1/7] Verificando Docker...${NC}"
|
|
if ! command -v docker &> /dev/null; then
|
|
echo -e "${RED}✗ Docker no está instalado. Por favor instala Docker primero.${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
if ! command -v docker compose &> /dev/null; then
|
|
echo -e "${RED}✗ Docker Compose no está instalado. Por favor instala Docker Compose primero.${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
if ! docker info &> /dev/null; then
|
|
echo -e "${RED}✗ Docker daemon no está corriendo. Por favor inicia Docker.${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
echo -e "${GREEN}✓ Docker está instalado y corriendo${NC}"
|
|
echo ""
|
|
|
|
# 2. Configurar variables de entorno
|
|
echo -e "${BLUE}[2/7] Configurando variables de entorno...${NC}"
|
|
|
|
if [ ! -f .env ]; then
|
|
echo -e "${YELLOW}¿Cómo desea configurar este servidor?${NC}"
|
|
echo "1) Hub (Servidor Central)"
|
|
echo "2) Cliente (Sucursal/Spoke)"
|
|
read -p "Seleccione una opción [1-2]: " SERVER_ROLE
|
|
|
|
# Valores por defecto comunes
|
|
SYNC_TOKEN=$(openssl rand -hex 16 2>/dev/null || echo "dev-sync-token-$(date +%s)")
|
|
|
|
if [ "$SERVER_ROLE" == "1" ]; then
|
|
echo -e "${GREEN}Configurando como HUB...${NC}"
|
|
CENTRAL_URL=""
|
|
CLIENT_ID=""
|
|
SPOKE_URLS=""
|
|
else
|
|
echo -e "${GREEN}Configurando como CLIENTE...${NC}"
|
|
read -p "Ingrese la URL del Hub [http://100.78.6.108:8001/api/v1/core/help-center/sync/]: " CENTRAL_URL
|
|
CENTRAL_URL=${CENTRAL_URL:-http://100.78.6.108:8001/api/v1/core/help-center/sync/}
|
|
read -p "Ingrese el UUID de este cliente (presione Enter para generar uno): " CLIENT_ID
|
|
CLIENT_ID=${CLIENT_ID:-$(cat /proc/sys/kernel/random/uuid 2>/dev/null || echo "client-$(date +%s)")}
|
|
SPOKE_URLS=""
|
|
fi
|
|
|
|
if [ -f .env.example ]; then
|
|
cp .env.example .env
|
|
echo -e "${GREEN}✓ Archivo .env basado en .env.example creado${NC}"
|
|
|
|
# Aplicar configuraciones de rol al .env copiado
|
|
sed -i "s|CENTRAL_SERVER_URL=.*|CENTRAL_SERVER_URL=$CENTRAL_URL|" .env
|
|
sed -i "s|SPOKE_URLS=.*|SPOKE_URLS=$SPOKE_URLS|" .env
|
|
sed -i "s|CLIENT_UUID=.*|CLIENT_UUID=$CLIENT_ID|" .env
|
|
sed -i "s|SYNC_SECRET_TOKEN=.*|SYNC_SECRET_TOKEN=$SYNC_TOKEN|" .env
|
|
else
|
|
echo -e "${YELLOW}⚠ .env.example no existe, creando .env básico${NC}"
|
|
cat > .env <<EOF
|
|
POSTGRES_APP_PASSWORD=postgres
|
|
POSTGRES_KEYCLOAK_PASSWORD=postgres
|
|
KEYCLOAK_ADMIN=admin
|
|
KEYCLOAK_ADMIN_PASSWORD=admin
|
|
KEYCLOAK_REALM=master
|
|
KEYCLOAK_CLIENT_ID=anexo76-backend
|
|
KEYCLOAK_CLIENT_SECRET=dev-secret
|
|
KEYCLOAK_FRONTEND_CLIENT_ID=anexo76-frontend
|
|
DEBUG=True
|
|
ENVIRONMENT=development
|
|
NODE_ENV=development
|
|
VITE_API_URL=http://localhost:8000/api
|
|
VITE_KEYCLOAK_URL=http://localhost:8080/kcauth
|
|
CENTRAL_SERVER_URL=$CENTRAL_URL
|
|
SPOKE_URLS=$SPOKE_URLS
|
|
CLIENT_UUID=$CLIENT_ID
|
|
SYNC_SECRET_TOKEN=$SYNC_TOKEN
|
|
EOF
|
|
fi
|
|
echo -e "${GREEN}✓ Configuración de sincronización aplicada al .env${NC}"
|
|
else
|
|
echo -e "${YELLOW}⚠ .env ya existe, se usarán las variables actuales${NC}"
|
|
fi
|
|
echo ""
|
|
|
|
# 3. Limpiar contenedores previos si existen
|
|
echo -e "${BLUE}[3/7] Limpiando contenedores previos...${NC}"
|
|
docker compose down 2>/dev/null || true
|
|
echo -e "${GREEN}✓ Contenedores previos limpiados${NC}"
|
|
echo ""
|
|
|
|
# 4. Iniciar PostgreSQL databases
|
|
echo -e "${BLUE}[4/7] Iniciando bases de datos PostgreSQL...${NC}"
|
|
echo "Esto puede tardar 30-60 segundos..."
|
|
docker compose up -d postgres-a76 postgres-keycloak
|
|
|
|
if wait_for_healthy "postgres-a76" && wait_for_healthy "postgres-keycloak"; then
|
|
echo -e "${GREEN}✓ Bases de datos PostgreSQL iniciadas y saludables${NC}"
|
|
else
|
|
echo -e "${RED}✗ Error iniciando bases de datos${NC}"
|
|
exit 1
|
|
fi
|
|
echo ""
|
|
|
|
# 5. Iniciar Keycloak
|
|
echo -e "${BLUE}[5/7] Iniciando Keycloak...${NC}"
|
|
echo "Esto puede tardar 60-90 segundos..."
|
|
docker compose up -d keycloak
|
|
|
|
if wait_for_healthy "keycloak"; then
|
|
echo -e "${GREEN}✓ Keycloak iniciado y saludable${NC}"
|
|
else
|
|
echo -e "${RED}✗ Error iniciando Keycloak${NC}"
|
|
exit 1
|
|
fi
|
|
echo ""
|
|
|
|
# 6. Iniciar Backend
|
|
echo -e "${BLUE}[6/7] Iniciando Backend FastAPI...${NC}"
|
|
echo "Esto puede tardar 30-60 segundos..."
|
|
docker compose up -d backend
|
|
|
|
if wait_for_healthy "backend"; then
|
|
echo -e "${GREEN}✓ Backend iniciado y saludable${NC}"
|
|
else
|
|
echo -e "${RED}✗ Error iniciando Backend${NC}"
|
|
echo "Verificando logs..."
|
|
docker compose logs --tail=50 backend
|
|
exit 1
|
|
fi
|
|
echo ""
|
|
|
|
# 7. Iniciar Frontend
|
|
echo -e "${BLUE}[7/7] Iniciando Frontend SvelteKit...${NC}"
|
|
echo "Esto puede tardar 30-45 segundos..."
|
|
docker compose up -d frontend
|
|
|
|
if wait_for_healthy "frontend"; then
|
|
echo -e "${GREEN}✓ Frontend iniciado y saludable${NC}"
|
|
else
|
|
echo -e "${YELLOW}⚠ Frontend puede estar iniciando, verifica los logs si es necesario${NC}"
|
|
fi
|
|
echo ""
|
|
|
|
# Resumen
|
|
echo "========================================="
|
|
echo -e "${GREEN} ✓ Instalación Completada${NC}"
|
|
echo "========================================="
|
|
echo ""
|
|
echo "Servicios disponibles:"
|
|
echo -e " ${GREEN}•${NC} Frontend: ${BLUE}http://localhost:5173${NC}"
|
|
echo -e " ${GREEN}•${NC} Backend: ${BLUE}http://localhost:8000/api${NC}"
|
|
echo -e " ${GREEN}•${NC} API Docs: ${BLUE}http://localhost:8000/api/docs${NC}"
|
|
echo -e " ${GREEN}•${NC} Keycloak: ${BLUE}http://localhost:8080${NC}"
|
|
echo ""
|
|
echo "Credenciales de Keycloak Admin:"
|
|
echo " • Usuario: admin"
|
|
echo " • Password: admin"
|
|
echo ""
|
|
echo -e "${YELLOW}⚠ IMPORTANTE:${NC}"
|
|
echo " Debes configurar Keycloak antes de poder usar la aplicación."
|
|
echo " Sigue la guía en: docs/KEYCLOAK_SETUP.md"
|
|
echo ""
|
|
echo "Usuario de prueba (después de configurar Keycloak):"
|
|
echo " • Usuario: demo"
|
|
echo " • Password: demo123"
|
|
echo ""
|
|
echo "Comandos útiles:"
|
|
echo " • Ver logs: docker compose logs -f"
|
|
echo " • Ver logs servicio: docker compose logs -f [servicio]"
|
|
echo " • Estado servicios: docker compose ps"
|
|
echo " • Detener todo: docker compose down"
|
|
echo " • Detener y limpiar: docker compose down -v"
|
|
echo ""
|
|
echo -e "${GREEN}¡Disfruta desarrollando con Anexo76!${NC}"
|
|
echo ""
|