- n8n — self-hosted альтернатива Zapier/Make: визуальный редактор workflow, 400+ нод, AI-агенты, бесплатно
- Установка за минуту: docker run -p 5678:5678 docker.n8n.io/n8nio/n8n → открываешь localhost:5678
- Данные между нодами передаются как JSON, обращаешься через {{$json[«field»]}}
- AI-агент = LLM + Tools: агент сам выбирает какой инструмент вызвать под задачу
- Все API-ключи — в переменные окружения, не в workflow. Всегда.
Зачем n8n и почему это работает
Есть три способа автоматизировать рутину. Написать скрипт на Python — три дня кода, два дня отладки OAuth, через месяц API поменялся и скрипт сломался. Пойти в Zapier — полчаса настройки, потом получаешь счёт на $500/месяц и объясняешь руководству что такое «подписка за автоматизацию». Делать руками — 5 минут на заявку, умножаешь на 100 заявок, получаешь рабочий день потраченный на копипасту.
n8n — четвёртый вариант. Полчаса настройки один раз, потом работает само, бесплатно, данные только у тебя.
| Параметр | Python скрипт | Zapier | n8n self-hosted |
|---|---|---|---|
| Стоимость | $0 | от $19.99/мес, 50k задач — $599 | $0 навсегда |
| Время запуска | 3-7 дней | 30 минут | 30 минут |
| Поддержка | Ты сам | Они сами | Ты + комьюнити |
| Свой код | Полностью | Ограниченно | JavaScript в ноде |
| Ваши данные | У тебя | На серверах Zapier | Только у тебя |
| AI-агенты | Пишешь сам | Базово | Нативная поддержка |
| GDPR/compliance | Полный контроль | Проблемно | Полный контроль |
n8n проигрывает по одному пункту: нужен свой сервер. VPS за $5-10 в месяц решает вопрос полностью.
Архитектура: как n8n устроен
Workflow — это цепочка нод. Trigger запускает процесс. Action делает что-то с данными или вызывает внешний API. Logic управляет потоком: ветвит, циклит, объединяет. Данные между нодами — JSON.
Системные требования
| Компонент | Минимум | Рекомендуется | Примечание |
|---|---|---|---|
| CPU | 1 vCPU | 2+ vCPU | При параллельных workflow нужно больше |
| RAM | 512 MB | 2 GB | PostgreSQL + n8n + Nginx суммарно ~600 MB |
| Диск | 5 GB | 20 GB | Логи и бэкапы растут |
| ОС | Ubuntu 20.04+ | Ubuntu 22.04 LTS | Debian, CentOS — тоже работают |
| Docker | 20.10+ | 24.x | docker-compose v2 |
| Node.js | 18.x | 20.x LTS | Только для npm-установки, не для Docker |
На момент публикации актуальна n8n 1.x. Перед установкой проверь свежую версию на github.com/n8n-io/n8n/releases.
Установка n8n
Быстрый старт: Docker одной командой
Для теста и знакомства. Данные в SQLite, хватит для первых шагов.
docker run -it --rm \
--name n8n \
-p 5678:5678 \
-v ~/.n8n:/home/node/.n8n \
docker.n8n.io/n8nio/n8n
# Открываешь: http://localhost:5678
Production: Docker Compose + PostgreSQL
Для реальной работы нужна PostgreSQL — SQLite теряет данные при некоторых обновлениях и не справляется с нагрузкой.
mkdir n8n && cd n8n
nano docker-compose.yml
version: '3.8'
services:
postgres:
image: postgres:15
container_name: n8n-postgres
restart: unless-stopped
environment:
POSTGRES_USER: n8n
POSTGRES_PASSWORD: n8n_secure_password
POSTGRES_DB: n8n
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U n8n']
interval: 5s
timeout: 5s
retries: 10
n8n:
image: docker.n8n.io/n8nio/n8n
container_name: n8n
restart: unless-stopped
ports:
- "5678:5678"
depends_on:
postgres:
condition: service_healthy
environment:
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_DATABASE=n8n
- DB_POSTGRESDB_USER=n8n
- DB_POSTGRESDB_PASSWORD=n8n_secure_password
- N8N_BASIC_AUTH_ACTIVE=true
- N8N_BASIC_AUTH_USER=admin
- N8N_BASIC_AUTH_PASSWORD=SecurePassword123!
- N8N_HOST=n8n.example.com
- N8N_PROTOCOL=https
- NODE_ENV=production
- WEBHOOK_URL=https://n8n.example.com/
- GENERIC_TIMEZONE=Europe/Moscow
- N8N_METRICS=true
- N8N_ENCRYPTION_KEY=generate_random_32char_key_here
volumes:
- ./n8n_data:/home/node/.n8n
- ./local_files:/files
volumes:
postgres_data:
# Генерируем ключ
openssl rand -hex 16
# Запускаем
docker-compose up -d
# Следим за запуском
docker-compose logs -f n8n
# Обновление в будущем
docker-compose pull && docker-compose up -d
Установка через npm (только для разработки)
# Node.js 20 LTS
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install nodejs -y
# n8n глобально
npm install n8n -g
# Запуск
n8n start
# http://localhost:5678
Для продакшна не подходит: нет изоляции, нет автозапуска, зависимости конфликтуют.
HTTPS через Nginx
sudo apt install nginx certbot python3-certbot-nginx -y
sudo nano /etc/nginx/sites-available/n8n
server {
listen 80;
server_name n8n.example.com;
location / {
proxy_pass http://localhost:5678;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# WebSocket - обязателен для n8n
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# Долгие workflow не должны таймаутиться
proxy_read_timeout 300s;
proxy_connect_timeout 300s;
}
}
sudo ln -s /etc/nginx/sites-available/n8n /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
# SSL
sudo certbot --nginx -d n8n.example.com
sudo certbot renew --dry-run
n8n Cloud — если сервера нет
Идёшь на n8n.io, регистрируешься, получаешь готовый инстанс.
| План | Цена | Лимиты |
|---|---|---|
| Free (trial) | $0 | 20 workflow, 2 500 executions/мес |
| Starter | $20/мес | Неограниченно workflow, 10 000 executions |
| Pro | $50/мес | 50 000 executions + расширенные функции |
Минус: данные не у тебя. Для GDPR и работы с клиентскими данными — self-hosted предпочтительнее.
Основы workflow: как это работает
Структура любого workflow
Trigger запускает процесс — по расписанию, по вебхуку, по событию в мессенджере. Данные передаются как JSON между нодами. Каждая нода видит выход предыдущей.
Первый workflow за 5 минут: погода в Slack
Открой n8n, нажми New Workflow. Добавляй ноды через кнопку «+».
Schedule Trigger
Rule: Every day at 08:00
|
HTTP Request
Method: GET
URL: https://wttr.in/Moscow?format=3
|
Slack (Post Message)
Channel: #general
Text: {{$json["data"]}}
Нажми «Execute Workflow» — проверь что данные прошли через каждую ноду. Активируй. Каждый день в 8:00 погода в Slack.
Шпаргалка по expressions
Expressions — двойные фигурные скобки с JavaScript внутри. Доступны в любом текстовом поле любой ноды.
// --- Базовый доступ к данным ---
// Поле из предыдущей ноды
{{$json["field_name"]}}
// Вложенные поля
{{$json["user"]["email"]}}
// Массив по индексу
{{$json["items"][0]["name"]}}
// Данные из конкретной ноды (по имени в UI)
{{$node["HTTP Request"].json["result"]}}
// --- Переменные и окружение ---
// Переменная окружения
{{$env["API_KEY"]}}
// Параметры workflow
{{$workflow.name}}
// Индекс текущего элемента в Loop
{{$itemIndex}}
// --- Дата и время ---
// Текущая дата+время (Luxon объект)
{{$now}}
// Форматирование
{{$now.format("YYYY-MM-DD")}}
{{$now.format("DD.MM.YYYY HH:mm")}}
// Сегодня + 7 дней
{{$now.plus({days: 7}).toISODate()}}
// Unix timestamp
{{$now.toUnixInteger()}}
// --- JavaScript в выражениях ---
// Тернарный оператор
{{$json["status"] === "active" ? "Активен" : "Неактивен"}}
// Конкатенация
{{"Привет, " + $json["user"]["name"] + "!"}}
// Число → строка с форматированием
{{$json["price"].toFixed(2) + " ₽"}}
// Текущий год
{{new Date().getFullYear()}}
// Проверка наличия поля
{{$json["email"] !== undefined ? $json["email"] : "не указан"}}
// --- Работа со строками ---
// Верхний регистр
{{$json["name"].toUpperCase()}}
// Обрезать пробелы
{{$json["input"].trim()}}
// Заменить подстроку
{{$json["text"].replace("старое", "новое")}}
// Разбить строку
{{$json["tags"].split(",")[0]}}
// --- Работа с массивами ---
// Длина массива
{{$json["items"].length}}
// Первый элемент
{{$json["items"][0]}}
// Последний элемент
{{$json["items"][$json["items"].length - 1]}}
// Join массива в строку
{{$json["tags"].join(", ")}}
Шпаргалка по нодам
Trigger Nodes — запуск workflow
| Нода | Когда срабатывает | Типичное применение |
|---|---|---|
| Webhook | HTTP POST/GET на URL n8n | Интеграция с любым сервисом через HTTP |
| Schedule Trigger | По расписанию (cron) | Ежедневные отчёты, мониторинг, бэкапы |
| Email Trigger (IMAP) | Новое письмо в ящике | Автоматическая обработка входящих писем |
| Telegram Trigger | Сообщение боту в Telegram | Telegram боты любой сложности |
| Manual Trigger | Ручной запуск из UI | Тестирование, одноразовые задачи |
| Chat Trigger | Сообщение во встроенный чат n8n | Тестирование AI-агентов |
Action Nodes — выполняют действия
| Нода | Что делает | Ключевые параметры |
|---|---|---|
| HTTP Request | Запрос к любому API | Method, URL, Headers, Body, Auth |
| Code | JavaScript или Python код | Полный доступ к данным потока, npm-модули |
| Set | Установка и изменение полей JSON | Режимы: Set, Add, Keep Only |
| Slack | Сообщения, каналы, пользователи | Operation, Channel, Text, Attachments |
| Telegram | Отправка сообщений, файлов, кнопок | Chat ID, Text, Reply Markup |
| Gmail / SMTP | Отправка и чтение email | To, Subject, HTML Body |
| Google Sheets | Чтение и запись таблиц | Spreadsheet ID, Sheet, Range, Operation |
| PostgreSQL / MySQL | SQL запросы к базе | Query, Parameters |
| OpenAI | ChatGPT, DALL-E, Embeddings | Model, Messages, Temperature |
| Execute Workflow | Вызов другого workflow | Workflow ID, Input Data |
Logic Nodes — управление потоком
| Нода | Что делает | Когда использовать |
|---|---|---|
| IF | Ветвление: true/false | Проверить одно условие |
| Switch | Множественное ветвление | Разные действия по значению поля |
| Merge | Объединение данных из веток | Собрать результаты параллельных веток |
| Loop Over Items | Цикл по каждому элементу массива | Обработать список записей |
| Split In Batches | Разбивка массива на батчи | Обработка больших объёмов без OOM |
| Wait | Пауза на заданное время | Rate limiting API, отложенные действия |
| Stop And Error | Принудительная остановка с ошибкой | Валидация входных данных |
AI-агенты в n8n
Разница: чат-бот vs AI-агент
Чат-бот отвечает из контекста. Агент использует Tools — реально что-то делает: проверяет базу, отправляет письмо, создаёт тикет. Сам выбирает что вызвать под конкретную задачу.
Создание AI-агента: пошагово
Chat Trigger (тестирование в UI)
|
AI Agent
Model: OpenAI GPT-4 или Claude
System Message: "Ты помощник поддержки. Используй tools."
Tools:
- HTTP Request Tool (статус заказа через API)
- PostgreSQL Tool (поиск клиента в БД)
- Email Tool (отправить письмо)
- HTTP Request Tool (создать тикет в Jira)
|
Telegram / Slack (отправить ответ)
Подключение OpenAI
# Settings -> Credentials -> Add Credential -> OpenAI API
# Вставляешь: sk-xxxxxxxxxxxxxxxx
Использование в OpenAI Chat ноде:
Operation: Chat
Model: gpt-4-turbo
Messages:
role: system | content: You are a helpful assistant
role: user | content: {{$json["user_message"]}}
Подключение Anthropic Claude
# Credentials -> Add -> HTTP Header Auth
# Header Name: x-api-key
# Header Value: sk-ant-xxxxxxxxxxxx
// HTTP Request нода -> Claude API
Method: POST
URL: https://api.anthropic.com/v1/messages
Headers:
x-api-key: {{$env["ANTHROPIC_API_KEY"]}}
anthropic-version: 2023-06-01
content-type: application/json
Body:
{
"model": "claude-opus-4-5",
"max_tokens": 1024,
"messages": [
{"role": "user", "content": "{{$json['question']}}"}
]
}
RAG: агент с базой знаний
Вопрос пользователя
|
Vector Store Tool (поиск в Pinecone / Qdrant / Weaviate)
|
AI Agent (отвечает с контекстом из найденных документов)
|
Ответ (без галлюцинаций, основан на реальных данных)
Загружаешь документы, создаёшь embeddings, сохраняешь в Vector DB. Агент при каждом вопросе ищет релевантные фрагменты и отвечает опираясь на них.
Telegram боты в n8n
Быстрый старт: эхо-бот
Создай бота через @BotFather, получи токен. В n8n: Settings — Credentials — Telegram API — вставь токен.
Telegram Trigger (On Message)
|
Set
chat_id: {{$json["message"]["chat"]["id"]}}
text: {{$json["message"]["text"]}}
|
Telegram (Send Message)
Chat ID: {{$json["chat_id"]}}
Text: Ты написал: {{$json["text"]}}
Бот с ChatGPT
Telegram Trigger
|
OpenAI (Chat)
User Message: {{$json["message"]["text"]}}
|
Telegram (Send Message)
Chat ID: {{$json["message"]["chat"]["id"]}}
Text: {{$json["choices"][0]["message"]["content"]}}
Бот с командами
Telegram Trigger
|
Switch (по тексту сообщения)
/start -> Set (текст приветствия)
/help -> Set (текст справки)
/price -> HTTP Request (цена из API)
default -> OpenAI (AI-ответ на произвольный вопрос)
|
Telegram (Send Message)
Бот с кнопками (Inline Keyboard)
// В Telegram ноде, поле Reply Markup
{
"inline_keyboard": [
[
{"text": "Статус заказа", "callback_data": "check_order"},
{"text": "Связаться с оператором", "callback_data": "human"}
],
[
{"text": "Часто задаваемые вопросы", "callback_data": "faq"}
]
]
}
Обработка нажатий на кнопки:
Telegram Trigger (On Callback Query)
|
Switch (по callback_data)
"check_order" -> HTTP Request (API статуса заказа)
"human" -> Slack (уведомить оператора)
"faq" -> Set (текст FAQ)
|
Telegram (Answer Callback Query)
Telegram (Send Message с результатом)
Готовые шаблоны
Библиотека: n8n.io/workflows — тысячи workflow. Скачиваешь JSON, импортируешь через «…» — Import from File, настраиваешь credentials.
RSS в Telegram/Slack
RSS Feed Trigger
|
Set (форматирование: заголовок + ссылка)
|
Telegram / Slack (отправка)
Email в задачу Jira
Gmail Trigger (UNSEEN письма)
|
OpenAI (извлечь суть: тема, приоритет, описание)
|
Jira (создать задачу)
|
Gmail (ответить клиенту с номером тикета)
Мониторинг сайта
Schedule Trigger (каждые 5 минут)
|
HTTP Request (GET https://example.com)
|
IF (statusCode != 200)
true -> Slack (алерт: код ошибки + время)
false -> (ничего, продолжаем жить)
Ночной бэкап в Google Drive
Schedule Trigger (03:00)
|
Execute Command (pg_dump | gzip)
|
Google Drive (Upload)
|
Slack (Backup complete: имя файла, размер)
AI Content Generator
Schedule Trigger (раз в неделю)
|
Google Sheets (получить список тем статей)
|
Loop Over Items
|
OpenAI (сгенерировать статью по теме)
|
WordPress (опубликовать)
|
Telegram (анонс в канал)
Продвинутые техники
Обработка ошибок
По умолчанию workflow падает при первой ошибке и молчит. В продакшне это неприемлемо — узнаёшь о проблеме когда клиент уже жалуется.
Глобальный Error Workflow. Создай отдельный workflow. В Settings — Error Workflow — выбери его. Теперь любая ошибка в любом workflow запускает этот обработчик.
Error Trigger
|
Set
workflow_name: {{$json["workflow"]["name"]}}
error_message: {{$json["execution"]["error"]["message"]}}
execution_id: {{$json["execution"]["id"]}}
|
Slack (алерт в #alerts)
Text: ОШИБКА в {{$json["workflow_name"]}}: {{$json["error_message"]}}
|
Google Sheets (логировать: время, workflow, ошибка)
Continue On Fail. В настройках ноды включи «Continue On Fail» — нода не уронит workflow при ошибке, а передаст информацию об ошибке в следующую ноду.
HTTP Request (Continue On Fail: yes)
|
IF ($json["error"] !== undefined)
true -> Slack (алерт) -> Google Sheets (лог)
false -> Обычная обработка данных
Переменные окружения
API-ключи прямо в workflow — это плохо. Кто-то получит доступ к n8n — получит все ключи сразу.
# docker-compose.yml
environment:
- OPENAI_API_KEY=sk-xxxxxxxxxxxx
- ANTHROPIC_API_KEY=sk-ant-xxxxxxxxxxxx
- TELEGRAM_BOT_TOKEN=12345:xxxxxxxxxxxx
- SLACK_WEBHOOK=https://hooks.slack.com/...
- DB_URL=postgresql://user:pass@host/db
Используешь в любой ноде:
{{$env["OPENAI_API_KEY"]}}
{{$env["TELEGRAM_BOT_TOKEN"]}}
Sub-workflows: переиспользование логики
Одна и та же логика уведомлений в двадцати workflow — это боль при изменениях. Выноси в отдельный workflow.
// Sub-workflow "Send Notification"
Execute Workflow Trigger (получает: channel, message, severity)
|
IF (severity == "critical")
true -> Slack + Email + Telegram
false -> Только Slack
// Основной workflow вызывает его:
Execute Workflow
Workflow: "Send Notification"
Data: {channel: "#alerts", message: "...", severity: "critical"}
Батчинг больших объёмов
Капля никотина убивает лошадь. Одна нода с 50 000 записей без батчинга убивает n8n.
PostgreSQL (SELECT 50000 records)
|
Split In Batches (по 100 записей)
|
Loop
HTTP Request (обработать батч)
Wait (100ms - rate limiting)
PostgreSQL (UPDATE status)
|
Return to Split (следующий батч)
Вебхуки с аутентификацией
// Webhook нода - настройки Authentication
Authentication: Header Auth
Header Name: X-Webhook-Token
Header Value: (твой секрет из env)
Проверка в workflow:
Webhook Trigger
|
IF ($headers["x-webhook-token"] === $env["WEBHOOK_SECRET"])
false -> Respond to Webhook (401) + Stop
true -> Основная логика
Интеграции: шпаргалка настройки
Google Sheets
// Чтение
Google Sheets (Read)
Spreadsheet ID: 1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgVE2upms
Sheet: Sheet1
Range: A1:D100
// Запись новой строки
Google Sheets (Append)
Spreadsheet ID: xxxxx
Sheet: Sheet1
Values: {Name: {{$json["name"]}}, Email: {{$json["email"]}}}
Slack
// Простое сообщение
Operation: Post Message
Channel: #alerts
Text: Привет из n8n!
// С вложением (цветная карточка)
Attachments:
[{
"color": "#36a64f",
"title": "Deployment Success",
"text": "Version 2.0 deployed",
"footer": "n8n automation"
}]
Email (Gmail / SMTP)
# Credentials: SMTP
Host: smtp.gmail.com
Port: 587
User: your@gmail.com
Password: app_password # НЕ основной пароль, app password из настроек Google
// Email Send нода
To: {{$json["client_email"]}}
Subject: Заказ #{{$json["order_id"]}} принят
HTML: Спасибо за заказ!
{{$json["details"]}}
PostgreSQL
// Параметризованный запрос (защита от SQL injection)
Query: SELECT * FROM orders WHERE status = $1 AND user_id = $2
Parameters: ["pending", {{$json["user_id"]}}]
// Update
Query: UPDATE orders SET status = $1 WHERE id = $2
Parameters: ["processed", {{$json["order_id"]}}]
Telegram: отправка файлов и медиа
// Отправить фото по URL
Telegram (Send Photo)
Chat ID: {{$json["chat_id"]}}
Photo: https://example.com/image.jpg
Caption: Ваш отчёт за {{$now.format("DD.MM.YYYY")}}
// Отправить документ
Telegram (Send Document)
Chat ID: {{$json["chat_id"]}}
Document: {{$binary["report"]}}
Безопасность n8n в продакшне
| Что защитить | Как защитить | Настройка |
|---|---|---|
| Доступ к n8n UI | Basic Auth или OAuth2 | N8N_BASIC_AUTH_ACTIVE=true |
| Трафик | HTTPS через Nginx | Certbot + конфиг Nginx |
| API-ключи | Переменные окружения | $env[«KEY»] в выражениях |
| Webhooks | Header Auth | Настройки Webhook ноды |
| Encryption Key | Сохранить в KeePass/Vault | N8N_ENCRYPTION_KEY в env |
| Порт 5678 | Закрыть в firewall | ufw deny 5678 |
| PostgreSQL | Только внутри Docker network | Не пробрасывать порт 5432 |
# Закрываем прямой доступ к n8n, оставляем только Nginx
sudo ufw allow 80
sudo ufw allow 443
sudo ufw allow 22
sudo ufw deny 5678
sudo ufw enable
Бэкапы и восстановление
Экспорт workflow
# Через UI: Settings -> Workflows -> Export All
# Через API
curl -X GET https://n8n.example.com/api/v1/workflows \
-u admin:password \
-H "Accept: application/json" > workflows_backup.json
Автоматический бэкап PostgreSQL
#!/bin/bash
# /usr/local/bin/backup-n8n.sh
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR=/backups/n8n
mkdir -p $BACKUP_DIR
docker exec n8n-postgres pg_dump -U n8n n8n > $BACKUP_DIR/n8n_$DATE.sql
gzip $BACKUP_DIR/n8n_$DATE.sql
# Удаляем старше 30 дней
find $BACKUP_DIR -name "*.sql.gz" -mtime +30 -delete
echo "Backup: n8n_$DATE.sql.gz"
chmod +x /usr/local/bin/backup-n8n.sh
# Cron: каждую ночь в 3:00
echo "0 3 * * * /usr/local/bin/backup-n8n.sh >> /var/log/n8n-backup.log 2>&1" | crontab -
Восстановление
docker-compose stop n8n
gunzip -c /backups/n8n/n8n_20260504.sql.gz | \
docker exec -i n8n-postgres psql -U n8n n8n
docker-compose start n8n
Миграция на новый сервер
# Старый сервер: берём ключ
docker exec n8n env | grep N8N_ENCRYPTION_KEY
# Новый сервер: docker-compose.yml
environment:
- N8N_ENCRYPTION_KEY=тот_же_ключ
Troubleshooting: 8 частых проблем с n8n
| # | Проблема | Симптом | Решение |
|---|---|---|---|
| 1 | Webhook не срабатывает | Внешний сервис отправляет POST, workflow молчит | WEBHOOK_URL в env должен быть публичный HTTPS. localhost снаружи недоступен — используй ngrok для разработки |
| 2 | Workflow не активируется | Active не включается или сразу возвращается | Нет Trigger ноды или credentials не настроены. Смотри: docker-compose logs -f n8n |
| 3 | OAuth Unauthorized | Google/GitHub возвращают 401 при авторизации | Redirect URL в OAuth приложении: https://n8n.example.com/rest/oauth2-credential/callback |
| 4 | Данные теряются после рестарта | После docker-compose restart пропадают workflow и executions | SQLite без постоянного volume или PostgreSQL не подключена. Проверь volumes в docker-compose.yml |
| 5 | n8n не стартует после обновления | Контейнер поднимается и сразу останавливается | docker-compose logs n8n — читаешь ошибку. Помогает: docker-compose down && up -d. Крайний случай: откат на конкретную версию image: docker.n8n.io/n8nio/n8n:1.20.0 |
| 6 | Workflow тормозит | Execution занимает минуты вместо секунд | Большой массив без Split In Batches. Медленный внешний API. Добавь Wait ноду для rate limiting |
| 7 | Expression error в ноде | Нода падает с ошибкой в {{$json[…]}} | Предыдущая нода вернула другую структуру. Запусти Execute Workflow и кликни ноду — увидишь реальные данные. Добавь IF для проверки наличия поля |
| 8 | WebSocket ошибки в UI | Статус execution не обновляется в реальном времени | В Nginx нет WebSocket заголовков. Добавь proxy_set_header Upgrade $http_upgrade и Connection «upgrade» |
Алгоритм диагностики любой проблемы
# 1. Логи n8n
docker-compose logs -f n8n
# 2. Логи PostgreSQL
docker-compose logs -f postgres
# 3. Статус контейнеров
docker-compose ps
# 4. Переменные окружения внутри контейнера
docker exec n8n env | grep N8N
# 5. Ручной запуск workflow в UI
# Execute Workflow -> кликаешь каждую ноду -> видишь входящие и исходящие данные
# 6. Перезапуск
docker-compose restart n8n
Чеклист: production-ready n8n
| Категория | Пункт |
|---|---|
| Установка | n8n запущен через docker-compose с PostgreSQL |
| Установка | HTTPS настроен через Nginx + Certbot |
| Установка | WEBHOOK_URL указывает на публичный домен |
| Безопасность | Basic Auth или OAuth2 включены |
| Безопасность | API-ключи в переменных окружения, не в workflow |
| Безопасность | N8N_ENCRYPTION_KEY сохранён в безопасном месте |
| Безопасность | Порт 5678 закрыт в firewall |
| Безопасность | Webhooks защищены Header Auth |
| Бэкапы | Ночной cron-бэкап PostgreSQL настроен |
| Бэкапы | Workflow экспортированы в Git или S3 |
| Мониторинг | Error Workflow настроен — алерты при ошибках |
| Мониторинг | Логи периодически просматриваются |
| Workflow | Continue On Fail включён для нестабильных нод |
| Workflow | Credentials настроены в Settings, не захардкожены |
| Workflow | Sub-workflows созданы для повторяющейся логики |
| Workflow | Split In Batches используется при обработке массивов 1000+ записей |
FAQ: что спрашивают чаще всего
Почему n8n а не Zapier — если у меня уже оплачен Zapier?
Если у тебя мало задач и бюджет есть — Zapier нормальное решение. n8n выигрывает когда: данные нельзя передавать на внешние серверы (банки, медицина, юриспруденция), объём задач растёт и Zapier становится дорогим, нужна нестандартная логика которую в Zapier не реализовать. Переходить ради перехода смысла нет.
Как защитить webhook от несанкционированного запуска?
Включи Header Auth в настройках Webhook ноды. Укажи имя заголовка (например X-Webhook-Token) и значение из переменной окружения. В первой ноде workflow проверяй заголовок через IF — при несовпадении отвечай 401 и останавливай выполнение. Без этого любой знающий URL может запустить твой workflow.
Где хранить API-ключи безопасно?
Два варианта. Первый — переменные окружения в docker-compose.yml, используешь через $env[«KEY»] в выражениях. Второй — Credentials в n8n (Settings — Credentials): шифруются AES-256 с N8N_ENCRYPTION_KEY, хранятся в PostgreSQL. Credentials предпочтительнее для OAuth и сложных схем аутентификации. Переменные окружения проще для простых API-ключей.
Что делать если потерял N8N_ENCRYPTION_KEY?
Credentials в базе станут нечитаемы — восстановить их из зашифрованного blob невозможно без ключа. Придётся удалить все Credentials и ввести заново. Workflow сохранятся, но все ноды со ссылками на Credentials потребуют переназначения. Мораль: ключ генерируется один раз, хранится в KeePass или Vault, записывается в двух местах.
Как работают AI-агенты и чем отличаются от обычного вызова OpenAI?
Обычный вызов OpenAI — отправил вопрос, получил текст. AI-агент — это LLM с доступом к Tools: HTTP Request, SQL запрос, отправка email. Агент сам решает какой Tool вызвать на основе вопроса, вызывает его, получает результат, формирует ответ. Результат: AI который не просто болтает, а реально проверяет статус заказа или создаёт тикет.
Как настроить n8n для работы с несколькими командами?
В Enterprise версии есть Projects — изоляция workflow и credentials между командами. В Community версии — только один общий инстанс. Для разделения: запусти несколько инстансов n8n на разных портах или используй разные docker-compose стеки с разными доменами. Каждый инстанс — своя PostgreSQL, свой N8N_ENCRYPTION_KEY, свои Credentials.
Итог
n8n — это инструмент который превращает «трачу 2 часа в день на рутину» в «настроил один раз за полчаса, всё работает само». Шпаргалка выше покрывает 90% того что нужно в реальной работе: от первого docker run до AI-агентов с базой знаний.
Три вещи которые ломают всё чаще всего: запускают webhook на localhost и не понимают почему внешний сервис не достучится, хардкодят API-ключи прямо в workflow, забывают про Error Workflow и узнают о проблемах от пользователей. Все три решаются за 10 минут если знать куда смотреть.
Оставайтесь на связи
Рецепты от IT-боли. Без воды, без рекламы, без маркетинговой шелухи.
Подписаться на IT-Аптеку →



неплохая шпаргалка по n8n и автоматизации workflow с AI-агентами. Сейчас, когда бизнесу и техническим специалистам всё чаще требуется автоматизация процессов без привязки к SaaS-лимитам, n8n становится одним из самых востребованных инструментов. Особенно ценно, что в статье показан не абстрактный обзор, а практический подход к использованию n8n для реальных задач.
Для новичков важно понимать, что n8n — это платформа визуальной автоматизации, которая позволяет создавать сложные workflow без написания большого количества кода. В отличие от Zapier или Make, n8n можно развернуть на своём сервере (self-hosted), что критично для проектов с требованиями к безопасности, приватности данных и контролю инфраструктуры. Именно это делает n8n популярным среди DevOps-инженеров, системных администраторов и разработчиков.
Отдельного внимания заслуживает блок про AI-агентов в n8n. Сегодня автоматизация — это уже не просто «если-то», а полноценные интеллектуальные сценарии, где агент анализирует данные, принимает решения и сам выбирает дальнейшие действия. Связка n8n + OpenAI (или других LLM) позволяет строить workflow для:
обработки входящих писем и заявок,
классификации и анализа текстов,
автоматического ответа клиентам,
генерации контента,
работы с API и внешними сервисами.
Такие AI-workflow особенно полезны в маркетинге, поддержке, аналитике и внутренней автоматизации компаний. При этом n8n остаётся гибким инструментом: можно комбинировать AI-ноды с классическими HTTP-запросами, Webhook-триггерами, базами данных и очередями.
Плюс статьи — чёткая структура и формат шпаргалки, который действительно экономит время. Когда работаешь с десятками workflow, важно иметь под рукой краткое описание нод, логики выполнения, условий и особенностей интеграций. Это особенно актуально для тех, кто использует n8n в продакшене и поддерживает несколько автоматизированных цепочек одновременно.
Также стоит отметить, что n8n отлично подходит не только для разработчиков, но и для технически продвинутых специалистов без глубокого знания кода. Визуальный редактор, логика узлов и возможность быстро тестировать сценарии делают его удобным инструментом для быстрого прототипирования автоматизации.
В целом, статья хорошо закрывает поисковые запросы вроде:
«что такое n8n», «автоматизация workflow», «n8n AI агенты», «n8n примеры использования», «self-hosted автоматизация» — и будет полезна как тем, кто только выбирает инструмент, так и тем, кто уже внедряет n8n в рабочие процессы.