Add automated setup script for tunnel management
Some checks failed
deploy-tunnel / deploy (push) Failing after 1s

- setup.sh: Script interactivo que verifica/crea el tunnel automáticamente
- Detecta si ya existe el tunnel nucleorio-tunnel
- Instala cloudflared si no está presente
- Genera credentials.json y .env automáticamente
- Configura DNS opcionalmente
- Actualizado README con instrucciones de setup rápido
- Workflow actualizado con mejores mensajes de error
This commit is contained in:
2025-10-05 02:22:23 -06:00
parent 8351ee1e86
commit 2c245ea531
3 changed files with 272 additions and 77 deletions

173
setup.sh Executable file
View File

@@ -0,0 +1,173 @@
#!/bin/bash
set -e
TUNNEL_NAME="nucleorio-tunnel"
DOMAIN="nucleoriofrio.com"
WILDCARD_SUBDOMAIN="*"
echo "🚀 Cloudflare Tunnel Setup Script"
echo "=================================="
echo ""
# Verificar si cloudflared está instalado
if ! command -v cloudflared &> /dev/null; then
echo "⚠️ cloudflared no está instalado"
echo "Instalando cloudflared..."
if [ -f /etc/debian_version ]; then
# Debian/Ubuntu
wget -q https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
sudo dpkg -i cloudflared-linux-amd64.deb
rm cloudflared-linux-amd64.deb
else
echo "❌ Sistema operativo no soportado. Instala cloudflared manualmente:"
echo " https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/installation/"
exit 1
fi
echo "✓ cloudflared instalado"
fi
# Verificar si ya existe credentials.json
if [ -f "credentials.json" ]; then
echo "✓ credentials.json ya existe"
# Extraer TUNNEL_ID del credentials.json
TUNNEL_ID=$(jq -r '.TunnelID' credentials.json 2>/dev/null || echo "")
if [ -z "$TUNNEL_ID" ]; then
echo "⚠️ No se pudo leer TUNNEL_ID de credentials.json"
echo " Verifica que el archivo sea válido"
exit 1
fi
echo "✓ TUNNEL_ID encontrado: $TUNNEL_ID"
# Verificar si el tunnel existe en Cloudflare
echo "Verificando si el tunnel existe en Cloudflare..."
if cloudflared tunnel info "$TUNNEL_ID" &> /dev/null; then
echo "✓ Tunnel '$TUNNEL_NAME' existe en Cloudflare"
else
echo "⚠️ El credentials.json existe pero el tunnel no está en Cloudflare"
echo " Esto puede pasar si el tunnel fue eliminado"
echo " ¿Quieres crear uno nuevo? (s/n)"
read -r response
if [[ "$response" =~ ^[Ss]$ ]]; then
rm credentials.json
rm .env 2>/dev/null || true
else
exit 1
fi
fi
fi
# Si no existe credentials.json, crear el tunnel
if [ ! -f "credentials.json" ]; then
echo ""
echo "📝 Necesitamos crear un nuevo tunnel"
echo ""
# Login a Cloudflare
echo "1⃣ Autenticando con Cloudflare..."
echo " Se abrirá tu navegador para autorizar"
cloudflared tunnel login
# Verificar si ya existe un tunnel con este nombre
echo ""
echo "2⃣ Verificando si existe el tunnel '$TUNNEL_NAME'..."
EXISTING_TUNNEL=$(cloudflared tunnel list --output json 2>/dev/null | jq -r ".[] | select(.name==\"$TUNNEL_NAME\") | .id" || echo "")
if [ -n "$EXISTING_TUNNEL" ]; then
echo "✓ Tunnel '$TUNNEL_NAME' ya existe con ID: $EXISTING_TUNNEL"
TUNNEL_ID="$EXISTING_TUNNEL"
# Copiar credentials del directorio de cloudflared
CRED_FILE="$HOME/.cloudflared/$TUNNEL_ID.json"
if [ -f "$CRED_FILE" ]; then
cp "$CRED_FILE" ./credentials.json
echo "✓ credentials.json copiado"
else
echo "⚠️ No se encontró el archivo de credenciales en $CRED_FILE"
echo " Creando un nuevo tunnel..."
cloudflared tunnel delete "$TUNNEL_NAME" --force
EXISTING_TUNNEL=""
fi
fi
if [ -z "$EXISTING_TUNNEL" ]; then
echo "Creando nuevo tunnel '$TUNNEL_NAME'..."
cloudflared tunnel create "$TUNNEL_NAME"
# Obtener el TUNNEL_ID del nuevo tunnel
TUNNEL_ID=$(cloudflared tunnel list --output json 2>/dev/null | jq -r ".[] | select(.name==\"$TUNNEL_NAME\") | .id")
if [ -z "$TUNNEL_ID" ]; then
echo "❌ Error al crear el tunnel"
exit 1
fi
echo "✓ Tunnel creado con ID: $TUNNEL_ID"
# Copiar credentials
cp "$HOME/.cloudflared/$TUNNEL_ID.json" ./credentials.json
echo "✓ credentials.json creado"
fi
fi
# Crear/actualizar .env
if [ ! -f ".env" ] || ! grep -q "TUNNEL_ID=" .env 2>/dev/null; then
echo ""
echo "3⃣ Creando archivo .env..."
echo "TUNNEL_ID=$TUNNEL_ID" > .env
echo "✓ .env creado con TUNNEL_ID=$TUNNEL_ID"
else
echo "✓ .env ya existe"
fi
# Configurar DNS en Cloudflare
echo ""
echo "4⃣ Configurando DNS en Cloudflare..."
echo ""
echo "Para que el tunnel funcione, necesitas configurar DNS:"
echo ""
echo "Opción A: Usando cloudflared CLI (RECOMENDADO)"
echo "----------------------------------------------"
echo "cloudflared tunnel route dns $TUNNEL_ID $WILDCARD_SUBDOMAIN.$DOMAIN"
echo "cloudflared tunnel route dns $TUNNEL_ID $DOMAIN"
echo ""
echo "Opción B: Manualmente en el Dashboard de Cloudflare"
echo "---------------------------------------------------"
echo "1. Ve a https://dash.cloudflare.com"
echo "2. Selecciona tu dominio: $DOMAIN"
echo "3. Ve a DNS > Records"
echo "4. Crea estos registros CNAME:"
echo " - Name: $WILDCARD_SUBDOMAIN"
echo " Target: $TUNNEL_ID.cfargotunnel.com"
echo " Proxy: ON (nube naranja)"
echo ""
echo " - Name: @"
echo " Target: $TUNNEL_ID.cfargotunnel.com"
echo " Proxy: ON (nube naranja)"
echo ""
echo "¿Quieres configurar DNS automáticamente? (s/n)"
read -r dns_response
if [[ "$dns_response" =~ ^[Ss]$ ]]; then
echo "Configurando DNS..."
cloudflared tunnel route dns "$TUNNEL_ID" "$WILDCARD_SUBDOMAIN.$DOMAIN" || echo "⚠️ Error configurando wildcard, puede que ya exista"
cloudflared tunnel route dns "$TUNNEL_ID" "$DOMAIN" || echo "⚠️ Error configurando dominio raíz, puede que ya exista"
echo "✓ DNS configurado"
fi
echo ""
echo "✅ Setup completado!"
echo ""
echo "Archivos generados:"
echo " - credentials.json (TUNNEL_ID: $TUNNEL_ID)"
echo " - .env"
echo ""
echo "Próximos pasos:"
echo " 1. Levanta el tunnel: docker-compose up -d"
echo " 2. Verifica logs: docker-compose logs -f"
echo " 3. Prueba acceder a: https://amigos.$DOMAIN"
echo ""
echo "Nota: credentials.json y .env NO se commitean al repo (están en .gitignore)"