Skip to content
Esta página fue generada y traducida con asistencia de IA. Si encuentra alguna imprecisión, no dude en ayudar a mejorarla. Editar en GitHub

Integracion ngrok

ngrok es un servicio de tuneles popular que crea ingreso seguro a tu instancia PRX local. Es la forma mas rapida de comenzar con webhooks e integraciones externas -- un solo comando te da una URL HTTPS publica apuntando a tu agente local.

Vision general

ngrok es mas adecuado para:

  • Desarrollo y pruebas -- obtener una URL publica en segundos sin configuracion de cuenta
  • Prototipado de webhooks -- probar rapidamente integraciones con Telegram, Discord, GitHub o Slack
  • Demos y presentaciones -- compartir una URL publica temporal para mostrar tu agente
  • Entornos donde Cloudflare o Tailscale no estan disponibles

Para despliegues en produccion, considera Cloudflare Tunnel o Tailscale Funnel que ofrecen mejor fiabilidad, dominios personalizados y controles de acceso zero-trust.

Prerequisitos

  1. CLI de ngrok instalado en la maquina que ejecuta PRX
  2. Una cuenta de ngrok con un token de autenticacion (el nivel gratuito es suficiente)

Instalar ngrok

bash
# Debian / Ubuntu (via snap)
sudo snap install ngrok

# macOS
brew install ngrok

# Binary download (all platforms)
# https://ngrok.com/download

# Authenticate (one-time setup)
ngrok config add-authtoken <YOUR_AUTH_TOKEN>

Obtener tu token de autenticacion desde el panel de ngrok.

Configuracion

Configuracion basica

toml
[tunnel]
backend = "ngrok"
local_addr = "127.0.0.1:8080"

[tunnel.ngrok]
# Auth token. Can also be set via NGROK_AUTHTOKEN environment variable.
# If omitted, ngrok uses the token from its local config file.
authtoken = ""

# Region for the tunnel endpoint.
# Options: "us", "eu", "ap", "au", "sa", "jp", "in"
region = "us"

Dominio personalizado (planes de pago)

Los planes de pago de ngrok soportan dominios personalizados persistentes:

toml
[tunnel]
backend = "ngrok"
local_addr = "127.0.0.1:8080"

[tunnel.ngrok]
authtoken = "${NGROK_AUTHTOKEN}"

# Custom domain (requires ngrok paid plan)
domain = "agent.example.com"

# Alternatively, use a static ngrok subdomain (free on some plans)
# subdomain = "my-prx-agent"

Dominio reservado

Para URLs estables en el nivel gratuito, ngrok ofrece dominios reservados:

toml
[tunnel.ngrok]
authtoken = "${NGROK_AUTHTOKEN}"

# Reserved domain assigned by ngrok (e.g., "example-agent.ngrok-free.app")
domain = "example-agent.ngrok-free.app"

Referencia de configuracion

ParametroTipoPor defectoDescripcion
authtokenstring--Token de autenticacion de ngrok
regionstring"us"Region del tunel: "us", "eu", "ap", "au", "sa", "jp", "in"
domainstring--Dominio personalizado o dominio reservado (funcion de pago)
subdomainstring--Subdominio fijo en ngrok-free.app
ngrok_pathstring"ngrok"Ruta al binario ngrok
inspectbooleantrueHabilitar el panel de inspeccion de ngrok (localhost:4040)
log_levelstring"info"Nivel de log de ngrok: "debug", "info", "warn", "error"
metadatastring--Cadena de metadatos arbitrarios adjunta a la sesion del tunel
basic_authstring--HTTP Basic Auth en formato user:password
ip_restrictionslist[]Lista de rangos CIDR permitidos (ej., ["203.0.113.0/24"])
circuit_breakerfloat--Umbral de tasa de error (0.0-1.0) para activar el circuit breaker
compressionbooleanfalseHabilitar compresion de respuestas

Como PRX gestiona ngrok

Cuando el tunel inicia, PRX genera ngrok como un proceso hijo:

bash
ngrok http 127.0.0.1:8080 \
  --authtoken=<token> \
  --region=us \
  --log=stdout \
  --log-format=json

PRX luego consulta la API local de ngrok (http://127.0.0.1:4040/api/tunnels) para obtener la URL publica asignada. Esta URL se almacena y se usa para el registro de webhooks y la configuracion de canales.

Extraccion de URL

ngrok expone una API local en el puerto 4040. PRX consulta este endpoint con un timeout:

GET http://localhost:4040/api/tunnels

La respuesta contiene la URL publica:

json
{
  "tunnels": [
    {
      "public_url": "https://abc123.ngrok-free.app",
      "config": {
        "addr": "http://localhost:8080"
      }
    }
  ]
}

Si la API no esta disponible dentro de startup_timeout_secs, PRX recurre a parsear stdout para la URL.

Limitaciones del nivel gratuito

El nivel gratuito de ngrok tiene varias limitaciones a tener en cuenta:

LimitacionNivel gratuitoImpacto en PRX
Tuneles concurrentes1Solo una instancia PRX por cuenta ngrok
Conexiones por minuto40Puede limitar webhooks de alto trafico
Dominios personalizadosNo disponibleLa URL cambia en cada reinicio
Restricciones de IPNo disponibleNo se pueden restringir IPs de origen
Ancho de bandaLimitadoLas transferencias de archivos grandes pueden ser limitadas
Pagina intersticialMostrada en primera visitaPuede interferir con algunos proveedores de webhooks

La pagina intersticial (la pagina de advertencia del navegador de ngrok) no afecta el trafico de API/webhooks -- solo aparece para solicitudes iniciadas por el navegador. Sin embargo, algunos proveedores de webhooks pueden rechazar respuestas que la incluyan. Usa un plan de pago o un backend diferente para produccion.

Panel de inspeccion de ngrok

Cuando inspect = true (el valor por defecto), ngrok ejecuta un panel web local en http://localhost:4040. Este panel proporciona:

  • Inspector de solicitudes -- ver todas las solicitudes entrantes con headers, cuerpo y respuesta
  • Replay -- reproducir cualquier solicitud para depuracion
  • Estado del tunel -- salud de la conexion, region y URL publica

Esto es invaluable para depurar integraciones de webhooks durante el desarrollo.

Consideraciones de seguridad

  • Proteccion del token de autenticacion -- el token de autenticacion de ngrok otorga acceso de creacion de tuneles a tu cuenta. Almacenalo en el gestor de secretos de PRX o pasalo via la variable de entorno NGROK_AUTHTOKEN.
  • Las URLs del nivel gratuito son publicas -- cualquier persona con la URL puede alcanzar tu agente. Usa basic_auth o ip_restrictions (pago) para restringir el acceso.
  • Rotacion de URL -- las URLs del nivel gratuito cambian al reiniciar. Si los proveedores de webhooks cachean la URL anterior, fallaran al entregar eventos. Usa dominios reservados o un backend diferente para URLs estables.
  • Terminacion TLS -- ngrok termina TLS en su borde. El trafico entre ngrok y tu PRX local viaja a traves de la infraestructura de ngrok.
  • Inspeccion de datos -- el panel de inspeccion de ngrok muestra cuerpos de solicitudes/respuestas. Deshabilitalo en produccion con inspect = false si se transmiten datos sensibles.

Patron de integracion de webhooks

Un patron comun para desarrollo: iniciar PRX con ngrok, registrar la URL del webhook y probar:

bash
# 1. Start PRX (tunnel starts automatically)
prx start

# 2. PRX logs the public URL
# [INFO] Tunnel started: https://abc123.ngrok-free.app

# 3. Register the webhook URL with your service
# Telegram: https://abc123.ngrok-free.app/webhook/telegram
# GitHub:   https://abc123.ngrok-free.app/webhook/github

# 4. Inspect requests at http://localhost:4040

Comparacion con otros backends

CaracteristicangrokCloudflare TunnelTailscale Funnel
Tiempo de configuracionSegundosMinutosMinutos
Dominio personalizadoPagoGratis (con zona)Solo MagicDNS
Zero-trustNoSi (Access)Si (ACLs)
Nivel gratuitoSi (limitado)SiSi (personal)
Panel de inspeccionSiNoNo
Listo para produccionPlanes de pagoSiSi

Solucion de problemas

SintomaCausaResolucion
"authentication failed"Token de autenticacion invalido o faltanteEjecutar ngrok config add-authtoken <token>
URL no detectadaLa API de ngrok no responde en :4040Verificar que el puerto 4040 no este en uso por otro proceso
"tunnel session limit"El nivel gratuito permite 1 tunelDetener otras sesiones ngrok o actualizar
Webhooks retornan 502El gateway PRX no esta escuchandoVerificar que local_addr coincida con tu gateway
Pagina intersticial mostradaAdvertencia del navegador del nivel gratuitoUsar --domain o actualizar a plan de pago
Desconexiones aleatoriasLimites de conexion del nivel gratuitoActualizar o cambiar a Cloudflare/Tailscale

Paginas relacionadas

Released under the Apache-2.0 License.