Как я подружился с 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 с первого раза. Сделайте один простой сценарий — пусть пингует сервер и шлёт уведомления. Когда увидите, что это реально работает, добавите остальное само собой.