Конфигурация N8N: Полное руководство по настройке и управлению
N8n (pronounced «n-eight-n») — это инструмент автоматизации рабочих процессов с открытым исходным кодом, который использует визуальный редактор на основе узлов (nodes). Конфигурация системы является критически важным этапом для обеспечения стабильности, безопасности и масштабируемости развертывания. Данная статья детально рассматривает все аспекты конфигурации N8n, от базовых настроек до продвинутых сценариев.
Базовые принципы конфигурации N8n
N8n настраивается преимущественно через переменные окружения (environment variables). Это соответствует принципам 12-факторных приложений и позволяет гибко управлять настройками в разных средах (разработка, тестирование, продакшн). Основной файл конфигурации отсутствует; вместо этого все параметры задаются при запуске контейнера, в файле .env или через командную строку. Существует три основных способа развертывания: с использованием Docker (рекомендуемый), npm-пакетов или прямого запуска исходного кода.
Ключевые переменные окружения для конфигурации
Переменные окружения в N8n имеют префикс N8N_. Ниже представлена таблица наиболее важных из них, сгруппированных по категориям.
Категория: Базовые настройки и безопасность
| Переменная | Описание | Значение по умолчанию | Пример |
|---|---|---|---|
| N8N_PROTOCOL | Протокол для веб-интерфейса (http/https). | http | https |
| N8N_HOST | Хост, на котором работает N8n. | localhost | automation.yourcompany.com |
| N8N_PORT | Порт для веб-интерфейса. | 5678 | 443 |
| N8N_ENCRYPTION_KEY | Критически важная переменная. 32-символьный ключ для шифрования учетных данных. Должен быть одинаковым при всех перезапусках. | Генерируется случайно при первом запуске. | my-super-secret-encryption-key-32 |
| N8N_SECURITY_EXCLUDE_ENDPOINTS | Список эндпоинтов, исключенных из проверки аутентификации (через запятую). | healthz, webhook | healthz, webhook, status |
Категория: Аутентификация и пользователи
| Переменная | Описание | Значение по умолчанию | Пример |
|---|---|---|---|
| N8N_BASIC_AUTH_ACTIVE | Включает базовую HTTP-аутентификацию для всего интерфейса. | false | true |
| N8N_BASIC_AUTH_USER | Имя пользователя для базовой аутентификации. | — | admin |
| N8N_BASIC_AUTH_PASSWORD | Пароль для базовой аутентификации. | — | SecurePass123! |
| N8N_USER_MANAGEMENT_JWT_SECRET | Секрет для подписи JWT-токенов при включенном управлении пользователями. | Генерируется случайно. | your-jwt-signing-secret-key |
Категория: База данных и хранение данных
N8n поддерживает несколько баз данных для хранения рабочих процессов, учетных данных и информации о выполнении.
| Переменная | Описание | Значение по умолчанию | Пример |
|---|---|---|---|
| DB_TYPE | Тип СУБД: sqlite, postgresdb, mysqldb, mariadb. | sqlite | postgresdb |
| DB_POSTGRESDB_HOST | Хост PostgreSQL. | localhost | postgres-db |
| DB_POSTGRESDB_DATABASE | Имя базы данных. | n8n | n8n_production |
| DB_POSTGRESDB_USER | Пользователь БД. | root | n8n_user |
| DB_POSTGRESDB_PASSWORD | Пароль пользователя БД. | — | StrongDbPassword |
| N8N_DEFAULT_BINARY_DATA_MODE | Режим хранения бинарных данных (файлов): ‘default’ (в памяти), ‘filesystem’, ‘s3’. | default | filesystem |
| N8N_BINARY_DATA_STORAGE_PATH | Путь для хранения файлов при использовании режима ‘filesystem’. | /home/node/.n8n | /data/n8n/files |
Категория: Исполнение рабочих процессов (Executions)
| Переменная | Описание | Значение по умолчанию | Пример |
|---|---|---|---|
| EXECUTIONS_DATA_PRUNE | Включить автоматическое удаление старых данных об исполнении. | false | true |
| EXECUTIONS_DATA_MAX_AGE | Максимальный возраст (в часах) данных об исполнении перед удалением. | 168 | 336 (14 дней) |
| EXECUTIONS_DATA_PRUNE_TIMEOUT | Таймаут (в минутах) для задачи удаления старых данных. | 60 | 120 |
| N8N_PROCESS_WAIT_TIME | Максимальное время (в миллисекундах) ожидания завершения процесса при graceful shutdown. | 30000 | 60000 |
Категория: Масштабирование и режимы работы
N8n может работать в двух основных режимах, определяемых переменной N8N_DEPLOYMENT_TYPE:
- production (по умолчанию): Полнофункциональный режим с веб-интерфейсом и движком исполнения.
- worker: Режим «рабочего», который только исполняет рабочие процессы, полученные из очереди (например, Redis). Не имеет веб-интерфейса. Используется для горизонтального масштабирования.
| Переменная | Описание | Пример для режима Worker |
|---|---|---|
| N8N_DEPLOYMENT_TYPE | Тип развертывания: ‘production’ или ‘worker’. | worker |
| N8N_QUEUE_HEALTH_CHECK_ACTIVE | Включает health check для очереди в режиме worker. | true |
| EXECUTIONS_MODE | Режим запуска процессов: ‘regular’ (в собственном процессе), ‘queue’ (через очередь, например, Redis). | queue |
| N8N_REDIS_HOST | Хост Redis для очереди сообщений. | redis-server |
| N8N_REDIS_PORT | Порт Redis. | 6379 |
Практические примеры конфигурации
Пример 1: Базовый Docker-комpose файл для продакшн с PostgreSQL
Ниже приведен пример docker-compose.yml для запуска N8n с внешней базой данных PostgreSQL и базовой аутентификацией.
version: '3.8'
services:
n8n:
image: n8nio/n8n
container_name: n8n
restart: unless-stopped
ports:
- "5678:5678"
environment:
- N8N_PROTOCOL=https
- N8N_HOST=automation.example.com
- N8N_ENCRYPTION_KEY=your-32-char-encryption-key-keep-safe
- N8N_BASIC_AUTH_ACTIVE=true
- N8N_BASIC_AUTH_USER=admin
- N8N_BASIC_AUTH_PASSWORD=your_strong_password
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_DATABASE=n8n
- DB_POSTGRESDB_USER=n8n
- DB_POSTGRESDB_PASSWORD=db_password
- N8N_DEFAULT_BINARY_DATA_MODE=filesystem
- N8N_BINARY_DATA_STORAGE_PATH=/data/n8n/files
- EXECUTIONS_DATA_PRUNE=true
- EXECUTIONS_DATA_MAX_AGE=168
volumes:
- n8n_data:/home/node/.n8n
- n8n_files:/data/n8n/files
depends_on:
- postgres
postgres:
image: postgres:13-alpine
container_name: postgres
restart: unless-stopped
environment:
- POSTGRES_USER=n8n
- POSTGRES_PASSWORD=db_password
- POSTGRES_DB=n8n
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
n8n_data:
n8n_files:
postgres_data:
Пример 2: Конфигурация для горизонтального масштабирования (Main + Worker)
Для масштабирования необходимо разделить веб-интерфейс и движок исполнения. Основной инстанс (n8n_main) обрабатывает UI/API и ставит задачи в очередь Redis. Рабочие инстансы (n8n_worker_1, n8n_worker_2) берут задачи из очереди и исполняют их.
Основной сервис (Web-UI + Queue Producer)
n8n_main: image: n8nio/n8n environment: - N8N_DEPLOYMENT_TYPE=production - EXECUTIONS_MODE=queue - N8N_REDIS_HOST=redis - N8N_QUEUE_BULL_REDIS_HOST=redis - DB_TYPE=postgresdb... остальные настройки БД и безопасности
Сервис-воркер (Только исполнитель)
n8n_worker_1: image: n8nio/n8n environment: - N8N_DEPLOYMENT_TYPE=worker - EXECUTIONS_MODE=queue - N8N_REDIS_HOST=redis - N8N_QUEUE_BULL_REDIS_HOST=redis - N8N_QUEUE_HEALTH_CHECK_ACTIVE=true - DB_TYPE=postgresdb... настройки БД (такие же как у main)
Порт не публикуется, т.к. UI отсутствует
redis: image: redis:7-alpineОбщая БД PostgreSQL
Настройка вебхуков и обратных вызовов (Callbacks)
Для корректной работы вебхуков в продакшн-среде с обратным прокси (nginx, Apache, cloud load balancer) необходимо правильно настроить переменные, отвечающие за формирование URL.
N8N_PROTOCOL=httpsN8N_HOST=your-public-domain.comN8N_PORT=443(или не указывать, если 80/443)WEBHOOK_URL=https://your-public-domain.com/(может потребоваться, если обратный прокси меняет путь).
Также важно настроить доверенные прокси (trust proxy), если N8n находится за обратным прокси, используя переменную N8N_TRUSTED_PROXIES (например, N8N_TRUSTED_PROXIES=loopback, 172.18.0.1).
Управление пакетами сообщества (Community Nodes)
N8n позволяет устанавливать пользовательские узлы через npm. В Docker-окружении для этого необходимо смонтировать volume для папки /usr/local/lib/node_modules и установить пакеты при сборке или запуске.
Пример Dockerfile для установки пакетов
FROM n8nio/n8n USER root RUN npm install -g n8n-nodes-your-custom-package USER node
Или через переменную окружения при первом запуске: N8N_DISABLE_PRODUCTION_MAIN_PROCESS=true npm install n8n-nodes-custom.
Часто задаваемые вопросы (FAQ)
Как сбросить забытый пароль базовой аутентификации?
Пароль хранится в зашифрованном виде в базе данных. Самый простой способ — отключить аутентификацию, задав N8N_BASIC_AUTH_ACTIVE=false, перезапустить N8n, зайти без пароля, установить новый пароль через интерфейс настроек (Settings > User management), а затем снова включить переменную N8N_BASIC_AUTH_ACTIVE=true и перезапустить.
Почему вебхуки не работают после выноса N8n за обратный прокси (nginx)?
Наиболее вероятные причины:
- Неправильно заданы
N8N_PROTOCOL,N8N_HOST,N8N_PORT. Они должны соответствовать публичному URL, по которому клиенты обращаются к N8n. - Прокси не передает оригинальные заголовки (например,
X-Forwarded-Proto,X-Forwarded-Host). Убедитесь, что в конфигурации nginx есть директивыproxy_set_header. - Не настроены
N8N_TRUSTED_PROXIES. Добавьте IP-адрес вашего прокси в эту переменную.
Как выбрать между SQLite и PostgreSQL?
- SQLite: Подходит для тестирования, разработки или личного использования с небольшим объемом данных. Все данные хранятся в одном файле на диске. Не поддерживает одновременный доступ из нескольких инстансов N8n.
- PostgreSQL (рекомендуется для продакшн): Обязательна для любого развертывания с высокой доступностью, горизонтальным масштабированием (режим worker) или просто для надежного хранения данных в production. Обеспечивает целостность данных и параллельный доступ.
Как мигрировать данные с SQLite на PostgreSQL?
- Создайте резервную копию всех рабочих процессов через интерфейс N8n (Export All Workflows).
- Остановите N8n с SQLite.
- Настройте и запустите новый инстанс N8n с переменными окружения, указывающими на PostgreSQL.
- Импортируйте рабочие процессы через интерфейс.
- Учетные данные, история исполнений и настройки пользователей не переносятся автоматически. Для полной миграции требуется ручной перенос таблиц базы данных с использованием инструментов миграции.
Что делать, если появляется ошибка «Encryption key is missing or invalid»?
Ключ шифрования (N8N_ENCRYPTION_KEY) должен быть:
- Установлен явно в продакшн-среде (не оставляйте значение по умолчанию).
- Оставаться неизменным на протяжении всего жизненного цикла инстанса N8n.
- Иметь длину ровно 32 символа.
Если ключ потерян или изменен, все зашифрованные данные (учетные данные узлов) станут нечитаемыми. Их необходимо будет ввести заново. Сам ключ не хранится в БД, он используется только в оперативной памяти для шифрования/расшифровки.
Как оптимизировать производительность N8n при большом количестве рабочих процессов?
- Используйте PostgreSQL вместо SQLite.
- Включите регулярную очистку истории исполнений (
EXECUTIONS_DATA_PRUNE=true). - Для ресурсоемких или частых workflow рассмотрите режим масштабирования с отдельными worker-инстансами и очередью Redis.
- Настройте хранение бинарных данных (файлов) в файловой системе или S3, а не в памяти (
N8N_DEFAULT_BINARY_DATA_MODE=filesystem). - Увеличьте лимит памяти для контейнера/процесса Node.js.
Комментарии