Skip to content

n8n: автоматизация вокруг хаба ​

Для n8n есть узлы nkt — пакет n8n-nodes-nkt в каталоге integrations/n8n репозитория. Они ходят в API хаба по API-токену и принимают его исходящие вебхуки.

УзелЧто
nktхосты (список, обзор, проблемы, уязвимости, службы), действия со службами и контейнерами, конвейеры (выкладка, сухой прогон с выбором проверок, ожидание итога, история), задания хаба (состояние, журнал, ожидание), fail2ban (бан, разбан, список), оповещения, любой вызов API, открытый токену
nkt Triggerпринимает исходящие вебхуки хаба (оповещения, итоги выкладок) и проверяет подпись
nkt Alert Trigger (Polling)опрашивает хаб на новые оповещения — если n8n не принимает вебхуки снаружи

Установка ​

Из релиза — к каждому релизу nkt приложен архив n8n-nodes-nkt-<версия>.tgz (сумма — в SHA256SUMS). Распакуйте его в каталог своих узлов n8n и перезапустите n8n:

sh
V=1.11.79
curl -fLO https://github.com/piqab/nkt/releases/download/v$V/n8n-nodes-nkt-$V.tgz
mkdir -p ~/.n8n/custom/n8n-nodes-nkt
tar xzf n8n-nodes-nkt-$V.tgz -C ~/.n8n/custom/n8n-nodes-nkt --strip-components=1

Из репозитория (нужен Node.js 18+):

sh
cd integrations/n8n
npm ci --ignore-scripts && npm run build
npm test        # подписи сверяются с теми же эталонами, что и в тестах хаба
mkdir -p ~/.n8n/custom/n8n-nodes-nkt
cp -r package.json dist ~/.n8n/custom/n8n-nodes-nkt/

Версия узла — версия хаба; узел подходит к хабу той же или более новой версии. В npm пакет не публикуется: «Community Nodes» в настройках n8n его не найдут — только так.

n8n в Docker — тот же каталог томом, затем перезапуск n8n:

yaml
services:
  n8n:
    volumes:
      - ./n8n-nodes-nkt:/home/node/.n8n/custom/n8n-nodes-nkt:ro

Узлы появятся в поиске n8n как «nkt», «nkt Trigger» и «nkt Alert Trigger».

Учётные данные ​

nkt Hub API:

  • Hub URL — адрес хаба без /api (или edge с ролью API: https://api.example.com);
  • Token — строка nkt_<ключ>_<секрет>, которую хаб показал при создании токена («О системе» → «API-токены»);
  • Authentication — Signed Requests (по умолчанию: подпись HMAC, секрет по сети не идёт, единственный способ через nkt-edge) или Bearer;
  • «Test» в окне учётных данных вызывает /api/auth/me и показывает имя и роль токена.

Права — у токена: роль «чтение» читает, «администратор» ещё и действует; пределы по хостам и группам сужают и списки, и действия.

Узел nkt ​

  • Pipeline → Deploy / Dry Run — запускает задание хаба и, с «Wait for Result», ждёт его и отдаёт succeeded, состояние задания и журнал (log — строки). У сухого прогона — Skip Checks: какие проверки пропустить.
  • Host — список хостов (по одному элементу на хост) и разделы хоста: overview, findings (по элементу на проблему), vulnerabilities, services. Машина хаба — номер -1.
  • Service / Container — start, stop, restart (у службы ещё reload).
  • Fail2ban → Ban / Unban — адреса на всех хостах с fail2ban или на выбранных; с ожиданием итога задания.
  • Job — задание хаба по номеру: состояние, журнал, ожидание.
  • Alert — оповещения новее номера (After ID).
  • API Call — любой путь /api/…, открытый токену, с телом JSON.

Триггеры ​

nkt Trigger (вебхук): добавьте узел, скопируйте его Production URL в хаб — «Оповещения» → «Настройка» → «Исходящие вебхуки» → «Новый адресат», а секрет, который покажет хаб, вставьте в поле Signing Secret узла. Запрос с неверной подписью или старше 10 минут получает 401 и процесс не запускает. Events — какие события запускают процесс (у адресата на хабе — свой выбор). Элемент — тело события: kind, text, host или pipeline, job_id, error и номер доставки delivery.

nkt Alert Trigger (Polling) — когда n8n не принимает запросы снаружи: опрашивает GET /api/hub/events?after=N с интервалом n8n. Первый запуск запоминает последнее оповещение и ничего не выдаёт; дальше — только новые, старые первыми.

Примеры ​

В integrations/n8n/examples — процессы для импорта в n8n («Import from File»):

ФайлЧто делает
alerts-to-telegram.jsonнедоступность, проблемы, упавшие задания и выкладки — в Telegram
nightly-dry-run.jsonкаждую ночь сухой прогон конвейера; не прошёл — журнал в Telegram
ban-from-blocklist.jsonкаждый час — бан адресов из внешнего списка на всех хостах

В примерах замените номер конвейера, секрет адресата и chat id и выберите учётные данные nkt и Telegram.

Хаб за NAT ​

  • n8n в той же сети — Hub URL — адрес хаба; вебхуки хаб шлёт n8n напрямую.
  • n8n в облаке — вызовы API через nkt-edge с ролью API (Hub URL — имя edge, у токена — галочка «через nkt-edge», только Signed Requests). Исходящие вебхуки хаб шлёт в облако сам — вход в хаб для них не нужен.

Если не работает ​

ОтветПричина
401 «Неверный API-токен или подпись»токен отозван или заменён («Новый секрет»), или в поле Token не вся строка
401 «Подпись запроса устарела»часы n8n и хаба расходятся больше чем на 5 минут
403 «API-токену недоступен вызов»вызов закрыт токену или нужна роль «администратор»
403 «Хост вне пределов API-токена»хост не в хостах или группах токена
403 «не разрешён доступ через nkt-edge»у токена нет галочки «через nkt-edge»
401 в журнале доставки адресата на хабесекрет в узле nkt Trigger не тот (после «Новый секрет» — вставить заново)

Пример целиком ​

Как n8n складывается с ботом, edge и CI в одну схему — пример: автоматизация вокруг хаба.