Files
plantillas-proyectos/start.sh
KevinMrkz3221 dd77a80408 Fix: Corregir inserción de tenant y relaciones en PostgreSQL usando formato -c en psql
- Cambiar de heredoc (<<EOF) a formato -c para ejecutar comandos SQL
- Agregar cast explícito 'SHARED'::tenanttype para el campo type del tenant
- Arreglar inserción de company para que se ejecute correctamente
- Arreglar inserción de relación usuario-tenant en table user_tenants
- Mejora en ejecución de comandos PostgreSQL dentro de docker exec

El problema era que los heredocs no interpolaban correctamente las variables
en el contexto de docker exec. Usar -c con sentencias SQL en una línea resuelve
el problema y asegura que los INSERTs se ejecuten correctamente.
2025-11-13 20:18:10 -06:00

184 lines
5.6 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. Crear archivo .env si no existe
echo -e "${BLUE}[2/7] Configurando variables de entorno...${NC}"
if [ ! -f .env ]; then
if [ -f .env.example ]; then
cp .env.example .env
echo -e "${GREEN}✓ Archivo .env creado${NC}"
else
echo -e "${YELLOW}⚠ .env.example no existe, creando .env con valores por defecto${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
EOF
echo -e "${GREEN}✓ Archivo .env creado con valores por defecto${NC}"
fi
else
echo -e "${YELLOW}⚠ .env ya existe, no se sobrescribirá${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 ""