#!/bin/bash set -e # Script de inicialización para el Backend FastAPI # Espera a las dependencias y ejecuta migraciones antes de iniciar echo "==========================================" echo "Backend FastAPI - Inicialización" echo "==========================================" # Función para esperar a un puerto TCP usando Python wait_for_tcp() { local host=$1 local port=$2 local service=$3 local max_attempts=30 local attempt=1 echo "Esperando a que $service esté disponible en ${host}:${port}..." while [ $attempt -le $max_attempts ]; do if python3 -c "import socket; s = socket.socket(); s.settimeout(3); s.connect(('$host', $port)); s.close()" 2>/dev/null; then echo "✓ $service está listo y accesible" return 0 fi echo "$service no está listo aún... (intento $attempt/$max_attempts)" attempt=$((attempt + 1)) sleep 2 done echo "⚠ WARNING: $service no estuvo disponible después de $max_attempts intentos" echo " Continuando de todas formas..." return 0 } # Esperar a PostgreSQL wait_for_tcp "${CORE_DB_HOST:-postgres-a76}" "${CORE_DB_PORT:-5432}" "PostgreSQL" # Esperar al Hub de Aduanasoft (opcional, pero recomendado) # Extraer host y puerto de HUB_URL si es posible, o usar el default del docker-compose # HUB_HOST=$(echo $HUB_URL | sed -e 's|http://||' -e 's|:.*||') # HUB_PORT=$(echo $HUB_URL | sed -e 's|.*:||' -e 's|/.*||') # wait_for_tcp "${HUB_HOST:-host.docker.internal}" "${HUB_PORT:-8001}" "Aduanasoft Hub" # Ejecutar migraciones de Alembic #if [ -d "/app/alembic" ]; then # echo "Ejecutando migraciones de Alembic..." # alembic upgrade head || { # echo "⚠ WARNING: Error al ejecutar migraciones" # echo " Verificando estado de la base de datos..." # alembic current || echo " No se pudo determinar la versión actual" # } # echo "✓ Migraciones completadas" #else # echo "⚠ WARNING: Directorio /app/alembic no encontrado" # echo " Las migraciones de base de datos no se ejecutaron" #fi echo "==========================================" echo "Iniciando aplicación FastAPI..." echo "==========================================" # Ejecutar el comando que se pasó al contenedor exec "$@"