#!/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 " echo " 2. Ir al proyecto: cd repos/" echo " 3. Levantar servicios: cd docker && docker-compose up -d" echo "" echo "URLs utiles:" echo " - Traefik Dashboard: http://localhost:8080" echo ""