N8n docker compose yml

Полное руководство по развертыванию 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.

    Критически важные переменные среды (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 обеспечивает надежное хранение рабочих процессов, учетных данных и данных выполнения.

    • image: postgres:15-alpine: Используется легковесный Alpine-образ PostgreSQL 15.
    • environment: Задает учетные данные для БД. Пароли должны быть сложными и уникальными.
    • volumes: Тома гарантируют сохранность данных БД при пересоздании или удалении контейнера.

    Секции volumes и networks

    • volumes: Объявляет именованные тома n8n_data (для загруженных файлов n8n, например, иконок) и postgres_data (для файлов базы данных). Это предпочтительный способ хранения данных.
    • networks: Создает изолированную сеть n8n_network, через которую контейнеры n8n и postgres могут общаться между собой по именам сервисов.

    Расширенная конфигурация для 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
    

    Развертывание и основные команды управления

    1. Сохраните конфигурацию в файл docker-compose.yml.
    2. В том же каталоге выполните команду для запуска в фоновом режиме:
      docker-compose up -d
    3. Проверьте логи:
      docker-compose logs -f n8n
    4. Остановите сервисы:
      docker-compose down

      (Для удаления томов добавьте флаг -v, но это уничтожит все данные).

    5. Обновите образы до последних версий:
      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-развертывания, которую можно адаптировать под конкретные требования инфраструктуры и уровня нагрузки.

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

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