|
|
|
|
#!/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 <nombre>'
|
|
|
|
|
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
|