- Complete ngrok setup with automated scripts - One-click internet exposure with setup-complete.sh - Dynamic URL management and Docker reconfiguration - Multi-tunnel configuration for free ngrok accounts - Comprehensive documentation and verification tools - Organized in dedicated ngrok/ folder for easy management
173 lines
5.5 KiB
Bash
Executable File
173 lines
5.5 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# SnatchGame - Gestor de túneles ngrok
|
|
echo "🌐 SnatchGame Tunnel Manager"
|
|
echo "============================"
|
|
|
|
# Función para extraer URLs dinámicamente
|
|
get_urls() {
|
|
# Primero intentar usar la API de ngrok (puerto 4040)
|
|
if curl -s http://localhost:4040/api/tunnels > /tmp/ngrok-api.json 2>/dev/null; then
|
|
# Extraer URLs usando jq o parsing manual
|
|
if command -v jq > /dev/null; then
|
|
CLIENT_URL=$(jq -r '.tunnels[] | select(.name=="snatchgame-client") | .public_url' /tmp/ngrok-api.json 2>/dev/null)
|
|
ADMIN_URL=$(jq -r '.tunnels[] | select(.name=="snatchgame-admin") | .public_url' /tmp/ngrok-api.json 2>/dev/null)
|
|
SERVER_URL=$(jq -r '.tunnels[] | select(.name=="snatchgame-server") | .public_url' /tmp/ngrok-api.json 2>/dev/null)
|
|
else
|
|
# Parsing manual sin jq
|
|
CLIENT_URL=$(grep -o '"snatchgame-client"[^}]*"public_url":"[^"]*"' /tmp/ngrok-api.json | grep -o 'https://[^"]*' | head -1)
|
|
ADMIN_URL=$(grep -o '"snatchgame-admin"[^}]*"public_url":"[^"]*"' /tmp/ngrok-api.json | grep -o 'https://[^"]*' | head -1)
|
|
SERVER_URL=$(grep -o '"snatchgame-server"[^}]*"public_url":"[^"]*"' /tmp/ngrok-api.json | grep -o 'https://[^"]*' | head -1)
|
|
fi
|
|
else
|
|
# Fallback a logs si la API no está disponible
|
|
if [[ -f /tmp/ngrok-all.log ]]; then
|
|
CLIENT_URL=$(grep "snatchgame-client" /tmp/ngrok-all.log | grep -o 'url=https://[^[:space:]]*' | cut -d'=' -f2 | tail -1)
|
|
ADMIN_URL=$(grep "snatchgame-admin" /tmp/ngrok-all.log | grep -o 'url=https://[^[:space:]]*' | cut -d'=' -f2 | tail -1)
|
|
SERVER_URL=$(grep "snatchgame-server" /tmp/ngrok-all.log | grep -o 'url=https://[^[:space:]]*' | cut -d'=' -f2 | tail -1)
|
|
fi
|
|
fi
|
|
|
|
# Validar que las URLs no estén vacías
|
|
[[ -z "$CLIENT_URL" ]] && CLIENT_URL="No disponible"
|
|
[[ -z "$ADMIN_URL" ]] && ADMIN_URL="No disponible"
|
|
[[ -z "$SERVER_URL" ]] && SERVER_URL="No disponible"
|
|
}
|
|
|
|
# Obtener URLs actuales
|
|
get_urls
|
|
|
|
# Función para mostrar estado
|
|
show_status() {
|
|
# Refrescar URLs antes de mostrar
|
|
get_urls
|
|
|
|
echo ""
|
|
echo "📊 ESTADO ACTUAL:"
|
|
echo "=================="
|
|
|
|
# Verificar si ngrok está corriendo
|
|
if pgrep ngrok > /dev/null; then
|
|
echo "✅ ngrok: ACTIVO"
|
|
else
|
|
echo "❌ ngrok: INACTIVO"
|
|
fi
|
|
|
|
# Verificar Docker
|
|
if docker compose ps | grep -q "Up"; then
|
|
echo "✅ Docker: ACTIVO"
|
|
else
|
|
echo "❌ Docker: INACTIVO"
|
|
fi
|
|
|
|
echo ""
|
|
echo "🌐 URLs PÚBLICAS:"
|
|
if [[ "$CLIENT_URL" != "No disponible" ]]; then
|
|
echo "🎮 CLIENTE: $CLIENT_URL"
|
|
echo "📊 ADMIN: $ADMIN_URL"
|
|
echo "🎯 SERVER: $SERVER_URL"
|
|
else
|
|
echo "⚠️ URLs no disponibles (ngrok no está corriendo o logs no encontrados)"
|
|
fi
|
|
}
|
|
|
|
# Función para iniciar túneles
|
|
start_tunnels() {
|
|
echo "🚀 Iniciando túneles..."
|
|
|
|
# Asegurar que Docker esté corriendo
|
|
if ! docker compose ps | grep -q "Up"; then
|
|
echo "🐳 Iniciando servicios Docker..."
|
|
docker compose -f docker-compose.ngrok.yml up -d
|
|
sleep 10
|
|
fi
|
|
|
|
# Asegurar que ngrok no esté corriendo
|
|
if pgrep ngrok > /dev/null; then
|
|
echo "⚠️ ngrok ya está corriendo"
|
|
else
|
|
echo "🌐 Iniciando túneles ngrok..."
|
|
nohup /tmp/ngrok start --all > /tmp/ngrok-all.log 2>&1 &
|
|
sleep 5
|
|
echo "✅ Túneles iniciados"
|
|
fi
|
|
}
|
|
|
|
# Función para parar túneles
|
|
stop_tunnels() {
|
|
echo "🛑 Parando túneles..."
|
|
pkill -f ngrok 2>/dev/null || true
|
|
echo "✅ Túneles detenidos"
|
|
}
|
|
|
|
# Función para reiniciar túneles
|
|
restart_tunnels() {
|
|
echo "🔄 Reiniciando túneles..."
|
|
stop_tunnels
|
|
sleep 3
|
|
start_tunnels
|
|
}
|
|
|
|
# Función para mostrar logs
|
|
show_logs() {
|
|
echo "📄 Logs de ngrok:"
|
|
echo "=================="
|
|
if [[ -f /tmp/ngrok-all.log ]]; then
|
|
tail -20 /tmp/ngrok-all.log
|
|
else
|
|
echo "No se encontraron logs"
|
|
fi
|
|
}
|
|
|
|
# Menú principal
|
|
case "${1:-status}" in
|
|
"start")
|
|
start_tunnels
|
|
show_status
|
|
;;
|
|
"stop")
|
|
stop_tunnels
|
|
show_status
|
|
;;
|
|
"restart")
|
|
restart_tunnels
|
|
show_status
|
|
;;
|
|
"logs")
|
|
show_logs
|
|
;;
|
|
"urls")
|
|
get_urls
|
|
echo "🌐 URLs de SnatchGame:"
|
|
if [[ "$CLIENT_URL" != "No disponible" ]]; then
|
|
echo "🎮 CLIENTE: $CLIENT_URL"
|
|
echo "📊 ADMIN: $ADMIN_URL"
|
|
echo "🎯 SERVER: $SERVER_URL"
|
|
echo ""
|
|
echo "📋 Para copiar fácilmente:"
|
|
echo "Cliente: $CLIENT_URL"
|
|
else
|
|
echo "⚠️ URLs no disponibles. Ejecuta: ./manage-tunnels.sh start"
|
|
fi
|
|
;;
|
|
"status"|*)
|
|
show_status
|
|
echo ""
|
|
echo "💡 COMANDOS DISPONIBLES:"
|
|
echo " ./manage-tunnels.sh start - Iniciar túneles"
|
|
echo " ./manage-tunnels.sh stop - Parar túneles"
|
|
echo " ./manage-tunnels.sh restart - Reiniciar túneles"
|
|
echo " ./manage-tunnels.sh logs - Ver logs"
|
|
echo " ./manage-tunnels.sh urls - Mostrar URLs"
|
|
echo ""
|
|
if [[ "$CLIENT_URL" != "No disponible" ]]; then
|
|
echo "🎮 PARA JUGAR:"
|
|
echo " Abre: $CLIENT_URL"
|
|
echo ""
|
|
echo "📊 PARA ADMINISTRAR:"
|
|
echo " Abre: $ADMIN_URL"
|
|
else
|
|
echo "⚠️ Para obtener URLs ejecuta: ./manage-tunnels.sh start"
|
|
fi
|
|
;;
|
|
esac |