Перейти к содержанию

Environment variables n8n: production-настройка self-hosted

Обновлено: 2026-05-30

Открыть мой план

ENV variables в n8n — это не просто .env-файл для запуска контейнера. Это контракт production-окружения: какой публичный адрес видят webhooks, где лежит база, как шифруются credentials, кто выполняет jobs и сколько истории хранит инстанс.

Принципы production ENV

Хорошая конфигурация n8n задаёт критичные параметры явно и одинаково для всех компонентов, которые участвуют в выполнении workflows. Main process, workers и webhook-процессы не должны спорить о базе, Redis, encryption key, timezone и публичном URL. Если часть переменных “по умолчанию”, администратор не понимает, что именно будет восстановлено после аварии.

ENV не должен быть свалкой секретов в репозитории. Безопасная практика: шаблон `.env.example` хранится в version control, реальные значения находятся в secret manager или защищённом хранилище, а runbook объясняет, где их получить и кто имеет доступ.

Обязательные группы переменных

ГруппаЧто задаётЧто проверить
Public URLN8N_HOST, N8N_PROTOCOL, WEBHOOK_URLвнешний webhook приходит на правильный домен
SecurityN8N_ENCRYPTION_KEY, basic/auth или SSO-настройкиcredentials открываются после рестарта
DatabaseDB_TYPE, DB_POSTGRESDB_HOST, DB_POSTGRESDB_DATABASE, user, passwordn8n пишет executions в ожидаемый Postgres
QueueEXECUTIONS_MODE, QUEUE_BULL_REDIS_*main и workers видят один Redis
RetentionEXECUTIONS_DATA_PRUNE, MAX_AGE, SAVE_* flagsистория не заполняет диск и базу

Public URL и WEBHOOK_URL

Для SEO и production-эксплуатации важно не путать внутренний адрес контейнера и внешний адрес, по которому сервисы вызывают webhook. WEBHOOK_URL должен указывать на публичный HTTPS-домен за reverse proxy. Если он отличается от реального домена, внешние сервисы могут сохранить неправильный callback URL, а в UI будут отображаться некорректные ссылки.

После изменения public URL проверьте не только UI, но и реальный внешний запрос: отправьте тестовое событие из сервиса, который будет использовать workflow. Локальный curl внутри сервера не доказывает, что DNS, proxy, TLS и firewall работают для внешнего мира.

Database ENV и Redis ENV

Для Postgres задавайте тип базы, хост, порт, database name, пользователя и пароль явно. Не смешивайте миграцию базы с включением queue mode. Сначала добейтесь стабильной записи executions в Postgres, затем подключайте Redis и workers. Для queue mode проверьте, что main и worker используют одинаковые DB_* и QUEUE_BULL_REDIS_* значения; иначе execution может попасть в очередь, которую никто не обрабатывает.

# пример структуры, не копируйте значения без адаптации
N8N_PROTOCOL=https
N8N_HOST=automation.example.com
WEBHOOK_URL=https://automation.example.com/
N8N_ENCRYPTION_KEY=stored-in-secret-manager
DB_TYPE=postgresdb
DB_POSTGRESDB_HOST=postgres
DB_POSTGRESDB_DATABASE=n8n
EXECUTIONS_MODE=queue
QUEUE_BULL_REDIS_HOST=redis
EXECUTIONS_DATA_PRUNE=true

Encryption key и секреты

N8N_ENCRYPTION_KEY должен быть создан один раз для production-инстанса и сохранён так же внимательно, как backup базы. При потере ключа зашифрованные credentials в базе нельзя нормально использовать после восстановления. Не генерируйте новый key при каждом деплое, не храните его в README, примерах JSON или истории shell-команд.

Preflight checklist ENV

  • Все обязательные переменные заданы в одном источнике правды, а не разбросаны между compose, shell и панелью хостинга.
  • Main, webhook и worker контейнеры получают одинаковые DB, Redis, timezone и encryption key.
  • WEBHOOK_URL проверен внешним запросом через HTTPS.
  • Секреты не попали в репозиторий, build logs, search index или LLM markdown.
  • После изменения ENV выполнен smoke-test: UI, credential test, manual execution, webhook, schedule и queue worker.

Типичные ошибки ENV n8n

  • использовать localhost для базы или Redis внутри Docker Compose, хотя контейнеры видят друг друга по service name;
  • поменять encryption key при переносе и решить, что сломался Postgres;
  • включить queue mode только на main process, но забыть worker;
  • оставить WEBHOOK_URL от staging на production-домене;
  • публиковать реальные secrets в обучающих статьях, issue, чатах и скриншотах.

ENV-конфигурация должна изменяться так же аккуратно, как код. Минимальный процесс: diff старого и нового значения без раскрытия секретов, pre-flight проверка, restart, smoke-test webhook и запись результата. Если после изменения выросли 401, 500 или connection refused, откат выполняется на прежний набор переменных, а не на память администратора.

Change control для ENV

Отдельно проверьте переменные, которые нельзя менять без миграционного окна: N8N_ENCRYPTION_KEY, параметры базы, WEBHOOK_URL, queue mode и настройки binary data. Для каждой такой переменной должен быть владелец и причина изменения. Если изменение связано с секретом, сразу планируйте ротацию зависимых credentials.

Перед любым изменением переменных окружения сделайте короткий audit: где хранится текущий .env, кто имеет доступ, какой файл реально подключён контейнером и какие переменные переопределяются на уровне платформы. Частая ошибка — править один файл, а production использует другой источник значений. В runbook укажите команду проверки активной конфигурации и способ безопасного отката.

Audit ENV перед изменением

Критерий готовности

ENV-конфигурация готова к production, если она воспроизводима, документирована, проверена внешним webhook, не раскрывает secrets и позволяет восстановить n8n вместе с credentials. Следующий администратор должен понять источник каждой переменной без устных пояснений автора установки.

Что читать дальше

Для короткой практической версии откройте ENV-переменные n8n. Для прокси и домена проверьте n8n за Nginx. Если вы включаете queue mode, переходите к Redis для n8n и масштабированию workers.