workspace-v1/projects/erp-suite/scripts/deploy.sh
rckrdmrd 66161b1566 feat: Workspace-v1 complete migration with NEXUS v3.4
Sistema NEXUS v3.4 migrado con:

Estructura principal:
- core/orchestration: Sistema SIMCO + CAPVED (27 directivas, 28 perfiles)
- core/catalog: Catalogo de funcionalidades reutilizables
- shared/knowledge-base: Base de conocimiento compartida
- devtools/scripts: Herramientas de desarrollo
- control-plane/registries: Control de servicios y CI/CD
- orchestration/: Configuracion de orquestacion de agentes

Proyectos incluidos (11):
- gamilit (submodule -> GitHub)
- trading-platform (OrbiquanTIA)
- erp-suite con 5 verticales:
  - erp-core, construccion, vidrio-templado
  - mecanicas-diesel, retail, clinicas
- betting-analytics
- inmobiliaria-analytics
- platform_marketing_content
- pos-micro, erp-basico

Configuracion:
- .gitignore completo para Node.js/Python/Docker
- gamilit como submodule (git@github.com:rckrdmrd/gamilit-workspace.git)
- Sistema de puertos estandarizado (3005-3199)

Generated with NEXUS v3.4 Migration System
EPIC-010: Configuracion Git y Repositorios
2026-01-04 03:37:42 -06:00

221 lines
6.9 KiB
Bash
Executable File

#!/bin/bash
# =============================================================================
# ERP-SUITE - Script de Despliegue Multi-Vertical
# =============================================================================
# Uso:
# ./scripts/deploy.sh [vertical|all] [staging|production]
# ./scripts/deploy.sh erp-core production
# ./scripts/deploy.sh construccion staging
# ./scripts/deploy.sh all production
# =============================================================================
set -e
# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
log_info() { echo -e "${GREEN}[INFO]${NC} $1"; }
log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
log_error() { echo -e "${RED}[ERROR]${NC} $1"; exit 1; }
log_step() { echo -e "${BLUE}[STEP]${NC} $1"; }
# =============================================================================
# CONFIGURACIÓN
# =============================================================================
DOCKER_REGISTRY="${DOCKER_REGISTRY:-72.60.226.4:5000}"
DEPLOY_SERVER="${DEPLOY_SERVER:-72.60.226.4}"
DEPLOY_USER="${DEPLOY_USER:-deploy}"
DEPLOY_PATH="/opt/apps/erp-suite"
VERSION="${VERSION:-$(date +%Y%m%d%H%M%S)}"
# Verticales disponibles
declare -A VERTICALS=(
["erp-core"]="apps/erp-core:3010:3011"
["construccion"]="apps/verticales/construccion:3020:3021"
["vidrio-templado"]="apps/verticales/vidrio-templado:3030:3031"
["mecanicas-diesel"]="apps/verticales/mecanicas-diesel:3040:3041"
["retail"]="apps/verticales/retail:3050:3051"
["clinicas"]="apps/verticales/clinicas:3060:3061"
["pos-micro"]="apps/products/pos-micro:3070:3071"
)
# Verticales activas (con código)
ACTIVE_VERTICALS=("erp-core" "construccion" "mecanicas-diesel")
# =============================================================================
# FUNCIONES
# =============================================================================
show_usage() {
echo "Uso: $0 [vertical|all] [staging|production]"
echo ""
echo "Verticales disponibles:"
for v in "${!VERTICALS[@]}"; do
if [[ " ${ACTIVE_VERTICALS[@]} " =~ " ${v} " ]]; then
echo " - ${v} (activo)"
else
echo " - ${v} (reservado)"
fi
done
echo " - all (todas las activas)"
echo ""
echo "Ejemplos:"
echo " $0 erp-core production"
echo " $0 construccion staging"
echo " $0 all production"
}
get_vertical_config() {
local vertical=$1
echo "${VERTICALS[$vertical]}"
}
build_vertical() {
local vertical=$1
local config=$(get_vertical_config "$vertical")
local path=$(echo "$config" | cut -d: -f1)
log_step "Building ${vertical}..."
# Build backend
if [ -d "${path}/backend" ]; then
log_info "Building backend..."
docker build -t ${DOCKER_REGISTRY}/erp-${vertical}-backend:${VERSION} \
-t ${DOCKER_REGISTRY}/erp-${vertical}-backend:latest \
${path}/backend/
fi
# Build frontend
local frontend_path="${path}/frontend"
if [ -d "${path}/frontend/web" ]; then
frontend_path="${path}/frontend/web"
fi
if [ -d "${frontend_path}" ] && [ -f "${frontend_path}/Dockerfile" ]; then
log_info "Building frontend..."
docker build -t ${DOCKER_REGISTRY}/erp-${vertical}-frontend:${VERSION} \
-t ${DOCKER_REGISTRY}/erp-${vertical}-frontend:latest \
${frontend_path}/
fi
}
push_vertical() {
local vertical=$1
log_step "Pushing ${vertical} images..."
docker push ${DOCKER_REGISTRY}/erp-${vertical}-backend:${VERSION} 2>/dev/null || true
docker push ${DOCKER_REGISTRY}/erp-${vertical}-backend:latest 2>/dev/null || true
docker push ${DOCKER_REGISTRY}/erp-${vertical}-frontend:${VERSION} 2>/dev/null || true
docker push ${DOCKER_REGISTRY}/erp-${vertical}-frontend:latest 2>/dev/null || true
}
deploy_vertical() {
local vertical=$1
local env=$2
log_step "Deploying ${vertical} to ${env}..."
ssh -o StrictHostKeyChecking=no ${DEPLOY_USER}@${DEPLOY_SERVER} << EOF
set -e
cd ${DEPLOY_PATH}/${vertical}
echo "📦 Pulling images..."
docker-compose -f docker-compose.prod.yml pull || true
echo "🔄 Stopping containers..."
docker-compose -f docker-compose.prod.yml down --remove-orphans || true
echo "🚀 Starting containers..."
docker-compose -f docker-compose.prod.yml up -d
echo "🧹 Cleanup..."
docker system prune -f
echo "✅ ${vertical} deployed!"
EOF
}
health_check() {
local vertical=$1
local config=$(get_vertical_config "$vertical")
local backend_port=$(echo "$config" | cut -d: -f3)
log_info "Health check for ${vertical} (port ${backend_port})..."
for i in {1..5}; do
if curl -sf "http://${DEPLOY_SERVER}:${backend_port}/health" > /dev/null; then
log_info "${vertical} is healthy"
return 0
fi
log_warn "Attempt ${i}/5 failed, waiting..."
sleep 10
done
log_error "${vertical} health check failed!"
}
# =============================================================================
# MAIN
# =============================================================================
main() {
local vertical=${1:-help}
local env=${2:-staging}
if [ "$vertical" == "help" ] || [ "$vertical" == "-h" ]; then
show_usage
exit 0
fi
echo "============================================================================="
echo "ERP-SUITE - Deployment Script"
echo "============================================================================="
echo "Vertical: ${vertical}"
echo "Environment: ${env}"
echo "Version: ${VERSION}"
echo "============================================================================="
# Determinar verticales a desplegar
local verticals_to_deploy=()
if [ "$vertical" == "all" ]; then
verticals_to_deploy=("${ACTIVE_VERTICALS[@]}")
else
if [ -z "${VERTICALS[$vertical]}" ]; then
log_error "Vertical '${vertical}' no existe"
fi
verticals_to_deploy=("$vertical")
fi
# Desplegar erp-core primero si está en la lista
if [[ " ${verticals_to_deploy[@]} " =~ " erp-core " ]]; then
build_vertical "erp-core"
push_vertical "erp-core"
deploy_vertical "erp-core" "$env"
health_check "erp-core"
# Remover erp-core de la lista
verticals_to_deploy=(${verticals_to_deploy[@]/erp-core})
fi
# Desplegar resto de verticales
for v in "${verticals_to_deploy[@]}"; do
build_vertical "$v"
push_vertical "$v"
deploy_vertical "$v" "$env"
health_check "$v"
done
echo ""
echo "============================================================================="
echo -e "${GREEN}DESPLIEGUE COMPLETADO${NC}"
echo "============================================================================="
}
main "$@"