190 lines
5.8 KiB
Bash
Executable File
190 lines
5.8 KiB
Bash
Executable File
#!/bin/bash
|
|
# Script para configurar dominio automáticamente para LiveKit
|
|
|
|
set -e
|
|
|
|
# Colores
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m'
|
|
|
|
echo -e "${BLUE}🌐 Configurador de Dominio para LiveKit${NC}"
|
|
echo ""
|
|
|
|
# Detectar IP pública
|
|
echo "🔍 Detectando IP pública..."
|
|
PUBLIC_IP=$(curl -s https://checkip.amazonaws.com || curl -s https://ipinfo.io/ip || echo "No detectada")
|
|
LOCAL_IP=$(hostname -I | awk '{print $1}')
|
|
|
|
echo -e "${BLUE}📊 Información de red:${NC}"
|
|
echo " IP Local: $LOCAL_IP"
|
|
echo " IP Pública: $PUBLIC_IP"
|
|
echo ""
|
|
|
|
# Opciones de dominio
|
|
echo "¿Qué tipo de dominio quieres configurar?"
|
|
echo "1) DuckDNS (gratuito, IP dinámica)"
|
|
echo "2) Dominio propio + Let's Encrypt"
|
|
echo "3) Solo IP pública (sin dominio)"
|
|
echo ""
|
|
read -p "Selecciona opción (1-3): " DOMAIN_OPTION
|
|
|
|
case $DOMAIN_OPTION in
|
|
1)
|
|
echo -e "${GREEN}🦆 Configurando DuckDNS${NC}"
|
|
read -p "Subdominio DuckDNS (sin .duckdns.org): " DUCKDNS_SUBDOMAIN
|
|
read -p "Token DuckDNS: " DUCKDNS_TOKEN
|
|
|
|
DOMAIN="$DUCKDNS_SUBDOMAIN.duckdns.org"
|
|
|
|
# Crear script de actualización
|
|
cat > update-duckdns.sh << EOF
|
|
#!/bin/bash
|
|
CURRENT_IP=\$(curl -s https://checkip.amazonaws.com)
|
|
RESPONSE=\$(curl -s "https://www.duckdns.org/update?domains=$DUCKDNS_SUBDOMAIN&token=$DUCKDNS_TOKEN&ip=\$CURRENT_IP")
|
|
if [ "\$RESPONSE" = "OK" ]; then
|
|
echo "\$(date): DuckDNS actualizado - $DOMAIN → \$CURRENT_IP"
|
|
else
|
|
echo "\$(date): ERROR: \$RESPONSE"
|
|
fi
|
|
EOF
|
|
chmod +x update-duckdns.sh
|
|
|
|
# Actualizar inmediatamente
|
|
./update-duckdns.sh
|
|
|
|
# Configurar cron
|
|
(crontab -l 2>/dev/null; echo "*/5 * * * * $(pwd)/update-duckdns.sh >> $(pwd)/duckdns.log 2>&1") | crontab -
|
|
|
|
echo -e "${GREEN}✅ DuckDNS configurado: $DOMAIN${NC}"
|
|
LIVEKIT_URL="ws://$DOMAIN:7880"
|
|
;;
|
|
|
|
2)
|
|
echo -e "${GREEN}🏠 Configurando dominio propio${NC}"
|
|
read -p "Dominio completo (ej: livekit.midominio.com): " CUSTOM_DOMAIN
|
|
|
|
DOMAIN="$CUSTOM_DOMAIN"
|
|
|
|
echo -e "${YELLOW}📋 Pasos manuales necesarios:${NC}"
|
|
echo "1. Configurar DNS A record:"
|
|
echo " $DOMAIN → $PUBLIC_IP"
|
|
echo ""
|
|
echo "2. Port forwarding en router:"
|
|
echo " TCP 80,443,7880 → $LOCAL_IP"
|
|
echo " UDP 50000-50100 → $LOCAL_IP"
|
|
echo ""
|
|
|
|
read -p "¿Continuar con configuración SSL automática? (y/N): " SSL_SETUP
|
|
|
|
if [[ $SSL_SETUP =~ ^[Yy]$ ]]; then
|
|
echo -e "${YELLOW}🔧 Configurando Nginx + SSL...${NC}"
|
|
|
|
# Instalar dependencias
|
|
sudo apt update
|
|
sudo apt install -y nginx certbot python3-certbot-nginx
|
|
|
|
# Configurar Nginx básico
|
|
sudo tee /etc/nginx/sites-available/livekit << EOF
|
|
server {
|
|
listen 80;
|
|
server_name $DOMAIN;
|
|
|
|
location /.well-known/acme-challenge/ {
|
|
root /var/www/html;
|
|
}
|
|
|
|
location / {
|
|
return 301 https://\$server_name\$request_uri;
|
|
}
|
|
}
|
|
EOF
|
|
|
|
sudo ln -sf /etc/nginx/sites-available/livekit /etc/nginx/sites-enabled/
|
|
sudo nginx -t && sudo systemctl restart nginx
|
|
|
|
# Generar certificado
|
|
sudo certbot --nginx -d $DOMAIN --non-interactive --agree-tos --email admin@$DOMAIN
|
|
|
|
echo -e "${GREEN}✅ SSL configurado para $DOMAIN${NC}"
|
|
fi
|
|
|
|
LIVEKIT_URL="wss://$DOMAIN"
|
|
;;
|
|
|
|
3)
|
|
echo -e "${YELLOW}📡 Usando IP pública directa${NC}"
|
|
DOMAIN="$PUBLIC_IP"
|
|
LIVEKIT_URL="ws://$PUBLIC_IP:7880"
|
|
;;
|
|
|
|
*)
|
|
echo -e "${RED}❌ Opción inválida${NC}"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
# Actualizar configuración LiveKit
|
|
echo -e "${YELLOW}🔧 Actualizando configuración LiveKit...${NC}"
|
|
|
|
# Actualizar livekit.yaml existente o crear nuevo
|
|
if [ -f "livekit-production.yaml" ]; then
|
|
sed -i "s/external_ip: .*/external_ip: \"$DOMAIN\"/" livekit-production.yaml
|
|
echo -e "${GREEN}✅ livekit-production.yaml actualizado${NC}"
|
|
elif [ -f "livekit.yaml" ]; then
|
|
sed -i "s/external_ip: .*/external_ip: \"$DOMAIN\"/" livekit.yaml
|
|
echo -e "${GREEN}✅ livekit.yaml actualizado${NC}"
|
|
else
|
|
echo -e "${YELLOW}⚠️ No se encontró archivo de configuración LiveKit${NC}"
|
|
fi
|
|
|
|
# Actualizar variables para OpenVidu Meet
|
|
cat > .env.livekit-domain << EOF
|
|
# Configuración de dominio para LiveKit
|
|
DOMAIN=$DOMAIN
|
|
LIVEKIT_URL=$LIVEKIT_URL
|
|
PUBLIC_IP=$PUBLIC_IP
|
|
LOCAL_IP=$LOCAL_IP
|
|
|
|
# Variables para EasyPanel/OpenVidu Meet:
|
|
LIVEKIT_URL=$LIVEKIT_URL
|
|
LIVEKIT_API_KEY=production-key
|
|
LIVEKIT_API_SECRET=tu-secret-de-32-caracteres
|
|
EOF
|
|
|
|
echo -e "${GREEN}"
|
|
echo "============================================="
|
|
echo "🎉 DOMINIO CONFIGURADO EXITOSAMENTE"
|
|
echo "============================================="
|
|
echo "🌐 Dominio: $DOMAIN"
|
|
echo "🔗 LiveKit URL: $LIVEKIT_URL"
|
|
echo "📍 IP Pública: $PUBLIC_IP"
|
|
echo "🏠 IP Local: $LOCAL_IP"
|
|
echo ""
|
|
echo "📋 CONFIGURACIÓN PARA OPENVIDU MEET:"
|
|
echo " LIVEKIT_URL=$LIVEKIT_URL"
|
|
echo ""
|
|
echo "🔧 PUERTOS NECESARIOS EN ROUTER:"
|
|
echo " TCP 7880 → $LOCAL_IP:7880"
|
|
echo " UDP 50000-50100 → $LOCAL_IP:50000-50100"
|
|
if [[ $DOMAIN_OPTION == 2 ]]; then
|
|
echo " TCP 80,443 → $LOCAL_IP:80,443"
|
|
fi
|
|
echo ""
|
|
echo "📁 Archivos generados:"
|
|
echo " - .env.livekit-domain (variables)"
|
|
if [[ $DOMAIN_OPTION == 1 ]]; then
|
|
echo " - update-duckdns.sh (actualización automática)"
|
|
fi
|
|
echo "============================================="
|
|
echo -e "${NC}"
|
|
|
|
# Test conectividad
|
|
echo -e "${BLUE}🔍 Probando conectividad...${NC}"
|
|
if timeout 5 bash -c "echo >/dev/tcp/$DOMAIN/7880" 2>/dev/null; then
|
|
echo -e "${GREEN}✅ Puerto 7880 accesible${NC}"
|
|
else
|
|
echo -e "${YELLOW}⚠️ Puerto 7880 no accesible (verificar port forwarding)${NC}"
|
|
fi |