#!/bin/bash # ============================================================================= # setup-project-env.sh # Script para Configurar Ambiente de Desarrollo de un Proyecto # ============================================================================= # Mantenido por: NEXUS-DEVENV # Uso: ./setup-project-env.sh # ============================================================================= set -e # Colores RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # Paths WORKSPACE_ROOT="${HOME}/workspace" PROJECTS_ROOT="${WORKSPACE_ROOT}/projects" TEMPLATES_DIR="${WORKSPACE_ROOT}/core/devtools/environment/templates" REGISTRY_FILE="${WORKSPACE_ROOT}/core/devtools/environment/DEV-ENVIRONMENT-REGISTRY.yml" # ----------------------------------------------------------------------------- # CONFIGURACIÓN POR PROYECTO (según DEV-ENVIRONMENT-REGISTRY.yml) # ----------------------------------------------------------------------------- get_project_config() { local project=$1 case $project in "gamilit") BACKEND_PORT=3001 FRONTEND_PORT=5001 DB_PORT=5432 DB_NAME="gamilit_platform" DB_USER="gamilit_user" DB_PASSWORD="$(openssl rand -base64 12)" ML_SERVICE_PORT="" ;; "orbiquantia") BACKEND_PORT=3002 FRONTEND_PORT=5002 DB_PORT=5433 DB_NAME="orbiquantia_platform" DB_USER="orbiquantia" DB_PASSWORD="$(openssl rand -base64 12)" ML_SERVICE_PORT=8001 ;; "erp-suite") BACKEND_PORT=3003 FRONTEND_PORT=5003 DB_PORT=5434 DB_NAME="erp_generic" DB_USER="erp_admin" DB_PASSWORD="$(openssl rand -base64 12)" ML_SERVICE_PORT="" ;; "trading-platform") BACKEND_PORT=3004 FRONTEND_PORT=5004 DB_PORT=5435 DB_NAME="trading_platform" DB_USER="trading_user" DB_PASSWORD="$(openssl rand -base64 12)" ML_SERVICE_PORT=8002 ;; "betting-analytics") BACKEND_PORT=3005 FRONTEND_PORT=5005 DB_PORT=5436 DB_NAME="betting_analytics" DB_USER="betting_user" DB_PASSWORD="$(openssl rand -base64 12)" ML_SERVICE_PORT=8003 ;; "inmobiliaria-analytics") BACKEND_PORT=3006 FRONTEND_PORT=5006 DB_PORT=5437 DB_NAME="inmobiliaria_analytics" DB_USER="inmobiliaria_user" DB_PASSWORD="$(openssl rand -base64 12)" ML_SERVICE_PORT=8004 ;; *) echo -e "${RED}Proyecto desconocido: $project${NC}" echo "Proyectos válidos: gamilit, orbiquantia, erp-suite, trading-platform, betting-analytics, inmobiliaria-analytics" exit 1 ;; esac PROJECT_NAME=$(echo "$project" | tr '[:lower:]' '[:upper:]' | tr '-' '_') PROJECT_SLUG=$(echo "$project" | tr '[:upper:]' '[:lower:]' | tr '_' '-') } # ----------------------------------------------------------------------------- # GENERAR .ENV DESDE TEMPLATE # ----------------------------------------------------------------------------- generate_env_file() { local template=$1 local output=$2 local project_name=$3 if [[ ! -f "$template" ]]; then echo -e "${RED}Template no existe: $template${NC}" return 1 fi # Crear directorio si no existe mkdir -p "$(dirname "$output")" # Reemplazar variables sed -e "s/\${PROJECT_NAME}/${PROJECT_NAME}/g" \ -e "s/\${PROJECT_SLUG}/${PROJECT_SLUG}/g" \ -e "s/\${BACKEND_PORT}/${BACKEND_PORT}/g" \ -e "s/\${FRONTEND_PORT}/${FRONTEND_PORT}/g" \ -e "s/\${DB_PORT}/${DB_PORT}/g" \ -e "s/\${DB_NAME}/${DB_NAME}/g" \ -e "s/\${DB_USER}/${DB_USER}/g" \ -e "s/\${DB_PASSWORD}/${DB_PASSWORD}/g" \ -e "s/\${ML_SERVICE_PORT}/${ML_SERVICE_PORT:-8000}/g" \ -e "s/\${DATE}/$(date '+%Y-%m-%d')/g" \ "$template" > "$output" echo -e "${GREEN}Generado: $output${NC}" } # ----------------------------------------------------------------------------- # CREAR ESTRUCTURA DE PROYECTO # ----------------------------------------------------------------------------- setup_project() { local project=$1 local project_path="${PROJECTS_ROOT}/${project}" echo "" echo -e "${BLUE}═══════════════════════════════════════════════════════════════${NC}" echo -e "${BLUE} Configurando ambiente para: ${project}${NC}" echo -e "${BLUE}═══════════════════════════════════════════════════════════════${NC}" echo "" # Obtener configuración get_project_config "$project" echo "Configuración:" echo " Backend Port: $BACKEND_PORT" echo " Frontend Port: $FRONTEND_PORT" echo " DB Port: $DB_PORT" echo " DB Name: $DB_NAME" echo " DB User: $DB_USER" if [[ -n "$ML_SERVICE_PORT" ]]; then echo " ML Port: $ML_SERVICE_PORT" fi echo "" # Verificar que el proyecto existe if [[ ! -d "$project_path" ]]; then echo -e "${YELLOW}Directorio del proyecto no existe: $project_path${NC}" echo "Creando estructura básica..." mkdir -p "${project_path}/apps/backend" mkdir -p "${project_path}/apps/frontend" mkdir -p "${project_path}/orchestration/environment" fi # Determinar paths de .env local backend_env_path="${project_path}/apps/backend/.env" local frontend_env_path="${project_path}/apps/frontend/.env" # Caso especial para erp-suite if [[ "$project" == "erp-suite" ]]; then backend_env_path="${project_path}/apps/erp-core/.env" mkdir -p "${project_path}/apps/erp-core" fi # Preguntar antes de sobrescribir if [[ -f "$backend_env_path" ]]; then echo -e "${YELLOW}Backend .env ya existe: $backend_env_path${NC}" read -p "¿Sobrescribir? (y/N): " confirm if [[ "$confirm" != "y" && "$confirm" != "Y" ]]; then echo "Saltando backend .env" else generate_env_file "${TEMPLATES_DIR}/.env.backend.template" "$backend_env_path" "$project" fi else generate_env_file "${TEMPLATES_DIR}/.env.backend.template" "$backend_env_path" "$project" fi if [[ -f "$frontend_env_path" ]]; then echo -e "${YELLOW}Frontend .env ya existe: $frontend_env_path${NC}" read -p "¿Sobrescribir? (y/N): " confirm if [[ "$confirm" != "y" && "$confirm" != "Y" ]]; then echo "Saltando frontend .env" else generate_env_file "${TEMPLATES_DIR}/.env.frontend.template" "$frontend_env_path" "$project" fi else generate_env_file "${TEMPLATES_DIR}/.env.frontend.template" "$frontend_env_path" "$project" fi # Crear PROJECT-ENV-CONFIG.yml create_project_env_config "$project" "$project_path" echo "" echo -e "${GREEN}Configuración completada para $project${NC}" echo "" echo "Próximos pasos:" echo " 1. Revisar y ajustar passwords en los archivos .env" echo " 2. Crear la base de datos: createdb -p $DB_PORT $DB_NAME" echo " 3. Crear el usuario: createuser -p $DB_PORT $DB_USER" echo " 4. Ejecutar: npm install" echo "" } # ----------------------------------------------------------------------------- # CREAR PROJECT-ENV-CONFIG.yml # ----------------------------------------------------------------------------- create_project_env_config() { local project=$1 local project_path=$2 local config_dir="${project_path}/orchestration/environment" local config_file="${config_dir}/PROJECT-ENV-CONFIG.yml" mkdir -p "$config_dir" cat > "$config_file" << EOF # ============================================================================= # PROJECT-ENV-CONFIG.yml # Configuración de Ambiente específica del proyecto # ============================================================================= # Proyecto: ${PROJECT_NAME} # Generado: $(date '+%Y-%m-%d') # Referencia: ~/workspace/core/devtools/environment/DEV-ENVIRONMENT-REGISTRY.yml # ============================================================================= project: name: "${PROJECT_NAME}" slug: "${PROJECT_SLUG}" ports: backend: ${BACKEND_PORT} frontend: ${FRONTEND_PORT} database: ${DB_PORT} ml_service: ${ML_SERVICE_PORT:-null} database: host: "localhost" port: ${DB_PORT} name: "${DB_NAME}" user: "${DB_USER}" # password: Ver archivo .env local urls: backend_api: "http://localhost:${BACKEND_PORT}/api" frontend: "http://localhost:${FRONTEND_PORT}" swagger: "http://localhost:${BACKEND_PORT}/api/docs" env_files: backend: "apps/backend/.env" frontend: "apps/frontend/.env" # Notas específicas del proyecto notes: | - Configuración generada automáticamente por NEXUS-DEVENV - Ajustar passwords antes de usar en desarrollo - Para producción, usar configuración separada EOF echo -e "${GREEN}Generado: $config_file${NC}" } # ----------------------------------------------------------------------------- # MAIN # ----------------------------------------------------------------------------- show_usage() { echo "Uso: $0 [--all]" echo "" echo "Proyectos disponibles:" echo " - gamilit" echo " - orbiquantia" echo " - erp-suite" echo " - trading-platform" echo " - betting-analytics" echo " - inmobiliaria-analytics" echo "" echo "Opciones:" echo " --all Configurar todos los proyectos" echo "" } main() { if [[ $# -eq 0 ]]; then show_usage exit 1 fi if [[ "$1" == "--all" ]]; then for project in gamilit orbiquantia erp-suite trading-platform betting-analytics inmobiliaria-analytics; do setup_project "$project" done else setup_project "$1" fi } main "$@"