N8n настройка

N8n: Подробное руководство по установке и настройке

N8n — это инструмент с открытым исходным кодом для оркестрации рабочих процессов (workflow automation), который позволяет соединять различные приложения, API и сервисы между собой. В отличие от многих конкурентов, n8n использует модель «fair-code», которая дает возможность самому развернуть платформу на собственном сервере, сохраняя полный контроль над данными и процессами. Данная статья представляет собой исчерпывающее техническое руководство по установке, базовой и расширенной настройке n8n.

Выбор способа установки и начальная конфигурация

Установка n8n возможна несколькими методами, выбор которых зависит от операционной системы, инфраструктуры и уровня экспертизы пользователя.

Установка с помощью Docker (рекомендуемый способ)

Docker-контейнеризация является наиболее предпочтительным методом, так как обеспечивает изоляцию, простоту обновления и переносимость. Базовую установку можно выполнить одной командой:

    • docker run -it --rm --name n8n -p 5678:5678 -v ~/.n8n:/home/node/.n8n n8nio/n8n

    Эта команда запускает контейнер n8n, пробрасывает порт 5678 на хост-машину и монтирует том для сохранения данных (включая рабочие процессы и учетные данные) вне контейнера. Для production-среды необходима более сложная конфигурация с использованием Docker Compose и переменных окружения.

    Пример файла docker-compose.yml для production

    • 
      version: '3.8'
      services:
        n8n:
          image: n8nio/n8n
          container_name: n8n
          restart: unless-stopped
          ports:
            - "5678:5678"
          environment:
            - N8N_PROTOCOL=https
            - N8N_HOST=your_domain.com
            - N8N_PORT=5678
            - N8N_WEBHOOK_URL=https://your_domain.com/
            - GENERIC_TIMEZONE=Europe/Moscow
            - DB_TYPE=postgresdb
            - DB_POSTGRESDB_HOST=postgres
            - DB_POSTGRESDB_PORT=5432
            - DB_POSTGRESDB_DATABASE=n8n
            - DB_POSTGRESDB_USER=n8n_user
            - DB_POSTGRESDB_PASSWORD=your_secure_password
            - N8N_ENCRYPTION_KEY=your_super_secure_encryption_key
          volumes:
            - n8n_data:/home/node/.n8n
          depends_on:
            - postgres
        postgres:
          image: postgres:15
          container_name: n8n_postgres
          restart: unless-stopped
          environment:
            - POSTGRES_USER=n8n_user
            - POSTGRES_PASSWORD=your_secure_password
            - POSTGRES_DB=n8n
          volumes:
            - postgres_data:/var/lib/postgresql/data
      volumes:
        n8n_data:
        postgres_data:
      

    Установка с помощью npm

    Для разработки или тестирования можно установить n8n глобально через npm (Node Package Manager). Требуется Node.js версии 18 или выше.

    • npm install n8n -g
    • После установки запустите n8n командой: n8n start

    Ключевые настройки через переменные окружения

    Конфигурация n8n в основном управляется через переменные окружения. Они определяют все аспекты работы платформы.

    Переменная Описание Пример значения
    N8N_PROTOCOL Протокол для доступа к веб-интерфейсу. https (для production)
    N8N_HOST Доменное имя или IP-адрес сервера. automation.yourcompany.com
    N8N_WEBHOOK_URL Полный базовый URL для вызовов вебхуков. https://automation.yourcompany.com/
    GENERIC_TIMEZONE Часовой пояс для выполнения запланированных работ. Europe/Moscow
    DB_TYPE Тип базы данных (sqlite, postgresdb, mysqldb). postgresdb
    N8N_ENCRYPTION_KEY Ключ для шифрования учетных данных. Должен быть длиной 16, 24 или 32 символа. Критически важен и должен быть одинаковым при всех перезапусках. my-32char-encryption-key-1234
    EXECUTIONS_DATA_PRUNE Включить автоматическую очистку старых выполнений. true
    EXECUTIONS_DATA_MAX_AGE Максимальный возраст данных выполнения в часах перед удалением. 168 (7 дней)
    N8N_METRICS Включить сбор метрик. true
    N8N_USER_MANAGEMENT_DISABLED Отключить управление пользователями (если используется внешняя аутентификация). false

    Настройка аутентификации и безопасности

    По умолчанию n8n запускается без аутентификации, что недопустимо для доступа из публичной сети. Необходимо настроить один из методов защиты.

    Базовая аутентификация

    Самый простой способ. Задается через переменные окружения:

    • N8N_BASIC_AUTH_ACTIVE=true
    • N8N_BASIC_AUTH_USER=admin
    • N8N_BASIC_AUTH_PASSWORD=your_strong_password

    Аутентификация через JWT (рекомендуется для production)

    Более безопасный и гибкий метод, часто используемый при интеграции с обратным прокси-сервером.

    • N8N_JWT_AUTH_ACTIVE=true
    • N8N_JWT_AUTH_HEADER=Authorization
    • N8N_JWKS_URI=https://your-auth-domain.com/.well-known/jwks.json

    Настройка HTTPS через обратный прокси (Nginx)

    Для работы по HTTPS необходимо настроить Nginx или аналогичный веб-сервер в качестве обратного прокси. Пример конфигурации Nginx:

    • 
      server {
          listen 443 ssl http2;
          server_name automation.yourcompany.com;
      
          ssl_certificate /path/to/your/fullchain.pem;
          ssl_certificate_key /path/to/your/privkey.pem;
      
          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;
              proxy_http_version 1.1;
              proxy_set_header Upgrade $http_upgrade;
              proxy_set_header Connection "upgrade";
          }
      }
      

    Настройка базы данных

    По умолчанию n8n использует SQLite, что подходит только для тестирования. Для production-нагрузки обязателен переход на PostgreSQL или MySQL.

    Конфигурация для PostgreSQL

    Как показано в примере docker-compose выше, необходимо указать следующие переменные:

    • DB_TYPE=postgresdb
    • DB_POSTGRESDB_HOST=your_postgres_host
    • DB_POSTGRESDB_PORT=5432
    • DB_POSTGRESDB_DATABASE=n8n
    • DB_POSTGRESDB_USER=n8n_user
    • DB_POSTGRESDB_PASSWORD=your_secure_password
    • DB_POSTGRESDB_SCHEMA=public (опционально)
    • DB_POSTGRESDB_SSL_ENABLED=true (для облачных БД)
    • DB_POSTGRESDB_SSL_REJECT_UNAUTHORIZED=false (только для самоподписанных сертификатов в тестовой среде)

    Управление выполнением рабочих процессов (Executions)

    Каждый запуск рабочего процесса создает запись об выполнении (execution). Со временем они накапливаются и занимают место в БД. Необходимо настроить политику их очистки.

    • Режим очистки: Установите EXECUTIONS_DATA_PRUNE=true.
    • Срок хранения успешных выполнений: EXECUTIONS_DATA_MAX_AGE=72 (хранить 3 дня).
    • Срок хранения ошибочных выполнений: EXECUTIONS_DATA_PRUNE_MAX_COUNT=50 (хранить последние 50 ошибок).
    • Режим сохранения данных: EXECUTIONS_DATA_SAVE_ON_ERROR=all (сохранять данные для всех ошибок) или EXECUTIONS_DATA_SAVE_ON_SUCCESS=none (не сохранять данные для успешных выполнений).

    Настройка внешних триггеров (Webhook, Form Trigger)

    Для работы вебхуков, которые являются частыми триггерами, критически важна правильная настройка URL.

    • N8N_WEBHOOK_URL: Должен быть полным публичным URL вашего инстанса n8n (например, https://automation.yourcompany.com). Без этого вебхуки будут содержать неверные ссылки.
    • N8N_WEBHOOK_TEST_OVERRIDE: Для тестирования вебхуков на localhost можно установить N8N_WEBHOOK_TEST_OVERRIDE=https://temp.url.
    • Form Trigger: Для использования узла «Form Trigger» необходимо также корректно указать N8N_HOST и N8N_PROTOCOL.

    Масштабирование и производительность

    Для обработки большого количества рабочих процессов или тяжелых нагрузок требуется настройка параметров выполнения.

    Переменная Назначение Рекомендация
    EXECUTIONS_PROCESS Режим обработки выполнений: ‘main’ (в основном процессе) или ‘own’ (в отдельном). Для тяжелых workflow используйте ‘own’.
    EXECUTIONS_TIMEOUT Максимальное время выполнения одного workflow в миллисекундах. По умолчанию 3600000 (1 час). Уменьшите для критичных по времени процессов.
    QUEUE_BULL_REDIS_HOST Адрес Redis сервера для распределенной очереди задач. Обязателен для горизонтального масштабирования (запуска нескольких воркеров n8n).
    N8N_CONCURRENCY_LIMIT Максимальное количество параллельных выполнений на одном инстансе. Значение по умолчанию 10. Увеличивайте в зависимости от ресурсов CPU.

    Мониторинг и логирование

    Для диагностики проблем необходимо настроить сбор логов и метрик.

    • Уровень логирования: N8N_LOG_LEVEL=info (доступные уровни: error, warn, info, verbose, debug). Для отладки используйте debug.
    • Выход логов: N8N_LOG_OUTPUT=console или file. Для контейнеризованных сред обычно используется console.
    • Метрики: Установите N8N_METRICS=true для сбора метрик производительности. Метрики доступны по эндпоинту /metrics в формате Prometheus.

    Кастомизация и расширение

    N8n позволяет добавлять пользовательские узлы (nodes) и настраивать внешний вид.

    • Пользовательские узлы: Поместите кастомные узлы в директорию ~/.n8n/custom (при использовании Docker смонтируйте ее как том). Укажите путь через переменную N8N_CUSTOM_EXTENSIONS.
    • Цветовая схема и логотип: Используйте переменные N8N_THEME_* (например, N8N_THEME_LOGO, N8N_THEME_PRIMARY_COLOR) для брендирования интерфейса.
    • Отключение встроенных узлов: С помощью переменной N8N_DISABLE_PRODUCTION_NODES можно отключить узлы, помеченные как production, оставив только core-узлы для повышения безопасности.

Ответы на часто задаваемые вопросы (FAQ)

Как сбросить забытый пароль при базовой аутентификации?

Остановите n8n. Установите переменную окружения N8N_BASIC_AUTH_ACTIVE=false и перезапустите инстанс. После входа без пароля зайдите в настройки пользователя и установите новый пароль. Затем снова остановите n8n, верните N8N_BASIC_AUTH_ACTIVE=true и запустите заново.

Почему вебхуки не работают после выноса n8n за обратный прокси?

Наиболее вероятная причина — неверно заданная переменная N8N_WEBHOOK_URL. Она должна содержать полный публичный URL, по которому доступен ваш инстанс n8n (например, https://ваш-домен.com). Также убедитесь, что в настройках обратного прокси (Nginx/Apache) корректно передаются заголовки X-Forwarded-For и X-Forwarded-Proto.

Как перенести данные и рабочие процессы с SQLite на PostgreSQL?

1. Создайте дамп вашей текущей базы SQLite через интерфейс n8n (Settings -> Database -> Download Backup).
2. Настройте и запустите n8n с подключением к новой PostgreSQL БД (как описано выше).
3. В интерфейсе нового инстанса зайдите в Settings -> Database и используйте функцию «Upload Backup».
Важно: Шифрование учетных данных зависит от N8N_ENCRYPTION_KEY. Ключ должен быть идентичным на старом и новом инстансе для успешной расшифровки данных.

Как обновить n8n до новой версии при установке через Docker?

1. Остановите текущий контейнер: docker stop n8n.
2. Удалите его: docker rm n8n.
3. Получите новый образ: docker pull n8nio/n8n:latest (или конкретной версии).
4. Запустите контейнер снова, используя те же тома и переменные окружения. Все данные и workflow сохранятся, так как хранятся в смонтированном томе ~/.n8n.

Как ограничить доступ к n8n только из внутренней сети?

Есть два основных метода:
1. На уровне сети: Настройте брандмауэр (например, iptables, облачные Security Groups) так, чтобы порт 5678 (или порт обратного прокси) был доступен только с определенных IP-адресов.
2. На уровне n8n: Используйте переменную N8N_LISTEN_ADDRESS. Если установить значение 127.0.0.1, n8n будет принимать соединения только с локальной машины. Затем настройте обратный прокси-сервер (Nginx), который также будет доступен только из внутренней сети.

Почему запланированные workflow (Schedule Trigger) не срабатывают?

Проверьте следующие пункты:
1. Часовой пояс: Убедитесь, что переменная GENERIC_TIMEZONE установлена корректно (например, Europe/Moscow).
2. Активация workflow: Убедитесь, что workflow активирован (переключатель в правом верхнем углу редактора).
3. Время сервера: Проверьте системное время на сервере, где запущен n8n.
4. Статус инстанса: Убедитесь, что инстанс n8n работает бесперебойно. Для отказоустойчивости запланированных задач рассмотрите использование внешнего планировщика (например, cron), который будет вызывать ваш workflow через HTTP-запрос.

Добавить комментарий

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