- Configure workspace Git repository with comprehensive .gitignore - Add Odoo as submodule for ERP reference code - Include documentation: SETUP.md, GIT-STRUCTURE.md - Add gitignore templates for projects (backend, frontend, database) - Structure supports independent repos per project/subproject level Workspace includes: - core/ - Reusable patterns, modules, orchestration system - projects/ - Active projects (erp-suite, gamilit, trading-platform, etc.) - knowledge-base/ - Reference code and patterns (includes Odoo submodule) - devtools/ - Development tools and templates - customers/ - Client implementations template 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
311 lines
10 KiB
Bash
Executable File
311 lines
10 KiB
Bash
Executable File
#!/bin/bash
|
|
# =============================================================================
|
|
# setup-project-env.sh
|
|
# Script para Configurar Ambiente de Desarrollo de un Proyecto
|
|
# =============================================================================
|
|
# Mantenido por: NEXUS-DEVENV
|
|
# Uso: ./setup-project-env.sh <project-name>
|
|
# =============================================================================
|
|
|
|
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 <project-name> [--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 "$@"
|