n8n шпаргалка: всё что нужно — от установки до AI-агентов

n8n шпаргалка для IT-специалистов: установка Docker, expressions, список нод, AI-агенты с OpenAI/Claude, Telegram боты, troubleshooting 8 проблем. Готовые шаблоны и чеклист.
Быстрый ответ
  • 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 устроен

%%{init: {
  'theme': 'base',
  'themeVariables': {
    'primaryColor': '#ffffff',
    'primaryTextColor': '#1e293b',
    'primaryBorderColor': '#94a3b8',
    'lineColor': '#64748b',
    'fontSize': '15px',
    'fontFamily': 'ui-sans-serif, system-ui, sans-serif'
  },
  'flowchart': {'curve': 'linear', 'nodeSpacing': 50, 'rankSpacing': 50}
}}%%
flowchart TD
    INET["Интернет / внешние сервисы"]
    NGINX["Nginx (reverse proxy + SSL)"]
    N8N["n8n (порт 5678)"]
    PG["PostgreSQL (workflow и executions)"]
    VOL["Docker volume (файлы)"]
    TRIG["Trigger Nodes: Webhook, Schedule, Telegram, Email"]
    ACTION["Action Nodes: HTTP, DB, Slack, OpenAI"]
    LOGIC["Logic Nodes: IF, Switch, Loop, Merge"]

    INET -->|"HTTPS 443"| NGINX
    NGINX -->|"HTTP 5678"| N8N
    N8N --> PG
    N8N --> VOL
    TRIG -->|"запускает"| ACTION
    ACTION --> LOGIC
    LOGIC -->|"результат"| INET

    style N8N fill:#f8fafc,stroke:#3b82f6,stroke-width:2px,color:#1e40af
    style NGINX fill:#f8fafc,stroke:#22c55e,stroke-width:2px,color:#15803d
    style PG fill:#f8fafc,stroke:#3b82f6,stroke-width:1px,color:#1e293b
    style TRIG fill:#f8fafc,stroke:#f97316,stroke-width:2px,color:#9a3412
    style ACTION fill:#f8fafc,stroke:#22c55e,stroke-width:1px,color:#15803d
    style LOGIC fill:#f8fafc,stroke:#94a3b8,stroke-width:1px,color:#1e293b
    style INET fill:#f8fafc,stroke:#94a3b8,stroke-width:1px,color:#1e293b
    style VOL fill:#f8fafc,stroke:#94a3b8,stroke-width:1px,color:#1e293b

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:
N8N_ENCRYPTION_KEY — сохрани до запуска
Сгенерируй один раз и запиши в безопасное место. Если потеряешь — все Credentials в базе станут нечитаемы. Мигрировать на другой сервер без него тоже не получится.

# Генерируем ключ
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

%%{init: {
  'theme': 'base',
  'themeVariables': {
    'primaryColor': '#ffffff',
    'primaryTextColor': '#1e293b',
    'primaryBorderColor': '#94a3b8',
    'lineColor': '#64748b',
    'fontSize': '15px',
    'fontFamily': 'ui-sans-serif, system-ui, sans-serif'
  },
  'flowchart': {'curve': 'linear', 'nodeSpacing': 50, 'rankSpacing': 50}
}}%%
flowchart LR
    T["Trigger Node (запуск)"]
    A1["Action Node 1"]
    L["Logic Node (IF/Switch)"]
    A2["Action: true ветка"]
    A3["Action: false ветка"]

    T -->|"JSON"| A1
    A1 -->|"JSON"| L
    L -->|"true"| A2
    L -->|"false"| A3

    style T fill:#f8fafc,stroke:#f97316,stroke-width:2px,color:#9a3412
    style A1 fill:#f8fafc,stroke:#22c55e,stroke-width:1px,color:#15803d
    style A2 fill:#f8fafc,stroke:#22c55e,stroke-width:1px,color:#15803d
    style A3 fill:#f8fafc,stroke:#94a3b8,stroke-width:1px,color:#1e293b
    style L fill:#f8fafc,stroke:#3b82f6,stroke-width:1px,color:#1e40af

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 — реально что-то делает: проверяет базу, отправляет письмо, создаёт тикет. Сам выбирает что вызвать под конкретную задачу.

%%{init: {
  'theme': 'base',
  'themeVariables': {
    'primaryColor': '#ffffff',
    'primaryTextColor': '#1e293b',
    'primaryBorderColor': '#94a3b8',
    'lineColor': '#64748b',
    'fontSize': '15px',
    'fontFamily': 'ui-sans-serif, system-ui, sans-serif'
  },
  'flowchart': {'curve': 'linear', 'nodeSpacing': 50, 'rankSpacing': 50}
}}%%
flowchart TD
    USER["Вопрос: статус заказа 12345?"]
    AGENT["AI Agent (GPT-4 / Claude)"]
    T1["Tool: Check Order API"]
    T2["Tool: Create Jira Ticket"]
    T3["Tool: Send Email"]
    RESP["Ответ: заказ отправлен, трек ABC123"]

    USER --> AGENT
    AGENT -->|"выбирает нужный Tool"| T1
    T1 -->|"данные заказа"| AGENT
    AGENT --> RESP
    AGENT -.->|"при необходимости"| T2
    AGENT -.->|"при необходимости"| T3

    style AGENT fill:#f8fafc,stroke:#3b82f6,stroke-width:2px,color:#1e40af
    style USER fill:#f8fafc,stroke:#94a3b8,stroke-width:1px,color:#1e293b
    style T1 fill:#f8fafc,stroke:#22c55e,stroke-width:2px,color:#15803d
    style T2 fill:#f8fafc,stroke:#22c55e,stroke-width:1px,color:#15803d
    style T3 fill:#f8fafc,stroke:#22c55e,stroke-width:1px,color:#15803d
    style RESP fill:#f8fafc,stroke:#22c55e,stroke-width:2px,color:#15803d

Создание 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 — вектор атаки
Без аутентификации любой знающий URL может запустить твой workflow. Всегда защищай вебхуки.

// 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

Миграция на новый сервер

Encryption Key — взять со старого сервера до удаления
Без него Credentials на новом сервере будут нечитаемы — все API-ключи придётся вводить заново. Сначала забираешь ключ, потом переезжаешь.

# Старый сервер: берём ключ
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 минут если знать куда смотреть.

Сохрани шпаргалку — пригодится
Проблемы с настройкой или непонятно как реализовать конкретный workflow — пиши в комментарии. Опиши что настраиваешь, что получается, версию n8n и вывод из docker-compose logs. Разберёмся.
Андрей Анатольевич
Author: Андрей Анатольевич

Руководитель ИТ / Кризис-менеджер 25 лет в IT: от инженера в МегаФоне до руководителя отдела. Знаю, как выглядит бардак: нестабильные сети, устаревшая инфраструктура, конфликты в команде, раздутые сроки. Помогаю бизнесу выходить из кризиса: навожу порядок в легаси, стабилизирую то, что разваливается, выстраиваю прогнозируемые процессы. Не раз возвращал к жизни ИТ-структуры — знаю цену хаосу. 📍 Ищу проект для полной реорганизации / стабилизации. 📬 Telegram: @over_dude ✉️ mail@it-apteka.com

Оставайтесь на связи

Рецепты от IT-боли. Без воды, без рекламы, без маркетинговой шелухи.

Подписаться на IT-Аптеку →

Мы ВКонтакте

IT-Аптека — советы, новости и помощь рядом.

Вступить в группу ВКонтакте →
Поделитесь:

1 комментарий к “n8n шпаргалка: всё что нужно — от установки до AI-агентов”

  1. неплохая шпаргалка по 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 в рабочие процессы.

Оставьте комментарий

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

Прокрутить вверх