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