#!/usr/bin/env bash set -euo pipefail # Colores ANSI GREEN='\033[0;32m' RED='\033[0;31m' NC='\033[0m' # ───────────────────────────────────────────────────────────────────────────── # Cargar variables de entorno del .env # ───────────────────────────────────────────────────────────────────────────── if [[ -f .env ]]; then set -a && source .env && set +a else echo "ERROR: No se encontró el archivo .env. Crea uno." exit 1 fi # Validar variables obligatorias : "${EVOLUTION_API_PORT:?Falta EVOLUTION_API_PORT en .env}" : "${POSTGRESS_USER:?Falta POSTGRESS_USER en .env}" : "${POSTGRESS_PASS:?Falta POSTGRESS_PASS en .env}" : "${REDIS_PASSWORD:?Falta REDIS_PASSWORD en .env}" # ───────────────────────────────────────────────────────────────────────────── # Actualizar repositorios y paquetes # ───────────────────────────────────────────────────────────────────────────── sudo apt update # ───────────────────────────────────────────────────────────────────────────── # Instalar prerequisitos # ───────────────────────────────────────────────────────────────────────────── sudo apt install -y \ apt-transport-https \ ca-certificates \ curl \ gnupg \ lsb-release \ netcat-openbsd # ───────────────────────────────────────────────────────────────────────────── # Instalación de Docker # ───────────────────────────────────────────────────────────────────────────── if ! command -v docker >/dev/null 2>&1; then echo "Docker no encontrado. Instalando Docker..." curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list >/dev/null sudo apt update && sudo apt install -y docker-ce docker-ce-cli containerd.io sudo systemctl enable --now docker sudo usermod -aG docker "$USER" echo -e "${GREEN}Docker instalado: $(docker --version)${NC}" else echo "Docker ya está instalado: $(docker --version)" fi # ───────────────────────────────────────────────────────────────────────────── # Instalación de Docker Compose CLI plugin # ───────────────────────────────────────────────────────────────────────────── if ! docker compose version >/dev/null 2>&1; then echo "Docker Compose CLI plugin no encontrado. Instalando..." sudo apt-get install -y docker-compose-plugin echo -e "${GREEN}Docker Compose instalado: $(docker compose version)${NC}" else echo "Docker Compose ya está instalado: $(docker compose version)" fi # ───────────────────────────────────────────────────────────────────────────── # Instalación de Evolution API # ───────────────────────────────────────────────────────────────────────────── # FIX: el comando correcto es 'docker inspect', no 'docker container ' if docker inspect evolution_api >/dev/null 2>&1; then echo "Evolution API ya está instalado y configurado." else echo "Instalando Evolution API y servicios..." sudo docker compose up -d echo -e "${GREEN}Evolution API y servicios instalados${NC}" fi # ───────────────────────────────────────────────────────────────────────────── # Verificar que Evolution API levantó correctamente (localhost, no IP pública) # ───────────────────────────────────────────────────────────────────────────── CHECK_APP_MAX_ATTEMPTS=5 CHECK_APP_DELAY_SECONDS=5 check_port_local() { local PORT=$1 local APP_NAME=$2 local attempt=1 while ((attempt <= CHECK_APP_MAX_ATTEMPTS)); do echo "Verificando ${APP_NAME} en localhost:${PORT} (intento ${attempt}/${CHECK_APP_MAX_ATTEMPTS})..." sleep ${CHECK_APP_DELAY_SECONDS} if nc -z -w5 127.0.0.1 "${PORT}"; then echo -e "${GREEN}¡${APP_NAME} está corriendo en localhost:${PORT}!${NC}" return 0 fi attempt=$((attempt + 1)) done echo -e "${RED}Error: ${APP_NAME} no responde en localhost:${PORT} tras ${CHECK_APP_MAX_ATTEMPTS} intentos.${NC}" echo "Revisa los logs con: docker compose logs evolution_api" exit 1 } check_port_local "${EVOLUTION_API_PORT}" "Evolution API" # Refrescar grupos para la sesión actual newgrp docker