opened image

n8n в продакшене: Повышаем надёжность и масштабируемость с Docker Swarm

 

n8n — мощная low-code-платформа автоматизации, построенная на Node.js. В режиме queue mode n8n позволяет масштабировать воркеры горизонтально, разделяя нагрузку между узлами, при этом основной интерфейс (UI) остаётся стабильным.

Для обеспечения отказоустойчивости и высокой производительности мы развернём n8n в продакшн-среде с использованием Docker Swarm — встроенной системы оркестрации от Docker.

 

 

⚠️ Обратите внимание: для использования n8n в кластерном режиме (с поддержкой worker’ов, масштабирования и высокой доступности) требуется лицензионный ключ. Если вы запускаете n8n как один контейнер без кластеризации — ключ не нужен, и система полностью бесплатна в рамках Community Edition.

 

Архитектура Production-стека

 

Сервисы:

  • n8n-main — интерфейс, API, вебхуки

  • n8n-worker — воркеры для выполнения задач

  • PostgreSQL — база данных

  • Redis — очередь задач

  • Caddy — HTTPS Reverse Proxy

 

Подготовка окружения

 

Если Docker и Docker Compose ещё не установлены, выполните:

 

apt install -y ca-certificates curl gnupg lsb-release
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
chmod a+r /etc/apt/keyrings/docker.gpg

echo \  
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
  https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | \
  tee /etc/apt/sources.list.d/docker.list > /dev/null

apt update
apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

curl -L https://github.com/docker/compose/releases/latest/download/docker-compose-linux-x86_64 \
  -o /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose

 

 

Шаг 1: Создание Docker Swarm кластера

 

На главной ноде:

 

docker swarm init --advertise-addr <IP_MANAGER>

 

После выполнения появится команда подключения других узлов вида:

 

docker swarm join --token <TOKEN> <IP_MANAGER>:2377

 

 

 

На каждой рабочей ноде:

 

docker swarm join --token <TOKEN> <IP_MANAGER>:2377

 

 

 

Проверка:

 

docker node ls

 

Вы должны увидеть список всех подключенных узлов и их роли (Leader, Worker, Reachable, и т.д.).

 

 

 

Для того что бы узнать токен, выполните команду на сервере main:

 

docker swarm join-token worker

 

 

 

 

 

Шаг 2: Создание overlay-сети

 

Выполняется один раз на manager-ноде:

 

docker network create --driver overlay n8nnet

 

 

Шаг 3: Подготовка конфигурационных файлов

 

Генерация ключа шифрования для N8N_ENCRYPTION_KEY добавить в docker-stack.yml:

 

openssl rand -base64 32

 

 

Файл .env

 

WEBHOOK_URL=https://your.website/
GENERIC_TIMEZONE=Europe/Kyiv

 

Файл Caddyfile

 

your.website {
  reverse_proxy n8n-main:5678
}

 

Замените your.website на ваш домен.

 

 

Шаг 4: Конфигурация docker-stack.yml

 

Создаём проект:

 

mkdir -p /opt/n8n && chown $USER /opt/n8n
cd /opt/n8n

 

Создайте файл docker-stack.yml:

 

services:
  postgres:
    image: postgres:15-alpine
    environment:
      POSTGRES_USER: n8n
      POSTGRES_PASSWORD: StrongDBPass123!
      POSTGRES_DB: n8n
    volumes:
      - pg_data:/var/lib/postgresql/data
    networks: [n8nnet]
    deploy:
      restart_policy: { condition: on-failure }

  redis:
    image: redis:7-alpine
    volumes:
      - redis_data:/data
    networks: [n8nnet]
    deploy:
      restart_policy: { condition: on-failure }

  n8n-main:
    image: n8nio/n8n:1.101.0 
    environment:
      DB_TYPE: postgresdb
      DB_POSTGRESDB_HOST: postgres
      DB_POSTGRESDB_PORT: 5432
      DB_POSTGRESDB_DATABASE: n8n
      DB_POSTGRESDB_USER: n8n
      DB_POSTGRESDB_PASSWORD: StrongDBPass123!
      QUEUE_BULL_REDIS_HOST: redis
      EXECUTIONS_MODE: queue
      EXECUTIONS_PROCESS: main
      N8N_BASIC_AUTH_ACTIVE: "true"
      N8N_BASIC_AUTH_USER: admin
      N8N_BASIC_AUTH_PASSWORD: StrongDBPass123!
      WEBHOOK_URL: https://your.website/
      GENERIC_TIMEZONE: Europe/Kyiv
      N8N_SECURE_COOKIE: "false"
      N8N_ENCRYPTION_KEY: 1/PGjvZVg599QtIXpXoR9kqnxiakhl4I8zRqBV9pnko=
      N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS: "true"
    volumes:
      - n8n_data:/home/node/.n8n
    networks: [n8nnet]
    deploy:
      replicas: 1
      placement:
        constraints: [node.role == manager]
      restart_policy: { condition: on-failure }

  n8n-worker:
    image: n8nio/n8n:1.101.0         
    command: worker
    environment:
      DB_TYPE: postgresdb
      DB_POSTGRESDB_HOST: postgres
      DB_POSTGRESDB_PORT: 5432
      DB_POSTGRESDB_DATABASE: n8n
      DB_POSTGRESDB_USER: n8n
      DB_POSTGRESDB_PASSWORD: StrongDBPass123!
      QUEUE_BULL_REDIS_HOST: redis
      EXECUTIONS_MODE: queue
      GENERIC_TIMEZONE: Europe/Kyiv
      N8N_ENCRYPTION_KEY: 1/PGjvZVg599QtIXpXoR9kqnxiakhl4I8zRqBV9pnko=
      DB_MIGRATIONS_DISABLED: "true"
      N8N_RUNNERS_ENABLED: "true"
      N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS: "true"
    networks: [n8nnet]
    deploy:
      replicas: 2           
      restart_policy: { condition: on-failure }

  caddy:
    image: caddy:alpine
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
    networks: [n8nnet]
    deploy:
      replicas: 1
      placement:
        constraints: [node.role == manager]
      restart_policy: { condition: on-failure }

volumes:
  n8n_data:
  pg_data:
  redis_data:

networks:
  n8nnet:
    external: true

 

 

 

Шаг 5: Развёртывание и проверка

 

Разворачиваем стек:

 

docker stack deploy -c docker-stack.yml n8n

 

Проверка:

 

docker stack services n8n
docker service ps n8n_n8n-worker

 

 

 Как видим развернулось 2 воркера как было указано в deploy.

 

  n8n-worker:
   ...
    networks: [n8nnet]
    deploy:
      replicas: 2   

 

 

Остановка:

 

docker stack rm n8n

 

 

Проверка сети:

 

docker network ls

 

 

Результат

 

  • n8n-main работает на manager-ноде

  • PostgreSQL и Redis также размещены на manager-ноде

  • n8n-worker масштабируемы по воркер-нодам

  • HTTPS настроен через Caddy

 

 

Заключение

 

Вы получили надёжную production-среду для n8n с разделением на UI и worker-процессы, базой данных PostgreSQL, очередью Redis и автоматическим HTTPS. Docker Swarm обеспечивает масштабируемость, отказоустойчивость и простое управление всем стеком.