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 обеспечивает масштабируемость, отказоустойчивость и простое управление всем стеком.