feat: Add ngrok internet exposure system for testing
- 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
This commit is contained in:
107
ngrok/ARCHIVOS.md
Normal file
107
ngrok/ARCHIVOS.md
Normal file
@@ -0,0 +1,107 @@
|
||||
# 📁 Contenido de la Carpeta ngrok/
|
||||
|
||||
## 🚀 Scripts Principales
|
||||
|
||||
### **`setup-complete.sh`** ⭐ **PRINCIPAL**
|
||||
- **Función**: Script todo-en-uno que hace el setup completo
|
||||
- **Uso**: `./setup-complete.sh`
|
||||
- **Hace**:
|
||||
1. Limpia procesos anteriores
|
||||
2. Inicia Docker con configuración básica
|
||||
3. Crea túneles ngrok y obtiene URLs
|
||||
4. Reconfigura Docker con URLs reales
|
||||
5. Verifica que todo funcione
|
||||
6. Mantiene túneles activos
|
||||
|
||||
### **`manage-tunnels.sh`** 🛠️ **GESTIÓN**
|
||||
- **Función**: Gestiona túneles ngrok existentes
|
||||
- **Uso**:
|
||||
- `./manage-tunnels.sh status` - Ver estado
|
||||
- `./manage-tunnels.sh start` - Iniciar túneles
|
||||
- `./manage-tunnels.sh stop` - Parar túneles
|
||||
- `./manage-tunnels.sh urls` - Ver URLs actuales
|
||||
- `./manage-tunnels.sh restart` - Reiniciar todo
|
||||
|
||||
### **`test.sh`** 🧪 **VERIFICACIÓN**
|
||||
- **Función**: Verifica que todo esté listo para usar
|
||||
- **Uso**: `./test.sh`
|
||||
- **Verifica**: ngrok, Docker, imágenes, configuración
|
||||
|
||||
## 🔧 Scripts Auxiliares
|
||||
|
||||
### **`update-ngrok-urls.sh`**
|
||||
- **Función**: Actualiza URLs de Docker con ngrok (usado por setup-complete)
|
||||
- **Uso**: `./update-ngrok-urls.sh`
|
||||
|
||||
### **`setup-ngrok.sh`**
|
||||
- **Función**: Setup inicial con configuración manual
|
||||
- **Uso**: `./setup-ngrok.sh`
|
||||
|
||||
### **`expose-ngrok.sh`**
|
||||
- **Función**: Script simple para exponer servicios
|
||||
- **Uso**: `./expose-ngrok.sh`
|
||||
|
||||
## 📄 Archivos de Configuración
|
||||
|
||||
### **`docker-compose.ngrok.yml`**
|
||||
- **Función**: Configuración Docker optimizada para ngrok
|
||||
- **Contenido**: Servicios sin URLs hardcodeadas
|
||||
- **Usado por**: Todos los scripts
|
||||
|
||||
### **`README.md`**
|
||||
- **Función**: Documentación completa de uso
|
||||
- **Contenido**: Instrucciones, ejemplos, troubleshooting
|
||||
|
||||
### **`ARCHIVOS.md`** (este archivo)
|
||||
- **Función**: Descripción de todos los archivos
|
||||
- **Contenido**: Qué hace cada script y archivo
|
||||
|
||||
## 🎯 Uso Recomendado
|
||||
|
||||
### **Para Usuarios Normales:**
|
||||
```bash
|
||||
cd ngrok
|
||||
./setup-complete.sh
|
||||
```
|
||||
|
||||
### **Para Debugging:**
|
||||
```bash
|
||||
# Verificar que todo esté listo
|
||||
./test.sh
|
||||
|
||||
# Ver estado actual
|
||||
./manage-tunnels.sh status
|
||||
|
||||
# Ver solo las URLs
|
||||
./manage-tunnels.sh urls
|
||||
```
|
||||
|
||||
### **Para Reinicios:**
|
||||
```bash
|
||||
# Reiniciar todo
|
||||
./manage-tunnels.sh restart
|
||||
|
||||
# O hacer setup completo desde cero
|
||||
./setup-complete.sh
|
||||
```
|
||||
|
||||
## 📋 Dependencias
|
||||
|
||||
### **Externas:**
|
||||
- ngrok instalado en `/tmp/ngrok`
|
||||
- Docker funcionando
|
||||
- Imágenes Docker construidas
|
||||
- Authtoken de ngrok configurado
|
||||
|
||||
### **Internas:**
|
||||
- Todos los scripts están en la misma carpeta
|
||||
- Rutas relativas configuradas correctamente
|
||||
- Scripts ejecutables (`chmod +x`)
|
||||
|
||||
## 🎉 Resultado
|
||||
|
||||
Después de ejecutar `./setup-complete.sh` obtienes:
|
||||
- 🎮 URL del cliente para jugadores
|
||||
- 📊 URL del admin para control
|
||||
- 🎯 URL del servidor (configurada automáticamente)
|
||||
- ✅ Sistema funcionando en internet
|
||||
169
ngrok/README.md
Normal file
169
ngrok/README.md
Normal file
@@ -0,0 +1,169 @@
|
||||
# 🌐 SnatchGame - Ngrok Internet Exposure
|
||||
|
||||
Esta carpeta contiene todo lo necesario para exponer SnatchGame a internet usando ngrok.
|
||||
|
||||
## 🚀 Uso Rápido
|
||||
|
||||
### **Método Fácil (Recomendado):**
|
||||
```bash
|
||||
cd ngrok
|
||||
./setup-complete.sh
|
||||
```
|
||||
|
||||
¡Eso es todo! El script hará todo automáticamente y te dará las URLs públicas.
|
||||
|
||||
## 📁 Archivos Incluidos
|
||||
|
||||
### **Scripts Principales:**
|
||||
|
||||
- **`setup-complete.sh`** - 🎯 **Script principal** - Hace todo automáticamente
|
||||
- **`manage-tunnels.sh`** - 🛠️ Gestión de túneles (start/stop/status/urls)
|
||||
- **`update-ngrok-urls.sh`** - 🔄 Actualiza URLs de Docker con ngrok
|
||||
- **`docker-compose.ngrok.yml`** - 🐳 Configuración Docker para ngrok
|
||||
|
||||
### **Scripts Adicionales:**
|
||||
- **`setup-ngrok.sh`** - Setup inicial con configuración manual
|
||||
- **`expose-ngrok.sh`** - Script simple para exponer servicios
|
||||
|
||||
## 🔧 Métodos de Uso
|
||||
|
||||
### **1. Automático (Más Fácil):**
|
||||
```bash
|
||||
./setup-complete.sh
|
||||
```
|
||||
- ✅ Hace todo en orden correcto
|
||||
- ✅ URLs dinámicas automáticas
|
||||
- ✅ Verificación completa
|
||||
- ✅ Mantiene túneles activos
|
||||
|
||||
### **2. Manual (Más Control):**
|
||||
```bash
|
||||
# Ver estado
|
||||
./manage-tunnels.sh status
|
||||
|
||||
# Iniciar túneles
|
||||
./manage-tunnels.sh start
|
||||
|
||||
# Ver URLs actuales
|
||||
./manage-tunnels.sh urls
|
||||
|
||||
# Parar túneles
|
||||
./manage-tunnels.sh stop
|
||||
|
||||
# Reiniciar todo
|
||||
./manage-tunnels.sh restart
|
||||
```
|
||||
|
||||
### **3. Solo actualizar URLs:**
|
||||
```bash
|
||||
./update-ngrok-urls.sh
|
||||
```
|
||||
|
||||
## 📋 Prerrequisitos
|
||||
|
||||
### **1. Cuenta ngrok (Gratis):**
|
||||
1. Regístrate en: https://dashboard.ngrok.com/signup
|
||||
2. Obtén tu authtoken: https://dashboard.ngrok.com/get-started/your-authtoken
|
||||
3. Configúralo una vez:
|
||||
```bash
|
||||
/tmp/ngrok config add-authtoken TU_TOKEN_AQUI
|
||||
```
|
||||
|
||||
### **2. Docker funcionando:**
|
||||
- Los servicios de SnatchGame deben estar builds
|
||||
- Docker compose debe estar disponible
|
||||
|
||||
## 🌐 URLs que obtendrás
|
||||
|
||||
Después de ejecutar el setup obtendrás 3 URLs públicas:
|
||||
|
||||
- **🎮 CLIENTE** - Para que los jugadores se conecten
|
||||
- **📊 ADMIN** - Para administrar el juego
|
||||
- **🎯 SERVIDOR** - API del juego (configurado automáticamente)
|
||||
|
||||
## 🛠️ Solución de Problemas
|
||||
|
||||
### **Error: "authentication failed"**
|
||||
```bash
|
||||
# Configura tu authtoken de ngrok
|
||||
/tmp/ngrok config add-authtoken TU_TOKEN
|
||||
```
|
||||
|
||||
### **Error: "port already in use"**
|
||||
```bash
|
||||
# Limpia procesos anteriores
|
||||
pkill -f ngrok
|
||||
docker compose down
|
||||
```
|
||||
|
||||
### **URLs no funcionan**
|
||||
```bash
|
||||
# Reinicia todo el setup
|
||||
./manage-tunnels.sh restart
|
||||
```
|
||||
|
||||
### **Docker no responde**
|
||||
```bash
|
||||
# Verifica que los servicios estén construidos
|
||||
cd .. && docker compose ps
|
||||
```
|
||||
|
||||
## 📊 Flujo de Funcionamiento
|
||||
|
||||
```
|
||||
1. 🛑 Limpia procesos anteriores
|
||||
↓
|
||||
2. 🐳 Inicia servicios Docker (localhost)
|
||||
↓
|
||||
3. 🌐 Crea túneles ngrok → Obtiene URLs públicas
|
||||
↓
|
||||
4. 🔄 Reconfigura Docker con URLs reales
|
||||
↓
|
||||
5. ✅ Verifica que todo funcione
|
||||
↓
|
||||
6. 🎉 ¡Sistema funcionando en internet!
|
||||
```
|
||||
|
||||
## 🔍 Verificación
|
||||
|
||||
### **Verificar que funciona:**
|
||||
```bash
|
||||
# 1. Ver estado
|
||||
./manage-tunnels.sh status
|
||||
|
||||
# 2. Ver URLs
|
||||
./manage-tunnels.sh urls
|
||||
|
||||
# 3. Probar cliente
|
||||
curl https://TU_URL_CLIENTE/health
|
||||
```
|
||||
|
||||
### **URLs correctas:**
|
||||
- Cliente debe devolver: `{"status":"healthy","service":"snatchgame-client"}`
|
||||
- Admin debe devolver: `{"status":"healthy","service":"snatchgame-admin"}`
|
||||
- Servidor debe devolver: `{"status":"healthy"}`
|
||||
|
||||
## 🎯 Comando de Un Solo Paso
|
||||
|
||||
Para usuarios experimentados:
|
||||
```bash
|
||||
cd ngrok && ./setup-complete.sh
|
||||
```
|
||||
|
||||
## ⚠️ Notas Importantes
|
||||
|
||||
- **Mantén la terminal abierta** - Los túneles se cierran si cierras la terminal
|
||||
- **URLs dinámicas** - Cambian cada vez que reinicias ngrok
|
||||
- **Primera vez** - ngrok puede pedir "Visit Site" en el navegador
|
||||
- **Cuenta gratuita** - Túneles estables mientras esté activo
|
||||
|
||||
## 🎮 Para Jugar
|
||||
|
||||
1. Ejecuta: `./setup-complete.sh`
|
||||
2. Copia la URL del CLIENTE
|
||||
3. Comparte con amigos
|
||||
4. ¡Jueguen desde cualquier lugar del mundo!
|
||||
|
||||
---
|
||||
|
||||
> 💡 **Tip**: Guarda las URLs que te dé el script, son válidas mientras mantengas la terminal abierta.
|
||||
71
ngrok/docker-compose.ngrok.yml
Normal file
71
ngrok/docker-compose.ngrok.yml
Normal file
@@ -0,0 +1,71 @@
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
# Servidor Colyseus
|
||||
snatchgame-server:
|
||||
image: gitea.interno.com/nucleo000/snatchgame-server:latest
|
||||
container_name: snatchgame-server
|
||||
ports:
|
||||
- "3067:2567"
|
||||
environment:
|
||||
- NODE_ENV=production
|
||||
- PORT=2567
|
||||
networks:
|
||||
- snatchgame-network
|
||||
restart: unless-stopped
|
||||
healthcheck:
|
||||
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:2567/health"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 40s
|
||||
|
||||
# Cliente Vue UI
|
||||
snatchgame-client:
|
||||
image: gitea.interno.com/nucleo000/snatchgame-client:latest
|
||||
container_name: snatchgame-client
|
||||
ports:
|
||||
- "3010:3000"
|
||||
environment:
|
||||
- NODE_ENV=production
|
||||
- PORT=3000
|
||||
- SERVER_URL=http://snatchgame-server:2567
|
||||
- PUBLIC_SERVER_URL=NGROK_SERVER_URL # Se actualizará dinámicamente
|
||||
depends_on:
|
||||
- snatchgame-server
|
||||
networks:
|
||||
- snatchgame-network
|
||||
restart: unless-stopped
|
||||
healthcheck:
|
||||
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:3000/health"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 40s
|
||||
|
||||
# Admin Dashboard
|
||||
snatchgame-admin:
|
||||
image: gitea.interno.com/nucleo000/snatchgame-admin:latest
|
||||
container_name: snatchgame-admin
|
||||
ports:
|
||||
- "3011:3001"
|
||||
environment:
|
||||
- NODE_ENV=production
|
||||
- PORT=3001
|
||||
- SERVER_URL=http://snatchgame-server:2567
|
||||
- PUBLIC_SERVER_URL=NGROK_SERVER_URL # Se actualizará dinámicamente
|
||||
depends_on:
|
||||
- snatchgame-server
|
||||
networks:
|
||||
- snatchgame-network
|
||||
restart: unless-stopped
|
||||
healthcheck:
|
||||
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:3001/health"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 40s
|
||||
|
||||
networks:
|
||||
snatchgame-network:
|
||||
driver: bridge
|
||||
131
ngrok/expose-ngrok.sh
Executable file
131
ngrok/expose-ngrok.sh
Executable file
@@ -0,0 +1,131 @@
|
||||
#!/bin/bash
|
||||
|
||||
# SnatchGame ngrok exposure script
|
||||
echo "🚀 Exponiendo SnatchGame a internet con ngrok..."
|
||||
|
||||
# Verificar que ngrok esté disponible
|
||||
if ! command -v /tmp/ngrok &> /dev/null; then
|
||||
echo "❌ ngrok no encontrado. Ejecuta primero la instalación."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Verificar que los servicios Docker estén corriendo
|
||||
if ! docker compose ps | grep -q "Up"; then
|
||||
echo "❌ Los servicios Docker no están corriendo. Ejecuta: docker compose up -d"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✅ Servicios Docker verificados"
|
||||
echo "🌐 Exponiendo servicios..."
|
||||
|
||||
# Función para matar procesos ngrok existentes
|
||||
cleanup() {
|
||||
echo "🛑 Cerrando túneles ngrok..."
|
||||
pkill -f ngrok || true
|
||||
exit 0
|
||||
}
|
||||
|
||||
# Configurar trap para cleanup
|
||||
trap cleanup SIGINT SIGTERM
|
||||
|
||||
# Verificar si ngrok está autenticado
|
||||
AUTH_CHECK=$(/tmp/ngrok config check 2>&1 || echo "not_authenticated")
|
||||
if [[ "$AUTH_CHECK" == *"not_authenticated"* ]] || [[ "$AUTH_CHECK" == *"authentication failed"* ]]; then
|
||||
echo "⚠️ ngrok no está autenticado."
|
||||
echo "📋 Pasos para autenticar:"
|
||||
echo " 1. Visita: https://dashboard.ngrok.com/get-started/your-authtoken"
|
||||
echo " 2. Copia tu authtoken"
|
||||
echo " 3. Ejecuta: /tmp/ngrok config add-authtoken TU_TOKEN_AQUI"
|
||||
echo ""
|
||||
echo "❓ ¿Tienes tu authtoken? Introduce tu token (o Enter para continuar sin autenticar):"
|
||||
read -r TOKEN
|
||||
|
||||
if [[ -n "$TOKEN" ]]; then
|
||||
/tmp/ngrok config add-authtoken "$TOKEN"
|
||||
echo "✅ Token configurado"
|
||||
else
|
||||
echo "⚠️ Continuando sin autenticar (túneles temporales)"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Exponer Cliente (Puerto 3010)
|
||||
echo "🎮 Exponiendo Cliente SnatchGame..."
|
||||
/tmp/ngrok http 3010 --log=stdout > /tmp/ngrok-client.log 2>&1 &
|
||||
CLIENT_PID=$!
|
||||
|
||||
# Exponer Admin (Puerto 3011)
|
||||
echo "📊 Exponiendo Admin Dashboard..."
|
||||
/tmp/ngrok http 3011 --log=stdout > /tmp/ngrok-admin.log 2>&1 &
|
||||
ADMIN_PID=$!
|
||||
|
||||
# Exponer Servidor (Puerto 3067)
|
||||
echo "🎯 Exponiendo Servidor Colyseus..."
|
||||
/tmp/ngrok http 3067 --log=stdout > /tmp/ngrok-server.log 2>&1 &
|
||||
SERVER_PID=$!
|
||||
|
||||
# Esperar un momento para que se establezcan los túneles
|
||||
echo "⏳ Estableciendo túneles..."
|
||||
sleep 5
|
||||
|
||||
# Función para extraer URL de logs de ngrok
|
||||
get_ngrok_url() {
|
||||
local log_file=$1
|
||||
local max_attempts=10
|
||||
local attempt=1
|
||||
|
||||
while [ $attempt -le $max_attempts ]; do
|
||||
if [ -f "$log_file" ]; then
|
||||
local url=$(grep -o 'url=https://[^[:space:]]*' "$log_file" | head -1 | cut -d'=' -f2)
|
||||
if [ -n "$url" ]; then
|
||||
echo "$url"
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
sleep 2
|
||||
((attempt++))
|
||||
done
|
||||
echo "❌ URL no encontrada"
|
||||
return 1
|
||||
}
|
||||
|
||||
# Obtener URLs
|
||||
echo ""
|
||||
echo "🌐 URLs públicas de SnatchGame:"
|
||||
echo "================================"
|
||||
|
||||
CLIENT_URL=$(get_ngrok_url "/tmp/ngrok-client.log")
|
||||
ADMIN_URL=$(get_ngrok_url "/tmp/ngrok-admin.log")
|
||||
SERVER_URL=$(get_ngrok_url "/tmp/ngrok-server.log")
|
||||
|
||||
echo "🎮 Cliente UI: $CLIENT_URL"
|
||||
echo "📊 Admin Panel: $ADMIN_URL"
|
||||
echo "🎯 Servidor API: $SERVER_URL"
|
||||
|
||||
echo ""
|
||||
echo "📋 Instrucciones:"
|
||||
echo " • Comparte la URL del Cliente con los jugadores"
|
||||
echo " • Usa la URL del Admin para monitorear el juego"
|
||||
echo " • Los servicios funcionan normalmente"
|
||||
echo ""
|
||||
echo "⚠️ IMPORTANTE:"
|
||||
echo " • Estas URLs son temporales (se renuevan cada 2 horas sin cuenta)"
|
||||
echo " • Con cuenta gratuita ngrok son permanentes"
|
||||
echo " • Presiona Ctrl+C para cerrar todos los túneles"
|
||||
echo ""
|
||||
|
||||
# Mostrar estado de túneles
|
||||
echo "📡 Estado de túneles:"
|
||||
echo " Cliente PID: $CLIENT_PID"
|
||||
echo " Admin PID: $ADMIN_PID"
|
||||
echo " Servidor PID: $SERVER_PID"
|
||||
|
||||
# Mantener el script corriendo
|
||||
echo "🔄 Túneles activos. Presiona Ctrl+C para cerrar..."
|
||||
while true; do
|
||||
# Verificar que los procesos sigan corriendo
|
||||
if ! kill -0 $CLIENT_PID 2>/dev/null || ! kill -0 $ADMIN_PID 2>/dev/null || ! kill -0 $SERVER_PID 2>/dev/null; then
|
||||
echo "❌ Uno o más túneles se cerraron inesperadamente"
|
||||
cleanup
|
||||
fi
|
||||
sleep 30
|
||||
done
|
||||
173
ngrok/manage-tunnels.sh
Executable file
173
ngrok/manage-tunnels.sh
Executable file
@@ -0,0 +1,173 @@
|
||||
#!/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
|
||||
180
ngrok/setup-complete.sh
Executable file
180
ngrok/setup-complete.sh
Executable file
@@ -0,0 +1,180 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "🚀 SnatchGame - Setup Completo (Orden Correcto)"
|
||||
echo "==============================================="
|
||||
|
||||
# Paso 1: Parar todo lo existente
|
||||
echo "🛑 Limpiando procesos existentes..."
|
||||
pkill -f ngrok 2>/dev/null || true
|
||||
cd .. && docker compose down 2>/dev/null && cd ngrok || true
|
||||
|
||||
# Paso 2: Iniciar servicios Docker PRIMERO (sin URLs públicas)
|
||||
echo "🐳 Iniciando servicios Docker básicos..."
|
||||
cd .. && docker compose -f ngrok/docker-compose.ngrok.yml up -d && cd ngrok
|
||||
|
||||
# Esperar a que estén listos
|
||||
echo "⏳ Esperando servicios Docker..."
|
||||
sleep 15
|
||||
|
||||
# Verificar que Docker esté funcionando
|
||||
echo "🔍 Verificando servicios locales..."
|
||||
for port in 3010 3011 3067; do
|
||||
if curl -f http://localhost:$port/health &>/dev/null; then
|
||||
echo "✅ Puerto $port: OK"
|
||||
else
|
||||
echo "❌ Puerto $port: FALLO"
|
||||
echo "Error: Docker no está funcionando correctamente"
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
# Paso 3: Crear túneles ngrok
|
||||
echo ""
|
||||
echo "🌐 Creando túneles ngrok..."
|
||||
/tmp/ngrok start --all > /tmp/ngrok-startup.log 2>&1 &
|
||||
|
||||
# Esperar a que ngrok se establezca
|
||||
echo "⏳ Esperando túneles ngrok..."
|
||||
sleep 10
|
||||
|
||||
# Paso 4: Obtener URLs de ngrok
|
||||
echo "📡 Obteniendo URLs de ngrok..."
|
||||
if curl -s http://localhost:4040/api/tunnels > /tmp/ngrok-api.json 2>/dev/null; then
|
||||
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)
|
||||
|
||||
if [[ -n "$SERVER_URL" && -n "$CLIENT_URL" && -n "$ADMIN_URL" ]]; then
|
||||
echo "✅ URLs obtenidas exitosamente"
|
||||
echo " Server: $SERVER_URL"
|
||||
echo " Client: $CLIENT_URL"
|
||||
echo " Admin: $ADMIN_URL"
|
||||
else
|
||||
echo "❌ No se pudieron obtener todas las URLs"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
echo "❌ No se pudo conectar a la API de ngrok"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Paso 5: Reconfigurar Docker con URLs reales
|
||||
echo ""
|
||||
echo "🔄 Reconfigurando Docker con URLs públicas..."
|
||||
|
||||
# Crear docker-compose con URLs reales
|
||||
cat > /tmp/docker-compose-final.yml << EOF
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
snatchgame-server:
|
||||
image: gitea.interno.com/nucleo000/snatchgame-server:latest
|
||||
container_name: snatchgame-server
|
||||
ports:
|
||||
- "3067:2567"
|
||||
environment:
|
||||
- NODE_ENV=production
|
||||
- PORT=2567
|
||||
networks:
|
||||
- snatchgame-network
|
||||
restart: unless-stopped
|
||||
|
||||
snatchgame-client:
|
||||
image: gitea.interno.com/nucleo000/snatchgame-client:latest
|
||||
container_name: snatchgame-client
|
||||
ports:
|
||||
- "3010:3000"
|
||||
environment:
|
||||
- NODE_ENV=production
|
||||
- PORT=3000
|
||||
- SERVER_URL=http://snatchgame-server:2567
|
||||
- PUBLIC_SERVER_URL=$SERVER_URL
|
||||
depends_on:
|
||||
- snatchgame-server
|
||||
networks:
|
||||
- snatchgame-network
|
||||
restart: unless-stopped
|
||||
|
||||
snatchgame-admin:
|
||||
image: gitea.interno.com/nucleo000/snatchgame-admin:latest
|
||||
container_name: snatchgame-admin
|
||||
ports:
|
||||
- "3011:3001"
|
||||
environment:
|
||||
- NODE_ENV=production
|
||||
- PORT=3001
|
||||
- SERVER_URL=http://snatchgame-server:2567
|
||||
- PUBLIC_SERVER_URL=$SERVER_URL
|
||||
depends_on:
|
||||
- snatchgame-server
|
||||
networks:
|
||||
- snatchgame-network
|
||||
restart: unless-stopped
|
||||
|
||||
networks:
|
||||
snatchgame-network:
|
||||
driver: bridge
|
||||
EOF
|
||||
|
||||
# Reiniciar Docker con configuración final
|
||||
cd .. && docker compose down && cd ngrok
|
||||
cd .. && docker compose -f /tmp/docker-compose-final.yml up -d && cd ngrok
|
||||
|
||||
echo "⏳ Esperando servicios reconfigurados..."
|
||||
sleep 20
|
||||
|
||||
# Paso 6: Verificación final
|
||||
echo ""
|
||||
echo "🔍 Verificación final..."
|
||||
|
||||
# Verificar que el cliente devuelva la URL correcta
|
||||
echo "Verificando configuración del cliente..."
|
||||
CLIENT_CONFIG=$(curl -s https://$(echo $CLIENT_URL | cut -d'/' -f3)/api/config 2>/dev/null || echo "Error")
|
||||
|
||||
if [[ "$CLIENT_CONFIG" == *"$SERVER_URL"* ]]; then
|
||||
echo "✅ Cliente configurado correctamente"
|
||||
else
|
||||
echo "⚠️ Cliente aún no está configurado. Config actual: $CLIENT_CONFIG"
|
||||
fi
|
||||
|
||||
# Resultado final
|
||||
echo ""
|
||||
echo "🎉 ¡SnatchGame está LIVE en internet!"
|
||||
echo "===================================="
|
||||
echo ""
|
||||
echo "🌐 URLs PÚBLICAS:"
|
||||
echo "🎮 CLIENTE (jugadores): $CLIENT_URL"
|
||||
echo "📊 ADMIN (control): $ADMIN_URL"
|
||||
echo "🎯 SERVIDOR (API): $SERVER_URL"
|
||||
echo ""
|
||||
echo "📋 INSTRUCCIONES:"
|
||||
echo " 1. Abre: $CLIENT_URL"
|
||||
echo " 2. Comparte esa URL con otros jugadores"
|
||||
echo " 3. Usa: $ADMIN_URL para administrar"
|
||||
echo ""
|
||||
echo "✅ Sistema completamente configurado"
|
||||
echo "⚠️ Mantén esta terminal abierta para mantener túneles activos"
|
||||
|
||||
# Función de cleanup
|
||||
cleanup() {
|
||||
echo ""
|
||||
echo "🛑 Cerrando túneles y servicios..."
|
||||
pkill -f ngrok 2>/dev/null || true
|
||||
cd .. && docker compose -f /tmp/docker-compose-final.yml down 2>/dev/null && cd ngrok || true
|
||||
rm -f /tmp/docker-compose-final.yml /tmp/ngrok-api.json 2>/dev/null || true
|
||||
echo "✅ Limpieza completada"
|
||||
exit 0
|
||||
}
|
||||
|
||||
trap cleanup SIGINT SIGTERM
|
||||
|
||||
# Mantener script corriendo
|
||||
echo ""
|
||||
echo "🔄 Túneles activos. Presiona Ctrl+C para cerrar todo"
|
||||
while true; do
|
||||
if ! pgrep ngrok > /dev/null; then
|
||||
echo "❌ ngrok se cerró inesperadamente"
|
||||
cleanup
|
||||
fi
|
||||
sleep 30
|
||||
done
|
||||
178
ngrok/setup-ngrok.sh
Executable file
178
ngrok/setup-ngrok.sh
Executable file
@@ -0,0 +1,178 @@
|
||||
#!/bin/bash
|
||||
|
||||
# SnatchGame - Setup completo para ngrok
|
||||
set -e
|
||||
|
||||
echo "🚀 Configurando SnatchGame para exposición con ngrok..."
|
||||
|
||||
# Verificar ngrok
|
||||
if ! command -v /tmp/ngrok &> /dev/null; then
|
||||
echo "❌ ngrok no encontrado. Instalando..."
|
||||
wget https://bin.equinox.io/c/bNyj1mQVY4c/ngrok-v3-stable-linux-amd64.tgz -O /tmp/ngrok.tgz
|
||||
tar -xzf /tmp/ngrok.tgz -C /tmp/
|
||||
chmod +x /tmp/ngrok
|
||||
echo "✅ ngrok instalado"
|
||||
fi
|
||||
|
||||
# Verificar autenticación
|
||||
echo "🔐 Verificando autenticación ngrok..."
|
||||
if ! /tmp/ngrok config check &>/dev/null; then
|
||||
echo "⚠️ ngrok no está autenticado."
|
||||
echo "📋 Para obtener túneles estables:"
|
||||
echo " 1. Regístrate gratis en: https://dashboard.ngrok.com/signup"
|
||||
echo " 2. Copia tu authtoken de: https://dashboard.ngrok.com/get-started/your-authtoken"
|
||||
echo " 3. Pégalo aquí (o Enter para usar túneles temporales):"
|
||||
read -r TOKEN
|
||||
|
||||
if [[ -n "$TOKEN" ]]; then
|
||||
/tmp/ngrok config add-authtoken "$TOKEN"
|
||||
echo "✅ Token configurado - tendrás túneles estables"
|
||||
else
|
||||
echo "⚠️ Usando túneles temporales (se renuevan cada 2 horas)"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Parar servicios existentes
|
||||
echo "🛑 Parando servicios existentes..."
|
||||
docker compose down 2>/dev/null || true
|
||||
pkill -f ngrok 2>/dev/null || true
|
||||
|
||||
# Iniciar servicios Docker
|
||||
echo "🐳 Iniciando servicios Docker..."
|
||||
docker compose -f docker-compose.ngrok.yml up -d
|
||||
|
||||
# Esperar a que estén healthy
|
||||
echo "⏳ Esperando a que los servicios estén listos..."
|
||||
sleep 10
|
||||
|
||||
# Verificar health
|
||||
for port in 3010 3011 3067; do
|
||||
if ! curl -f http://localhost:$port/health &>/dev/null; then
|
||||
echo "❌ Servicio en puerto $port no está respondiendo"
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
echo "✅ Todos los servicios están listos"
|
||||
|
||||
# Función para iniciar ngrok y obtener URL
|
||||
start_ngrok_tunnel() {
|
||||
local port=$1
|
||||
local service=$2
|
||||
local log_file="/tmp/ngrok-$service.log"
|
||||
|
||||
echo "🌐 Iniciando túnel para $service (puerto $port)..."
|
||||
|
||||
# Iniciar ngrok en background
|
||||
/tmp/ngrok http $port --log=stdout > "$log_file" 2>&1 &
|
||||
local pid=$!
|
||||
|
||||
# Esperar a que la URL esté disponible
|
||||
local url=""
|
||||
local attempts=0
|
||||
while [[ -z "$url" && $attempts -lt 30 ]]; do
|
||||
sleep 2
|
||||
if [[ -f "$log_file" ]]; then
|
||||
url=$(grep -o 'url=https://[^[:space:]]*' "$log_file" | head -1 | cut -d'=' -f2)
|
||||
fi
|
||||
((attempts++))
|
||||
done
|
||||
|
||||
if [[ -n "$url" ]]; then
|
||||
echo "✅ $service: $url"
|
||||
echo "$url"
|
||||
else
|
||||
echo "❌ No se pudo obtener URL para $service"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Iniciar túneles
|
||||
echo ""
|
||||
echo "🌐 Iniciando túneles ngrok..."
|
||||
SERVER_URL=$(start_ngrok_tunnel 3067 "server")
|
||||
CLIENT_URL=$(start_ngrok_tunnel 3010 "client")
|
||||
ADMIN_URL=$(start_ngrok_tunnel 3011 "admin")
|
||||
|
||||
# Verificar que todas las URLs se obtuvieron
|
||||
if [[ -z "$SERVER_URL" || -z "$CLIENT_URL" || -z "$ADMIN_URL" ]]; then
|
||||
echo "❌ Error obteniendo URLs de ngrok"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Parar servicios para reconfigurar
|
||||
echo ""
|
||||
echo "🔄 Reconfigurando servicios con URLs públicas..."
|
||||
docker compose -f docker-compose.ngrok.yml down
|
||||
|
||||
# Actualizar docker-compose con URLs reales
|
||||
sed "s|NGROK_SERVER_URL|$SERVER_URL|g" docker-compose.ngrok.yml > /tmp/docker-compose-configured.yml
|
||||
|
||||
# Reiniciar servicios con nueva configuración
|
||||
echo "🐳 Reiniciando servicios con configuración ngrok..."
|
||||
docker compose -f /tmp/docker-compose-configured.yml up -d
|
||||
|
||||
# Esperar a que estén listos nuevamente
|
||||
echo "⏳ Esperando servicios reconfigurados..."
|
||||
sleep 15
|
||||
|
||||
# Mostrar resultado final
|
||||
echo ""
|
||||
echo "🎉 ¡SnatchGame está disponible en internet!"
|
||||
echo "========================================"
|
||||
echo ""
|
||||
echo "🎮 CLIENTE (Jugadores): $CLIENT_URL"
|
||||
echo "📊 ADMIN (Administración): $ADMIN_URL"
|
||||
echo "🎯 SERVIDOR (API): $SERVER_URL"
|
||||
echo ""
|
||||
echo "📋 Instrucciones:"
|
||||
echo " • Comparte la URL del CLIENTE con los jugadores"
|
||||
echo " • Usa la URL del ADMIN para controlar el juego"
|
||||
echo " • Los jugadores pueden unirse desde cualquier lugar del mundo"
|
||||
echo ""
|
||||
echo "⚠️ Importante:"
|
||||
if /tmp/ngrok config check &>/dev/null; then
|
||||
echo " • Túneles ESTABLES (con cuenta ngrok)"
|
||||
echo " • URLs permanentes mientras el script esté corriendo"
|
||||
else
|
||||
echo " • Túneles TEMPORALES (sin cuenta ngrok)"
|
||||
echo " • URLs válidas por 2 horas máximo"
|
||||
fi
|
||||
echo " • No cerrar esta terminal para mantener túneles activos"
|
||||
echo " • Presionar Ctrl+C para cerrar todos los túneles"
|
||||
echo ""
|
||||
|
||||
# Función de cleanup
|
||||
cleanup() {
|
||||
echo ""
|
||||
echo "🛑 Cerrando túneles y servicios..."
|
||||
pkill -f ngrok 2>/dev/null || true
|
||||
docker compose -f /tmp/docker-compose-configured.yml down 2>/dev/null || true
|
||||
rm -f /tmp/docker-compose-configured.yml 2>/dev/null || true
|
||||
echo "✅ Limpieza completada"
|
||||
exit 0
|
||||
}
|
||||
|
||||
# Configurar trap
|
||||
trap cleanup SIGINT SIGTERM
|
||||
|
||||
# Mantener script corriendo
|
||||
echo "🔄 Túneles activos. Para cerrar presiona Ctrl+C"
|
||||
echo "💡 Tip: Prueba abrir $CLIENT_URL en tu navegador"
|
||||
echo ""
|
||||
|
||||
# Loop principal
|
||||
while true; do
|
||||
# Verificar que ngrok siga corriendo
|
||||
if ! pgrep ngrok > /dev/null; then
|
||||
echo "❌ Procesos ngrok terminaron inesperadamente"
|
||||
cleanup
|
||||
fi
|
||||
|
||||
# Verificar que Docker siga corriendo
|
||||
if ! docker compose -f /tmp/docker-compose-configured.yml ps | grep -q "Up"; then
|
||||
echo "❌ Servicios Docker se cerraron inesperadamente"
|
||||
cleanup
|
||||
fi
|
||||
|
||||
sleep 30
|
||||
done
|
||||
66
ngrok/test.sh
Executable file
66
ngrok/test.sh
Executable file
@@ -0,0 +1,66 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "🧪 Test rápido de la carpeta ngrok"
|
||||
echo "=================================="
|
||||
|
||||
# Verificar que estamos en la carpeta correcta
|
||||
if [[ ! -f "setup-complete.sh" ]]; then
|
||||
echo "❌ Error: Ejecuta desde la carpeta ngrok/"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✅ Carpeta ngrok encontrada"
|
||||
|
||||
# Verificar que ngrok está disponible
|
||||
if [[ ! -f "/tmp/ngrok" ]]; then
|
||||
echo "❌ Error: ngrok no está instalado en /tmp/ngrok"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✅ ngrok encontrado"
|
||||
|
||||
# Verificar que Docker está disponible
|
||||
if ! command -v docker &> /dev/null; then
|
||||
echo "❌ Error: Docker no está disponible"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✅ Docker encontrado"
|
||||
|
||||
# Verificar que las imágenes existen
|
||||
echo "🔍 Verificando imágenes Docker..."
|
||||
if docker images | grep -q "snatchgame-server"; then
|
||||
echo "✅ Imagen server encontrada"
|
||||
else
|
||||
echo "⚠️ Imagen server no encontrada"
|
||||
fi
|
||||
|
||||
if docker images | grep -q "snatchgame-client"; then
|
||||
echo "✅ Imagen client encontrada"
|
||||
else
|
||||
echo "⚠️ Imagen client no encontrada"
|
||||
fi
|
||||
|
||||
if docker images | grep -q "snatchgame-admin"; then
|
||||
echo "✅ Imagen admin encontrada"
|
||||
else
|
||||
echo "⚠️ Imagen admin no encontrada"
|
||||
fi
|
||||
|
||||
# Verificar configuración ngrok
|
||||
echo "🔍 Verificando configuración ngrok..."
|
||||
if /tmp/ngrok config check &>/dev/null; then
|
||||
echo "✅ ngrok configurado correctamente"
|
||||
else
|
||||
echo "⚠️ ngrok no está autenticado"
|
||||
echo " Ejecuta: /tmp/ngrok config add-authtoken TU_TOKEN"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "🎯 LISTO PARA USAR:"
|
||||
echo " ./setup-complete.sh"
|
||||
echo ""
|
||||
echo "📋 Si hay problemas:"
|
||||
echo " • Asegúrate de tener tu authtoken de ngrok configurado"
|
||||
echo " • Verifica que las imágenes Docker estén builds"
|
||||
echo " • Ejecuta desde la carpeta ngrok/"
|
||||
141
ngrok/update-ngrok-urls.sh
Normal file
141
ngrok/update-ngrok-urls.sh
Normal file
@@ -0,0 +1,141 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "🔄 Actualizando URLs de ngrok en Docker..."
|
||||
|
||||
# Función para obtener URLs de ngrok
|
||||
get_ngrok_urls() {
|
||||
if curl -s http://localhost:4040/api/tunnels > /tmp/ngrok-api.json 2>/dev/null; then
|
||||
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)
|
||||
else
|
||||
echo "❌ No se pudo conectar a la API de ngrok"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ -z "$SERVER_URL" ]]; then
|
||||
echo "❌ No se pudo obtener la URL del servidor"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Obtener URLs actuales
|
||||
get_ngrok_urls
|
||||
|
||||
echo "🌐 URLs detectadas:"
|
||||
echo " Server: $SERVER_URL"
|
||||
echo " Client: $CLIENT_URL"
|
||||
echo " Admin: $ADMIN_URL"
|
||||
|
||||
# Crear docker-compose temporal con URLs reales
|
||||
echo "📝 Creando configuración Docker actualizada..."
|
||||
|
||||
cat > /tmp/docker-compose-ngrok-updated.yml << EOF
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
# Servidor Colyseus
|
||||
snatchgame-server:
|
||||
image: gitea.interno.com/nucleo000/snatchgame-server:latest
|
||||
container_name: snatchgame-server
|
||||
ports:
|
||||
- "3067:2567"
|
||||
environment:
|
||||
- NODE_ENV=production
|
||||
- PORT=2567
|
||||
networks:
|
||||
- snatchgame-network
|
||||
restart: unless-stopped
|
||||
healthcheck:
|
||||
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:2567/health"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 40s
|
||||
|
||||
# Cliente Vue UI
|
||||
snatchgame-client:
|
||||
image: gitea.interno.com/nucleo000/snatchgame-client:latest
|
||||
container_name: snatchgame-client
|
||||
ports:
|
||||
- "3010:3000"
|
||||
environment:
|
||||
- NODE_ENV=production
|
||||
- PORT=3000
|
||||
- SERVER_URL=http://snatchgame-server:2567
|
||||
- PUBLIC_SERVER_URL=$SERVER_URL
|
||||
depends_on:
|
||||
- snatchgame-server
|
||||
networks:
|
||||
- snatchgame-network
|
||||
restart: unless-stopped
|
||||
healthcheck:
|
||||
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:3000/health"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 40s
|
||||
|
||||
# Admin Dashboard
|
||||
snatchgame-admin:
|
||||
image: gitea.interno.com/nucleo000/snatchgame-admin:latest
|
||||
container_name: snatchgame-admin
|
||||
ports:
|
||||
- "3011:3001"
|
||||
environment:
|
||||
- NODE_ENV=production
|
||||
- PORT=3001
|
||||
- SERVER_URL=http://snatchgame-server:2567
|
||||
- PUBLIC_SERVER_URL=$SERVER_URL
|
||||
depends_on:
|
||||
- snatchgame-server
|
||||
networks:
|
||||
- snatchgame-network
|
||||
restart: unless-stopped
|
||||
healthcheck:
|
||||
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:3001/health"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 40s
|
||||
|
||||
networks:
|
||||
snatchgame-network:
|
||||
driver: bridge
|
||||
EOF
|
||||
|
||||
echo "🔄 Reiniciando servicios Docker con URLs actualizadas..."
|
||||
|
||||
# Parar servicios actuales
|
||||
docker compose -f docker-compose.ngrok.yml down 2>/dev/null || true
|
||||
|
||||
# Iniciar con nueva configuración
|
||||
docker compose -f /tmp/docker-compose-ngrok-updated.yml up -d
|
||||
|
||||
# Esperar a que estén listos
|
||||
echo "⏳ Esperando a que los servicios estén listos..."
|
||||
sleep 15
|
||||
|
||||
# Verificar que estén funcionando
|
||||
echo "🔍 Verificando servicios..."
|
||||
for port in 3010 3011 3067; do
|
||||
if curl -f http://localhost:$port/health &>/dev/null; then
|
||||
echo "✅ Puerto $port: OK"
|
||||
else
|
||||
echo "❌ Puerto $port: FALLO"
|
||||
fi
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo "🎉 Configuración actualizada!"
|
||||
echo "🌐 URLs públicas:"
|
||||
echo " 🎮 Cliente: $CLIENT_URL"
|
||||
echo " 📊 Admin: $ADMIN_URL"
|
||||
echo " 🎯 Server: $SERVER_URL"
|
||||
echo ""
|
||||
echo "🔍 Verificar configuración del cliente:"
|
||||
curl -s https://$(echo $CLIENT_URL | cut -d'/' -f3)/api/config
|
||||
|
||||
echo ""
|
||||
echo ""
|
||||
echo "✅ ¡Todo listo! Prueba abrir: $CLIENT_URL"
|
||||
Reference in New Issue
Block a user