Skip to content
Эта страница создана и переведена с помощью ИИ. Если вы заметили неточности, помогите нам улучшить её. Редактировать на GitHub

Интеграция с ngrok

ngrok -- популярный сервис туннелирования, создающий защищённый входящий доступ к вашему локальному экземпляру PRX. Это самый быстрый способ начать работу с вебхуками и внешними интеграциями -- одна команда даёт публичный HTTPS URL, указывающий на вашего локального агента.

Обзор

ngrok лучше всего подходит для:

  • Разработки и тестирования -- получите публичный URL за секунды без настройки аккаунта
  • Прототипирования вебхуков -- быстрое тестирование интеграций Telegram, Discord, GitHub или Slack
  • Демонстраций и презентаций -- поделитесь временным публичным URL для показа вашего агента
  • Сред, где Cloudflare или Tailscale недоступны

Для продакшн-развёртываний рассмотрите Cloudflare Tunnel или Tailscale Funnel, которые предлагают лучшую надёжность, собственные домены и средства контроля доступа с нулевым доверием.

Предварительные требования

  1. CLI ngrok, установленный на машине с PRX
  2. Аккаунт ngrok с токеном авторизации (достаточно бесплатного плана)

Установка 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>

Получите токен авторизации в панели управления ngrok.

Конфигурация

Базовая настройка

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"

Собственный домен (платные планы)

Платные планы ngrok поддерживают постоянные собственные домены:

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"

Зарезервированный домен

Для стабильных URL на бесплатном плане ngrok предлагает зарезервированные домены:

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

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

Справочник конфигурации

ПараметрТипПо умолчаниюОписание
authtokenstring--Токен аутентификации ngrok
regionstring"us"Регион туннеля: "us", "eu", "ap", "au", "sa", "jp", "in"
domainstring--Собственный домен или зарезервированный домен (платная функция)
subdomainstring--Фиксированный поддомен на ngrok-free.app
ngrok_pathstring"ngrok"Путь к бинарнику ngrok
inspectbooleantrueВключить панель инспекции ngrok (localhost:4040)
log_levelstring"info"Уровень журнала ngrok: "debug", "info", "warn", "error"
metadatastring--Произвольная строка метаданных, прикрепляемая к сессии туннеля
basic_authstring--HTTP Basic Auth в формате user:password
ip_restrictionslist[]Список разрешённых CIDR-диапазонов (напр., ["203.0.113.0/24"])
circuit_breakerfloat--Порог частоты ошибок (0.0-1.0) для срабатывания автоматического выключателя
compressionbooleanfalseВключить сжатие ответов

Как PRX управляет ngrok

При запуске туннеля PRX запускает ngrok как дочерний процесс:

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

Затем PRX запрашивает локальный API ngrok (http://127.0.0.1:4040/api/tunnels) для получения назначенного публичного URL. Этот URL сохраняется и используется для регистрации вебхуков и конфигурации каналов.

Извлечение URL

ngrok предоставляет локальный API на порту 4040. PRX опрашивает этот эндпоинт с таймаутом:

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

Ответ содержит публичный URL:

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

Если API недоступен в пределах startup_timeout_secs, PRX переключается на парсинг stdout для получения URL.

Ограничения бесплатного плана

Бесплатный план ngrok имеет ряд ограничений, которые следует учитывать:

ОграничениеБесплатный планВлияние на PRX
Параллельные туннели1Только один экземпляр PRX на аккаунт ngrok
Соединений в минуту40Может ограничивать высоконагруженные вебхуки
Собственные доменыНедоступныURL меняется при каждом перезапуске
Ограничения по IPНедоступныНевозможно ограничить исходные IP
Пропускная способностьОграниченаПередача больших файлов может замедляться
Промежуточная страницаПоказывается при первом посещенииМожет мешать некоторым провайдерам вебхуков

Промежуточная страница (предупреждение ngrok в браузере) не влияет на API/вебхук-трафик -- она появляется только для запросов из браузера. Однако некоторые провайдеры вебхуков могут отклонять ответы, включающие её. Используйте платный план или другой бэкенд для продакшна.

Панель инспекции ngrok

При inspect = true (по умолчанию) ngrok запускает локальную веб-панель по адресу http://localhost:4040. Эта панель предоставляет:

  • Инспектор запросов -- просмотр всех входящих запросов с заголовками, телом и ответом
  • Воспроизведение -- повторная отправка любого запроса для отладки
  • Статус туннеля -- состояние соединения, регион и публичный URL

Это незаменимо для отладки интеграций вебхуков при разработке.

Замечания по безопасности

  • Защита токена авторизации -- токен авторизации ngrok предоставляет доступ к созданию туннелей в вашем аккаунте. Храните его в менеджере секретов PRX или передавайте через переменную окружения NGROK_AUTHTOKEN.
  • URL бесплатного плана публичны -- любой, у кого есть URL, может связаться с вашим агентом. Используйте basic_auth или ip_restrictions (платно) для ограничения доступа.
  • Ротация URL -- URL бесплатного плана меняются при перезапуске. Если провайдеры вебхуков кэшируют старый URL, доставка событий прекратится. Используйте зарезервированные домены или другой бэкенд для стабильных URL.
  • Терминация TLS -- ngrok терминирует TLS на своём граничном узле. Трафик между ngrok и вашим локальным PRX проходит через инфраструктуру ngrok.
  • Инспекция данных -- панель инспекции ngrok показывает тела запросов/ответов. Отключите её в продакшне с помощью inspect = false, если передаются конфиденциальные данные.

Паттерн интеграции вебхуков

Типичный паттерн для разработки: запустить PRX с ngrok, зарегистрировать URL вебхука и тестировать:

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

Сравнение с другими бэкендами

ФункцияngrokCloudflare TunnelTailscale Funnel
Время настройкиСекундыМинутыМинуты
Собственный доменПлатноБесплатно (с зоной)Только MagicDNS
Zero-trustНетДа (Access)Да (ACL)
Бесплатный планДа (ограниченно)ДаДа (личный)
Панель инспекцииДаНетНет
Готовность к продакшнуПлатные планыДаДа

Устранение неполадок

СимптомПричинаРешение
"authentication failed"Неверный или отсутствующий токен авторизацииВыполните ngrok config add-authtoken <token>
URL не обнаруженAPI ngrok не отвечает на :4040Проверьте, что порт 4040 не занят другим процессом
"tunnel session limit"Бесплатный план допускает 1 туннельОстановите другие сессии ngrok или обновите план
Вебхуки возвращают 502Шлюз PRX не прослушиваетУбедитесь, что local_addr совпадает с адресом вашего шлюза
Показывается промежуточная страницаПредупреждение браузера бесплатного планаИспользуйте --domain или обновите до платного плана
Случайные отключенияОграничения соединений бесплатного планаОбновите план или переключитесь на Cloudflare/Tailscale

Связанные страницы

Released under the Apache-2.0 License.