From c8a4a399fc4ad3b6911ef5e64bdc800793242319 Mon Sep 17 00:00:00 2001 From: Lizandro Guarnizo <77708265+lizandrogd@users.noreply.github.com> Date: Thu, 12 Mar 2026 13:31:57 -0500 Subject: [PATCH] fix: eliminar bloqueo infinito en espera de Redis al arrancar MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - entrypoint.sh: Redis wait tenía loop infinito sin timeout → el contenedor se quedaba colgado para siempre si Redis tardaba, causando 504 Gateway Timeout Ahora tiene MAX_RETRIES=15 (30s) y continúa aunque Redis no esté disponible - entrypoint.sh: removido set -e para que errores no-críticos (permisos, SSL, etc.) no maten el arranque del contenedor - docker-compose.yml: removido depends_on redis con condition:service_healthy Docker bloqueaba el inicio de app hasta que Redis estuviera healthy, lo que podía exceder el timeout de Traefik --- docker-compose.yml | 3 --- docker/entrypoint.sh | 28 +++++++++++++++++++--------- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index a09c0f0..10b6069 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -30,9 +30,6 @@ services: - WEBHOOK_VERIFY_TOKEN=${WEBHOOK_VERIFY_TOKEN} - LOG_LEVEL=${LOG_LEVEL:-INFO} - ENABLE_RATE_LIMIT=${ENABLE_RATE_LIMIT:-true} - depends_on: - redis: - condition: service_healthy networks: - whatsapp-network healthcheck: diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh index 4c3539e..033b7bc 100755 --- a/docker/entrypoint.sh +++ b/docker/entrypoint.sh @@ -1,17 +1,27 @@ #!/bin/bash # Entrypoint script para el contenedor - -set -e +# set -e removido: comandos no críticos (permisos, SSL) no deben matar el arranque echo "🚀 Iniciando WhatsApp Bot Manager..." -# Esperar a que Redis esté disponible -echo "⏳ Esperando Redis..." -until redis-cli -h ${REDIS_HOST:-redis} ping 2>/dev/null; do - echo " Redis no disponible, esperando..." - sleep 2 -done -echo "✅ Redis conectado" +# Esperar a que Redis esté disponible (con timeout para no bloquear el arranque) +if [ "${REDIS_HOST:-redis}" != "" ]; then + echo "⏳ Esperando Redis..." + MAX_RETRIES=15 + RETRY=0 + until redis-cli -h ${REDIS_HOST:-redis} -p ${REDIS_PORT:-6379} ping 2>/dev/null | grep -q PONG; do + RETRY=$((RETRY + 1)) + if [ $RETRY -ge $MAX_RETRIES ]; then + echo "⚠️ Redis no disponible después de $MAX_RETRIES intentos, continuando sin Redis..." + break + fi + echo " Redis no disponible, intento $RETRY/$MAX_RETRIES..." + sleep 2 + done + if [ $RETRY -lt $MAX_RETRIES ]; then + echo "✅ Redis conectado" + fi +fi # Esperar a que MySQL esté disponible if [ "${DB_HOST}" = "mysql" ] || [ "${DB_HOST}" = "db" ]; then