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:
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+):
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:
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 в одну схему — пример: автоматизация вокруг хаба.