TunnelHunt

n8n локально: вебхуки и Telegram Trigger через HTTPS-туннель

6 мин чтения

Настраиваем публичный URL для n8n на localhost: Docker Compose, N8N_WEBHOOK_URL, тестовый и рабочий webhook, Telegram Trigger и диагностика ошибок.

n8n локально: вебхуки и Telegram Trigger через HTTPS-туннель

n8n может работать на http://localhost:5678, но внешний сервис не сможет вызвать этот адрес на вашем компьютере. Для входящих событий нужен публичный URL. В этом руководстве n8n остаётся локальным, а TunnelHunt передаёт к нему запросы через HTTPS-туннель.

Разберём сначала обычный Webhook node, затем Telegram Trigger. Так проще отделить проблему туннеля от настройки конкретной интеграции.

Что понадобится

Если n8n ещё не установлен, начните с установки через Docker Compose: там разобраны постоянный том, проверка сохранения workflows, резервная копия и восстановление.

Нужны Docker с Compose, SSH-клиент с ключом и отдельное тестовое окружение n8n. Если у вас уже есть работающий n8n, сохраните его конфигурацию и данные: добавлять URL следует в существующий сервис, а не заменять весь Compose-файл примером ниже.

Чтобы использовать Free, добавьте публичный SSH-ключ в кабинет. Сессия без регистрации ограничена 15 минутами, Free — 4 часами. Для первой проверки платный тариф не требуется.

Инструкция использует N8N_WEBHOOK_URL для n8n 2.35.0 и новее. В более ранних версиях используется WEBHOOK_URL; начиная с 2.35.0 старое имя остаётся устаревшим алиасом. Это изменение описано в официальном справочнике переменных n8n.

1. Запустите n8n на localhost

Для нового тестового окружения создайте compose.yaml:

services:
  n8n:
    image: docker.n8n.io/n8nio/n8n:2.35.0
    ports:
      - "127.0.0.1:5678:5678"
    environment:
      GENERIC_TIMEZONE: Europe/Moscow
      TZ: Europe/Moscow
    volumes:
      - n8n_data:/home/node/.n8n

volumes:
  n8n_data:

Версия зафиксирована, чтобы пример не менялся при каждом скачивании образа. Для своего окружения выбирайте поддерживаемую версию и проверяйте изменения перед обновлением. Полный набор вариантов развёртывания есть в репозитории документации n8n.

docker compose up -d
docker compose logs --tail=50 n8n
curl -i http://127.0.0.1:5678/healthz

Дождитесь успешного запуска. Откройте http://localhost:5678 и завершите создание учётной записи владельца до открытия туннеля. Этот пример публикует весь HTTP-сервис n8n, включая страницу входа в редактор. Используйте тестовые credentials и защищённую учётную запись.

2. Получите HTTPS-адрес

Запустите SSH на той же машине, где опубликован Docker-порт:

ssh -p 2222 -o ExitOnForwardFailure=yes -R 80:127.0.0.1:5678 tunnelhunt.ru

Скопируйте выданный HTTPS-адрес. Оставьте SSH работающим. Если туннель не запускается, пройдите проверку публичного доступа к localhost.

3. Сообщите n8n внешний адрес

Добавьте в environment существующего сервиса две строки, заменив домен:

      N8N_WEBHOOK_URL: https://YOUR-SUBDOMAIN.tunnelhunt.ru/
      N8N_PROXY_HOPS: "1"

Затем пересоздайте контейнер с новой конфигурацией:

docker compose up -d n8n

Обычного docker compose restart недостаточно для применения изменённых переменных. Не удаляйте том n8n_data: в нём находятся данные окружения.

N8N_WEBHOOK_URL задаёт публичную основу URL. Локальный порт остаётся 5678; не меняйте его на 443 только потому, что внешний адрес использует HTTPS. N8N_PROXY_HOPS относится к доверию прокси-заголовкам. Для своей цепочки прокси проверьте настройку по инструкции n8n; не используйте её как гарантию подлинности IP отправителя.

4. Проверьте обычный Webhook node

Создайте новый workflow с узлом Webhook. Выберите метод POST, путь tunnelhunt-test и немедленный ответ. Для короткой проверки отправьте только искусственные данные; до подключения реальной системы настройте доступную в узле аутентификацию или проверку подписи отправителя.

Скопируйте Test URL из интерфейса. Он должен начинаться с вашего публичного HTTPS-домена, а не с localhost. Нажмите Listen for test event, затем отправьте запрос:

curl -i https://YOUR-SUBDOMAIN.tunnelhunt.ru/webhook-test/tunnelhunt-test \
  -H 'Content-Type: application/json' \
  --data '{"source":"tunnelhunt","message":"hello"}'

При неизменённых стандартных путях n8n данные появятся в выполнении узла, а HTTP-запрос получит успешный ответ. Если вы меняли пути endpoint, используйте URL, скопированный из интерфейса, целиком.

Проверьте не только HTTP-статус, но и входные данные узла: в body должны быть source: tunnelhunt и message: hello. Один ответ /healthz подтверждает доступ к сервису, но не выполнение workflow.

5. Перейдите от Test URL к Production URL

Тестовый адрес работает в режиме ожидания тестового события. Для постоянного приёма событий опубликуйте workflow — в старых версиях интерфейса это активация — и используйте Production URL.

У стандартной конфигурации путь изменится с /webhook-test/tunnelhunt-test на /webhook/tunnelhunt-test. Рабочие выполнения смотрите в Executions, даже если данные не появляются прямо на открытой схеме.

Различия режимов и варианты аутентификации описаны в документации Webhook node.

6. Подключите Telegram Trigger

Когда обычный webhook работает, создайте отдельного тестового бота через BotFather и добавьте его токен в Telegram credentials n8n. Добавьте Telegram Trigger, выберите событие сообщения и запустите тестовое ожидание. Отправьте боту сообщение из Telegram.

Webhook регистрирует сам n8n. Не вызывайте для этого же бота setWebhook вручную: вы можете заменить адрес, который установил Trigger. У одного бота только один текущий webhook; отдельные боты для разработки и рабочего окружения исключают конфликт регистрации.

Ошибка An HTTPS URL must be provided for webhook обычно означает, что n8n передал Telegram неподходящий URL. Проверьте переменную окружения, пересоздание контейнера и адрес, отображаемый узлом. Для самостоятельного обработчика без n8n есть инструкция по Telegram Bot API.

Как сохранить URL n8n после переподключения

Если меняется случайный домен, нужно обновить N8N_WEBHOOK_URL, пересоздать контейнер и заново включить приём событий. Для повторяющихся тестов Pro за 199 ₽/месяц даёт резервирование поддомена, 50 ГБ трафика в месяц и до 5 активных туннелей.

  1. Сначала получите тестовое событие на Free по инструкции выше.
  2. После активации Pro в кабинете откройте «Туннели», зарезервируйте свободный поддомен и привяжите SSH-ключ.
  3. Переподключите SSH с этим ключом и проверьте выданный адрес. Укажите его в N8N_WEBHOOK_URL, сохранив завершающий /.
  4. Пересоздайте контейнер и повторите тест Webhook node, затем Telegram Trigger.

Постоянное имя избавляет от изменения URL у отправителя. Оно не запускает n8n и не восстанавливает оборванный SSH. Восстановление соединения и доступность компьютера проверяются отдельно.

Что проверить, если события не приходят

Если «локальный n8n не работает с Telegram», разделите проверку на три шага. Сначала получите /healthz локально и через публичный адрес. Затем отправьте искусственное событие в обычный Webhook node. Только после этого проверяйте Telegram Trigger: так ошибка регистрации бота не смешивается с недоступностью контейнера.

Убедитесь, что контейнер получил нужные переменные. Следующая команда выводит только настройки URL и прокси, без credentials:

docker compose exec n8n sh -c 'printf "N8N_WEBHOOK_URL=%s\nWEBHOOK_URL=%s\nN8N_PROXY_HOPS=%s\n" "$N8N_WEBHOOK_URL" "$WEBHOOK_URL" "$N8N_PROXY_HOPS"'

Для используемой здесь версии задавайте N8N_WEBHOOK_URL; n8n_webhook_tunnel_url не является заменой этой переменной. Если в выводе старый домен, примените docker compose up -d n8n из каталога своего Compose-проекта и заново скопируйте URL из узла. Не публикуйте полный docker inspect или весь env-файл: там могут быть секреты.

Собственный WEBHOOK_SECRET из примера самостоятельного Telegram-бота не нужно вставлять в поле bot token у n8n. Credentials содержат bot token из BotFather, а регистрацию webhook выполняет Trigger. Если один бот используется и в n8n, и в другом приложении, последнее setWebhook заменяет адрес. Для test и production используйте отдельных тестовых ботов или переключайте окружения осознанно. Диагностика Telegram Trigger.

Симптом Следующий шаг
/healthz локально не отвечает Проверьте состояние контейнера и журнал запуска
Локально работает, снаружи 502 Проверьте SSH-процесс и порт 5678 на его машине
В узле отображается localhost Проверьте имя переменной для своей версии и пересоздайте контейнер
Ошибка, связанная с X-Forwarded-For или trust proxy Проверьте N8N_PROXY_HOPS для фактической цепочки прокси; эта настройка не исправляет URL webhook
Тестовый URL возвращает 404 Включите ожидание события и скопируйте URL ещё раз
Production URL возвращает 404 Опубликуйте workflow, проверьте метод и путь
Telegram перестал отвечать после другого теста Другой workflow мог заменить webhook этого бота
После переподключения пропали события Случайный домен изменился; обновите URL или используйте резервируемый субдомен

Для длительных тестов понадобится восстановление SSH через autossh. Пока компьютер спит или выключен, n8n на нём не принимает события. Для круглосуточных автоматизаций нужен постоянно работающий хост.

Получите событие в локальном n8n

Проверьте Webhook node на бесплатном туннеле. Для повторяющихся запусков n8n и Telegram Trigger закрепите адрес на Pro и сохраните его в N8N_WEBHOOK_URL.

Первый запуск: добавьте публичный SSH-ключ, запустите локальное приложение и команду SSH из статьи, затем откройте выданный HTTPS-адрес. Если ответа нет, пройдите проверку localhost и туннеля.

Free: 1 ГБ трафика в месяц, 1 туннель, сессия до 4 часов. Pro: 199 ₽/месяц, 50 ГБ, до 5 туннелей и резервирование поддомена. Компьютер, приложение и SSH-соединение должны работать; постоянный адрес сохраняет имя, а не доступность выключенного сервера.

Готовы запустить свой первый туннель?

Начните использовать TunnelHunt бесплатно уже сегодня и откройте доступ к локальному серверу всего одной командой.

Зарегистрироваться бесплатно →

По теме

Контейнер n8n и отдельное хранилище данных

Установка n8n локально через Docker Compose: запуск и данные

12 сентября 2026 г.

Запускаем n8n на компьютере через Docker Compose: постоянный том, резервная копия и восстановление, обновление контейнера и HTTPS для вебхуков.

Читать далее →
Как создать и отладить Telegram-бота локально с помощью TunnelHunt

Telegram-бот локально: webhook, secret_token и отладка на localhost

5 июня 2025 г.

Запустите Telegram-бота на localhost: выберите polling или webhook, настройте HTTPS и secret_token, проверьте getWebhookInfo и исправьте ошибки доставки.

Читать далее →
Как повторить вебхук: отладка HTTP-запросов через Replay

Как повторить вебхук: отладка HTTP-запросов через Replay

20 июня 2026 г.

Получите тестовый вебхук, найдите ошибку и повторите запрос после исправления. Рабочий пример на Python, диагностика подписей и ограничения Replay.

Читать далее →
Как открыть localhost в интернете: публичный HTTPS через SSH

Как запустить localhost и открыть сайт в интернете через SSH

11 сентября 2026 г.

Запуск сайта на localhost:3000, проверка в браузере и с телефона, публичный HTTPS через SSH. Пример на Python, настройка Docker и Vite, диагностика ошибок.

Читать далее →