Files
cloudflareTunnel/setup.sh
josedario87 2c245ea531
Some checks failed
deploy-tunnel / deploy (push) Failing after 1s
Add automated setup script for tunnel management
- 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
2025-10-05 02:22:23 -06:00

174 lines
5.9 KiB
Bash
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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)"