Structure: - control-plane/: Registries, SIMCO directives, CI/CD templates - projects/: Gamilit, ERP-Suite, Trading-Platform, Betting-Analytics - shared/: Libs catalog, knowledge-base Key features: - Centralized port, domain, database, and service registries - 23 SIMCO directives + 6 fundamental principles - NEXUS agent profiles with delegation rules - Validation scripts for workspace integrity - Dockerfiles for all services - Path aliases for quick reference 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
207 lines
6.2 KiB
Bash
Executable File
207 lines
6.2 KiB
Bash
Executable File
#!/bin/bash
|
|
# ==============================================================================
|
|
# init-workspace.sh - Inicializa el workspace para desarrollo
|
|
# ==============================================================================
|
|
# Uso: ./init-workspace.sh
|
|
#
|
|
# Este script:
|
|
# 1. Verifica prerequisitos (Docker, etc.)
|
|
# 2. Crea las redes Docker necesarias
|
|
# 3. Levanta Traefik
|
|
# 4. Verifica que todo este funcionando
|
|
# ==============================================================================
|
|
|
|
set -e
|
|
|
|
# Colores
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m'
|
|
|
|
# Rutas
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
CONTROL_PLANE="${SCRIPT_DIR}/../../.."
|
|
DOCKER_DIR="${CONTROL_PLANE}/devtools/docker"
|
|
|
|
echo -e "${BLUE}============================================${NC}"
|
|
echo -e "${BLUE} INICIALIZACION DEL WORKSPACE${NC}"
|
|
echo -e "${BLUE}============================================${NC}"
|
|
echo ""
|
|
|
|
# ------------------------------------------------------------------------------
|
|
# 1. Verificar prerequisitos
|
|
# ------------------------------------------------------------------------------
|
|
echo -e "${YELLOW}[1/4] Verificando prerequisitos...${NC}"
|
|
|
|
# Docker
|
|
if ! command -v docker &> /dev/null; then
|
|
echo -e "${RED}ERROR: Docker no esta instalado${NC}"
|
|
echo "Por favor instala Docker Desktop: https://www.docker.com/products/docker-desktop"
|
|
exit 1
|
|
fi
|
|
echo -e " ${GREEN}[OK]${NC} Docker instalado"
|
|
|
|
# Docker Compose
|
|
if ! docker compose version &> /dev/null; then
|
|
if ! command -v docker-compose &> /dev/null; then
|
|
echo -e "${RED}ERROR: Docker Compose no esta instalado${NC}"
|
|
exit 1
|
|
fi
|
|
fi
|
|
echo -e " ${GREEN}[OK]${NC} Docker Compose instalado"
|
|
|
|
# Docker daemon running
|
|
if ! docker info &> /dev/null; then
|
|
echo -e "${RED}ERROR: Docker daemon no esta corriendo${NC}"
|
|
echo "Por favor inicia Docker Desktop"
|
|
exit 1
|
|
fi
|
|
echo -e " ${GREEN}[OK]${NC} Docker daemon corriendo"
|
|
|
|
# Python3 (para scripts de validacion)
|
|
if ! command -v python3 &> /dev/null; then
|
|
echo -e "${YELLOW}WARN: Python3 no instalado - algunas validaciones no funcionaran${NC}"
|
|
else
|
|
echo -e " ${GREEN}[OK]${NC} Python3 instalado"
|
|
fi
|
|
|
|
# ------------------------------------------------------------------------------
|
|
# 2. Crear redes Docker
|
|
# ------------------------------------------------------------------------------
|
|
echo ""
|
|
echo -e "${YELLOW}[2/4] Creando redes Docker...${NC}"
|
|
|
|
# Red de infraestructura
|
|
echo " Creando red: infra_shared"
|
|
docker network create infra_shared 2>/dev/null && echo -e " ${GREEN}[CREATED]${NC}" || echo -e " ${YELLOW}[EXISTS]${NC}"
|
|
|
|
# Redes por proyecto
|
|
PROJECTS=("gamilit" "erp_core" "erp_construccion" "erp_mecanicas" "trading" "betting")
|
|
ENVIRONMENTS=("local" "dev")
|
|
|
|
for project in "${PROJECTS[@]}"; do
|
|
for env in "${ENVIRONMENTS[@]}"; do
|
|
network_name="${project}_${env}"
|
|
echo " Creando red: $network_name"
|
|
docker network create "$network_name" 2>/dev/null && echo -e " ${GREEN}[CREATED]${NC}" || echo -e " ${YELLOW}[EXISTS]${NC}"
|
|
done
|
|
done
|
|
|
|
# ------------------------------------------------------------------------------
|
|
# 3. Configurar Traefik
|
|
# ------------------------------------------------------------------------------
|
|
echo ""
|
|
echo -e "${YELLOW}[3/4] Configurando Traefik...${NC}"
|
|
|
|
TRAEFIK_DIR="${DOCKER_DIR}/traefik"
|
|
|
|
# Crear directorio si no existe
|
|
mkdir -p "${TRAEFIK_DIR}/dynamic"
|
|
|
|
# Crear traefik.yml si no existe
|
|
if [ ! -f "${TRAEFIK_DIR}/traefik.yml" ]; then
|
|
echo " Creando traefik.yml..."
|
|
cat > "${TRAEFIK_DIR}/traefik.yml" << 'EOF'
|
|
# Traefik Configuration
|
|
api:
|
|
dashboard: true
|
|
insecure: true
|
|
|
|
entryPoints:
|
|
web:
|
|
address: ":80"
|
|
websecure:
|
|
address: ":443"
|
|
|
|
providers:
|
|
docker:
|
|
endpoint: "unix:///var/run/docker.sock"
|
|
exposedByDefault: false
|
|
network: infra_shared
|
|
file:
|
|
directory: /etc/traefik/dynamic
|
|
watch: true
|
|
|
|
log:
|
|
level: INFO
|
|
EOF
|
|
echo -e " ${GREEN}[OK]${NC} traefik.yml creado"
|
|
else
|
|
echo -e " ${GREEN}[OK]${NC} traefik.yml existe"
|
|
fi
|
|
|
|
# Crear docker-compose para Traefik
|
|
if [ ! -f "${TRAEFIK_DIR}/docker-compose.yml" ]; then
|
|
echo " Creando docker-compose.yml para Traefik..."
|
|
cat > "${TRAEFIK_DIR}/docker-compose.yml" << 'EOF'
|
|
version: "3.8"
|
|
|
|
services:
|
|
traefik:
|
|
image: traefik:v2.10
|
|
container_name: traefik
|
|
restart: unless-stopped
|
|
ports:
|
|
- "80:80"
|
|
- "443:443"
|
|
- "8080:8080"
|
|
volumes:
|
|
- /var/run/docker.sock:/var/run/docker.sock:ro
|
|
- ./traefik.yml:/etc/traefik/traefik.yml:ro
|
|
- ./dynamic:/etc/traefik/dynamic:ro
|
|
networks:
|
|
- infra_shared
|
|
|
|
networks:
|
|
infra_shared:
|
|
external: true
|
|
EOF
|
|
echo -e " ${GREEN}[OK]${NC} docker-compose.yml creado"
|
|
else
|
|
echo -e " ${GREEN}[OK]${NC} docker-compose.yml existe"
|
|
fi
|
|
|
|
# Levantar Traefik
|
|
echo " Levantando Traefik..."
|
|
cd "${TRAEFIK_DIR}"
|
|
docker compose up -d 2>/dev/null || docker-compose up -d
|
|
|
|
# ------------------------------------------------------------------------------
|
|
# 4. Verificar
|
|
# ------------------------------------------------------------------------------
|
|
echo ""
|
|
echo -e "${YELLOW}[4/4] Verificando...${NC}"
|
|
|
|
sleep 2
|
|
|
|
# Verificar Traefik
|
|
if curl -s http://localhost:8080/api/overview > /dev/null 2>&1; then
|
|
echo -e " ${GREEN}[OK]${NC} Traefik dashboard accesible en http://localhost:8080"
|
|
else
|
|
echo -e " ${YELLOW}[WARN]${NC} Traefik dashboard no responde aun (puede tomar unos segundos)"
|
|
fi
|
|
|
|
# Listar redes
|
|
echo ""
|
|
echo "Redes Docker creadas:"
|
|
docker network ls --filter "driver=bridge" --format " - {{.Name}}" | grep -E "(infra|gamilit|erp|trading|betting)" || true
|
|
|
|
# ------------------------------------------------------------------------------
|
|
# Resultado
|
|
# ------------------------------------------------------------------------------
|
|
echo ""
|
|
echo -e "${BLUE}============================================${NC}"
|
|
echo -e "${GREEN} WORKSPACE INICIALIZADO${NC}"
|
|
echo -e "${BLUE}============================================${NC}"
|
|
echo ""
|
|
echo "Proximos pasos:"
|
|
echo " 1. Clonar un proyecto: cd repos && git clone <repo-url>"
|
|
echo " 2. Ir al proyecto: cd repos/<proyecto>"
|
|
echo " 3. Levantar servicios: cd docker && docker-compose up -d"
|
|
echo ""
|
|
echo "URLs utiles:"
|
|
echo " - Traefik Dashboard: http://localhost:8080"
|
|
echo ""
|