Полное руководство по развертыванию n8n с помощью Docker Compose
N8n — это мощный инструмент автоматизации рабочих процессов с открытым исходным кодом, который позволяет соединять различные приложения, API и сервисы между собой. Развертывание n8n в контейнере Docker с использованием Docker Compose является предпочтительным методом для production-сред, так как обеспечивает изоляцию, простоту управления, воспроизводимость и масштабируемость. Данная статья детально рассматривает процесс создания и настройки файла docker-compose.yml для n8n, включая все необходимые конфигурации, переменные среды и смежные вопросы администрирования.
Базовый файл docker-compose.yml для n8n
Ниже представлен базовый, но полностью функциональный пример файла docker-compose.yml для запуска n8n. Этот конфигурационный файл определяет сервис n8n, его зависимости, тома для хранения данных и ключевые переменные среды.
version: '3.8'
services:
n8n:
image: n8nio/n8n:latest
container_name: n8n
restart: unless-stopped
ports:
- "5678:5678"
environment:
- N8N_PROTOCOL=https
- N8N_HOST=localhost
- N8N_PORT=5678
- N8N_EDITOR_BASE_URL=https://your-domain.com
- WEBHOOK_URL=https://your-domain.com
- GENERIC_TIMEZONE=Europe/Moscow
- N8N_ENCRYPTION_KEY=your_super_secret_encryption_key_change_me
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_DATABASE=n8n
- DB_POSTGRESDB_USER=n8n
- DB_POSTGRESDB_PASSWORD=your_secure_db_password
- N8N_METRICS=true
- N8N_METRICS_INCLUDE_DEFAULT_METRICS=true
- N8N_LOG_LEVEL=info
volumes:
- n8n_data:/home/node/.n8n
depends_on:
- postgres
networks:
- n8n_network
postgres:
image: postgres:15-alpine
container_name: n8n_postgres
restart: unless-stopped
environment:
- POSTGRES_USER=n8n
- POSTGRES_PASSWORD=your_secure_db_password
- POSTGRES_DB=n8n
volumes:
- postgres_data:/var/lib/postgresql/data
networks:
- n8n_network
volumes:
n8n_data:
postgres_data:
networks:
n8n_network:
driver: bridge
Детальный разбор конфигурации Docker Compose
Конфигурация состоит из двух сервисов: n8n (основное приложение) и postgres (база данных). Разберем каждый блок подробно.
Секция сервиса n8n
- image: Указывает официальный образ n8n с Docker Hub. Для стабильности рекомендуется использовать конкретную версию (например,
n8nio/n8n:1.0.0) вместо тегаlatest. - restart: unless-stopped: Гарантирует автоматический перезапуск контейнера при сбое или перезагрузке хоста, если остановка не была инициирована пользователем.
- ports: Пробрасывает порт 5678 контейнера на порт 5678 хоста. Это порт, на котором работает веб-интерфейс n8n.
- image: postgres:15-alpine: Используется легковесный Alpine-образ PostgreSQL 15.
- environment: Задает учетные данные для БД. Пароли должны быть сложными и уникальными.
- volumes: Тома гарантируют сохранность данных БД при пересоздании или удалении контейнера.
- volumes: Объявляет именованные тома
n8n_data(для загруженных файлов n8n, например, иконок) иpostgres_data(для файлов базы данных). Это предпочтительный способ хранения данных. - networks: Создает изолированную сеть
n8n_network, через которую контейнеры n8n и postgres могут общаться между собой по именам сервисов.
Критически важные переменные среды (environment) для n8n
Переменные среды управляют поведением n8n. Ниже представлена таблица с ключевыми переменными.
| Переменная | Описание | Обязательная | Пример значения |
|---|---|---|---|
| N8N_ENCRYPTION_KEY | Ключ для шифрования учетных данных в базе данных. Должен быть длиной 16, 24 или 32 символа. Должен быть изменен и сохранен в секрете. | Да | my_32_char_super_secure_key_abc |
| DB_TYPE | Тип базы данных. Для production всегда используйте postgresdb. |
Да | postgresdb |
| DB_POSTGRESDB_* | Набор переменных для подключения к PostgreSQL (HOST, PORT, DATABASE, USER, PASSWORD). HOST должен соответствовать имени сервиса в Compose (postgres). | Да | См. пример выше |
| N8N_PROTOCOL, N8N_HOST, N8N_PORT | Используются для генерации корректных URL-адресов для вебхуков. | Для вебхуков | https, your-domain.com, 5678 |
| WEBHOOK_URL | Полный базовый URL, по которому n8n доступен извне. Критически важен для работы входящих вебхуков. | Для вебхуков | https://n8n.yourcompany.com |
| N8N_EDITOR_BASE_URL | Базовый URL, который используется для ссылок в интерфейсе редактора. | Рекомендуется | https://n8n.yourcompany.com |
| GENERIC_TIMEZONE | Часовой пояс, используемый для планировщика (schedule node). | Нет | Europe/Moscow |
| N8N_METRICS | Включение сбора метрик (Prometheus). | Нет | true |
Секция сервиса PostgreSQL
Использование встроенной SQLite не рекомендуется для production. Сервис PostgreSQL обеспечивает надежное хранение рабочих процессов, учетных данных и данных выполнения.
Секции volumes и networks
Расширенная конфигурация для Production
Для промышленного использования базовую конфигурацию необходимо дополнить.
1. Использование образа с npm
Для установки пользовательских npm-пакетов внутри нодов используйте образ n8nio/n8n:latest или, лучше, его версионный аналог.
2. Настройка Reverse Proxy (Nginx)
N8n не должен быть доступен напрямую на порту 5678. Используйте Nginx или Traefik в качестве обратного прокси для обработки SSL/TLS.
Пример блока location в конфиге Nginx
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; }
При использовании reverse proxy переменные N8N_PROTOCOL, N8N_HOST, WEBHOOK_URL и N8N_EDITOR_BASE_URL должны отражать внешний адрес прокси (ваш домен).
3. Настройка внешнего хранилища файлов
По умолчанию загруженные файлы хранятся локально в контейнере. Для отказоустойчивости настройте S3-совместимое хранилище.
environment: - N8N_S3_ENDPOINT=s3.amazonaws.com - N8N_S3_BUCKET=your-n8n-bucket - N8N_S3_REGION=us-east-1 - N8N_S3_ACCESS_KEY_ID=your_access_key - N8N_S3_SECRET_ACCESS_KEY=your_secret_key
4. Настройка отправки электронной почты
Для системных уведомлений (сброс пароля, приглашения) настройте SMTP.
environment: - N8N_EMAIL_MODE=smtp - N8N_SMTP_HOST=smtp.gmail.com - N8N_SMTP_PORT=587 - N8N_SMTP_USER=your_email@gmail.com - N8N_SMTP_PASS=your_app_specific_password - N8N_SMTP_SENDER=your_email@gmail.com
Развертывание и основные команды управления
- Сохраните конфигурацию в файл
docker-compose.yml. - В том же каталоге выполните команду для запуска в фоновом режиме:
docker-compose up -d
- Проверьте логи:
docker-compose logs -f n8n
- Остановите сервисы:
docker-compose down
(Для удаления томов добавьте флаг
-v, но это уничтожит все данные). - Обновите образы до последних версий:
docker-compose pull && docker-compose up -d
Резервное копирование и восстановление
Резервное копирование сводится к сохранению двух компонентов:
- Данные PostgreSQL: Создайте дамп базы данных или скопируйте том
postgres_data.docker exec n8n_postgres pg_dump -U n8n n8n > n8n_backup_$(date +%Y%m%d).sql
- Файлы n8n: Скопируйте содержимое тома
n8n_data(обычно находится в/var/lib/docker/volumes/<project_name>_n8n_data).
Ответы на часто задаваемые вопросы (FAQ)
Как сбросить пароль администратора, если он утерян?
Подключитесь к контейнеру с базой данных и обновите запись в таблице пользователя. Пароль хранится в хэшированном виде, поэтому его нужно сгенерировать. Самый простой способ — запустить n8n с переменной среды N8N_RESET_ADMIN_PASSWORD=true (для версий n8n < 1.0) или использовать команду внутри контейнера n8n для генерации нового хэша (см. документацию n8n).
Как обновить n8n до новой версии?
Остановите стек, обновите образ в файле docker-compose.yml до нужной версии (например, n8nio/n8n:1.2.3), затем выполните:
docker-compose pull && docker-compose up -d
Перед обновлением всегда создавайте резервную копию базы данных.
Почему вебхуки не работают при доступе через домен?
Наиболее частая причина — неправильная настройка переменных среды, отвечающих за внешний URL. Убедитесь, что переменные WEBHOOK_URL, N8N_PROTOCOL, N8N_HOST и N8N_EDITOR_BASE_URL установлены корректно и указывают на ваш публичный домен, а не на localhost или внутренний IP-адрес.
Как увеличить производительность n8n?
- Используйте PostgreSQL вместо SQLite.
- Вынесите исполнение длительных workflow в отдельные процессы (Worker mode), настроив переменную
EXECUTIONS_PROCESSв значенииmainдля основного инстанса иworkerдля воркеров. - Настройте внешнюю очередь (например, Redis) для управления исполнениями.
- Мониторьте ресурсы (CPU, RAM) контейнера и выделяйте их достаточно.
Как организовать высокую доступность (High Availability)?
Для HA требуется развернуть несколько экземпляров n8n в режиме веб-интерфейс + воркер или только воркер. Все экземпляры должны быть подключены к одной и той же базе данных PostgreSQL. Для координации воркеров и управления очередями необходимо использовать внешний брокер сообщений (Redis). Это продвинутая конфигурация, требующая детального изучения документации n8n по масштабированию.
Где хранятся логи и как их читать?
Логи по умолчанию выводятся в stdout контейнера. Их можно просмотреть с помощью docker-compose logs n8n. Уровень детализации регулируется переменной N8N_LOG_LEVEL (значения: error, warn, info, debug). Для персистентного хранения логов настройте драйвер логирования Docker на отправку логов во внешнюю систему (например, ELK Stack или Loki).
Безопасно ли использовать образ latest?
Нет, для production-сред категорически не рекомендуется использовать тег latest, так как автоматическое обновление на следующую мажорную версию может привести к несовместимости. Всегда фиксируйте конкретную версию образа (например, n8nio/n8n:1.2.3). Обновление версии должно быть осознанным действием после тестирования.
Заключение
Развертывание n8n с помощью Docker Compose предоставляет надежный, воспроизводимый и легко управляемый фундамент для автоматизации бизнес-процессов. Ключевыми элементами успешной конфигурации являются: использование внешней PostgreSQL базы данных, корректная настройка переменных среды (особенно для шифрования и вебхуков), применение обратного прокси и настройка механизмов резервного копирования. Представленный в статье расширенный файл docker-compose.yml и разбор его компонентов служат готовой основой для production-развертывания, которую можно адаптировать под конкретные требования инфраструктуры и уровня нагрузки.
Добавить комментарий