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
174 lines
5.9 KiB
Bash
Executable File
174 lines
5.9 KiB
Bash
Executable File
#!/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)"
|