mysurik.ru
N8N

Как я подружился с n8n и автоматизировал половину сервера

n8n автоматизация процессов

Как я дошёл до n8n

Всё началось с того, что я устал каждый день проверять почту и телеграм, не упал ли сервер. У меня крутится штук пять сервисов на домашнем сервере: тут и сайт, и базы, и тестовые среды. Если что-то отваливается — я узнаю об этом только когда захожу на сайт и вижу ошибку. А это может быть и через час, и через три.

Сначала я хотел написать простой bash-скрипт, который проверяет доступность портов и шлёт уведомления. Написал. Работало. Но как только я захотел добавить проверку свободного места на диске, потом температуру процессора, потом время ответа сайта — скрипт разросся до нечитаемых размеров. Я понял: нужна автоматизация, но не на коленке.

Знакомый посоветовал n8n. Я сначала отмахнулся — «очередной low-code конструктор». Но глянул: n8n — это опенсорсная платформа для автоматизации рабочих процессов. Тяжёлая артиллерия в мире «если это, то то». Бесплатно, self-hosted, с кучей интеграций из коробки.

Решил попробовать. И залип на неделю.

Где я его развернул

У меня на Proxmox крутится Ubuntu Server 24.04. Я поставил Docker, на него n8n в контейнере. Официальный образ — n8nio/n8n. Запустил одной командой:

docker run -d --name n8n -p 5678:5678 -v n8n_data:/home/node/.n8n n8nio/n8n

Всё. Через минуту n8n уже был доступен по адресу http://192.168.0.130:5678. Правда, я сразу повесил за nginx-прокси с HTTPS, потому что передавать API-ключи по открытому HTTP — идея так себе.

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

Мой первый workflow: мониторинг сервера

Я начал с простого: каждые 5 минут стучаться на localhost:80 и проверять, отвечает ли nginx. Если не отвечает — шлёт сообщение в Telegram.

Workflow выглядит так: Trigger (Schedule) → HTTP Request → IF (response code = 200?) → Telegram. Всё. Собрал за 10 минут, хотя никогда раньше не пользовался n8n.

Потом я добавил проверку свободного места на диске через SSH-команду. n8n умеет подключаться по SSH к удалённому серверу, выполнять команду и возвращать результат. Я прописал команду df -h / | tail -1, распарсил вывод, и если места осталось меньше 20% — летит уведомление.

Дальше — больше. Я добавил температуру процессора через sensors, нагрузку на RAM, количество ошибок в логах nginx за последний час. Теперь у меня в телеграм приходит ежедневный дайджест: «Сервер в порядке, CPU 12%, RAM 45%, диск 34%, всё ок». А если что-то не ок — сообщение приходит сразу.

Честно говоря, первый раз, когда я получил уведомление в 3 часа ночи, что nginx упал — я был скорее рад, чем расстроен. Система работает!

С чем я намудрил

Не всё было гладко. Вот мои грабли:

Таймзоны

n8n в Docker-контейнере живёт в UTC, а я в Москве. Когда я настроил ежедневный отчёт на 9 утра, он приходил в 6 утра. Пришлось добавить в docker-compose переменную TZ=Europe/Moscow. Мелочь, а полчаса гугления.

SSH Credentials

n8n хранит credentials в зашифрованном виде, но ключ шифрования нужно передавать через переменную окружения N8N_ENCRYPTION_KEY. Если не задать — при перезапуске контейнера все пароли сбросятся. Я не задал, и после обновления образа пришлось всё переподключать. Больше не повторю эту ошибку.

HTTP Requests к внутренним сервисам

Когда n8n стучится к сервису на локалхосте, он стучится к себе внутри контейнера. А мне нужно было достучаться до хостового nginx. Пришлось использовать IP Docker-хоста и убедиться, что порт не заблокирован фаерволом. Вместо localhost я написал host.docker.internal — не сработало на Linux. В итоге использовал IP хоста из сети Docker.

Что я автоматизировал ещё

Как только я распробовал n8n, остановиться было сложно. Теперь у меня крутится:

Резервное копирование БД. Каждую ночь n8n выполняет дамп MySQL через SSH, архивирует и отправляет на отдельный бекап-сервер. Раньше я делал это crontab-ом, но с n8n удобнее визуально видеть, что бекап прошёл успешно.

Публикация в соцсети. Я пишу статью в WordPress, ловлю webhook и автоматически пощу анонс в Telegram-канал. Без n8n я бы просто забывал это делать.

Мониторинг SSL-сертификатов. Раз в день проверяю, сколько дней осталось до истечения сертификата Let’s Encrypt. Если меньше 7 — шлю панику в Telegram. Однажды сертификат протух, и сайт лёг — больше такого не хочу.

Уборка логов. Раз в неделю чищу логи nginx и Docker старше 30 дней. Скрипт тривиальный, но в n8n он хотя бы виден и не теряется.

Что мне не нравится

n8n не без греха. Он жрёт память — контейнер с n8n на нагрузке ест около 300-400 MB RAM, хотя я дал ему 512. Для домашнего сервера терпимо, но если бы я крутил его на Raspberry Pi — пришлось бы экономить.

Ещё веб-интерфейс тормозит, если в workflow больше 20 узлов. Граф начинает подлагивать при перетаскивании. Для сложных сценариев это раздражает.

Но главное — документация. Она есть, но часто описывает идеальный сценарий, а на практике что-то идёт не так. Например, SSH Node: в доке написано «просто введи хост», а в реальности мне пришлось разбираться с ключами, known_hosts и правами на приватный ключ. Минут 40 потерял.

Итог

n8n — это штука, которую я советую попробовать всем, у кого есть домашний сервер и хотя бы пара рутинных задач. Он не заменяет bash-скрипты для всего, но для визуального контроля над автоматизацией — лучшее, что я пробовал.

Главное, что я вынес: начинайте с малого. Не пытайтесь построить идеальный workflow с первого раза. Сделайте один простой сценарий — пусть пингует сервер и шлёт уведомления. Когда увидите, что это реально работает, добавите остальное само собой.

Ваш комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *