#!/bin/bash # ServiceManagerWeb - Setup de Desarrollo # Configura el entorno de desarrollo completo set -e echo "🚀 Configurando ServiceManagerWeb - Entorno de Desarrollo" # Colores para output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # Función para logs log() { echo -e "${BLUE}[$(date +'%Y-%m-%d %H:%M:%S')] $1${NC}" } success() { echo -e "${GREEN}✅ $1${NC}" } warning() { echo -e "${YELLOW}⚠️ $1${NC}" } error() { echo -e "${RED}❌ $1${NC}" exit 1 } # Verificar dependencias check_dependencies() { log "Verificando dependencias..." command -v docker >/dev/null 2>&1 || error "Docker no está instalado" command -v docker-compose >/dev/null 2>&1 || error "Docker Compose no está instalado" success "Dependencias verificadas" } # Configurar archivo .env setup_env() { log "Configurando variables de entorno..." if [ ! -f .env ]; then cp .env.example .env # Generar claves secretas SECRET_KEY=$(openssl rand -base64 32) JWT_SECRET_KEY=$(openssl rand -base64 32) # Reemplazar en .env sed -i "s|your-super-secret-key-change-in-production-min-32-chars|$SECRET_KEY|g" .env sed -i "s|jwt-secret-key-change-in-production-min-32-chars|$JWT_SECRET_KEY|g" .env success "Archivo .env creado con claves seguras" else warning "Archivo .env ya existe, no se sobrescribirá" fi } # Crear directorios necesarios create_directories() { log "Creando directorios necesarios..." mkdir -p logs uploads chmod 755 logs uploads success "Directorios creados" } # Levantar servicios start_services() { log "Levantando servicios con Docker Compose..." docker-compose --profile dev up -d success "Servicios iniciados" } # Esperar a que la base de datos esté lista wait_for_db() { log "Esperando a que PostgreSQL esté listo..." timeout=60 while ! docker-compose exec -T postgres pg_isready -U servicemanager >/dev/null 2>&1; do sleep 2 timeout=$((timeout - 2)) if [ $timeout -le 0 ]; then error "Timeout esperando PostgreSQL" fi done success "PostgreSQL está listo" } # Ejecutar migraciones (cuando estén implementadas) run_migrations() { log "Las migraciones se ejecutarán cuando el backend esté implementado..." warning "Saltando migraciones por ahora" } # Mostrar información útil show_info() { echo "" echo "🎉 ¡Configuración completa!" echo "" echo "📊 URLs disponibles:" echo " Frontend Cliente: http://localhost:3000" echo " Frontend Interno: http://localhost:3001" echo " API Backend: http://localhost:8000" echo " API Docs: http://localhost:8000/docs" echo "" echo "🛠️ Herramientas de desarrollo:" echo " Adminer (DB): http://localhost:8080" echo " MailHog (Email): http://localhost:8025" echo " Redis Commander: http://localhost:8081" echo "" echo "📝 Comandos útiles:" echo " Ver logs: docker-compose logs -f" echo " Parar servicios: docker-compose down" echo " Reiniciar todo: docker-compose restart" echo " Shell backend: docker-compose exec backend bash" echo "" echo "👤 Usuario por defecto:" echo " Email: admin@aduanasoft.com" echo " Password: admin123" echo "" } # Función principal main() { check_dependencies setup_env create_directories start_services wait_for_db run_migrations show_info } # Manejar argumentos case "${1:-}" in -h|--help) echo "Uso: $0 [opciones]" echo "" echo "Opciones:" echo " -h, --help Mostrar esta ayuda" echo " --no-start Solo configurar, no iniciar servicios" echo "" exit 0 ;; --no-start) setup_env create_directories success "Configuración completada sin iniciar servicios" exit 0 ;; esac main "$@"