---
title: 'Production Stack для n8n: Postgres + Redis + Queue Mode | Zomro'
description: ''
image: 'https://dx86q6oq7ry0e.cloudfront.net/uploads/blog/a48%40server-panel.net/2025/06/30/chatgpt-image-30-2025-23_55_42_q50.jpg'
---

![opened image]()

  * [Zomro](https://zomro.com/rus/)
  * [FAQ](https://zomro.com/rus/blog/faq/)
  * Production Stack для n8n: Postgres + Redis + Queue Mode 



# Production Stack для n8n: Postgres + Redis + Queue Mode

08-06-2025

![](https://dx86q6oq7ry0e.cloudfront.net/uploads/blog/a48%40server-panel.net/2025/06/30/chatgpt-image-30-2025-23_55_42_q50.jpg)

Когда число воркфлоу зашкаливает, а каждая секунда простоя обходится дорого, «песочницы» на SQLite становится мало. Продакшн требует:

  * устойчивого к сбоям хранилища (Postgres),

  * брокера очередей для распараллеливания задач (Redis),

  * возможности горизонтально масштабировать воркеры (Queue Mode).




Ниже приведён лаконичный, но полный рецепт установки такого стека в Docker Compose. Руководство рассчитано на системных администраторов, которые отвечают не только за «чтоб работало», но и за SLA, бэкапы и мониторинг.

### Почему Postgres + Redis?

  * **Postgres** обеспечивает журналируемые транзакции, миграции схемы и «горячие» бэкапы через `pg_dump`.

  * **Redis** в роли движка BullMQ хранит очереди, позволяя равномерно распределять нагрузку между несколькими воркерами и мгновенно восстанавливаться после перезапуска.

  * **Queue Mode** («EXECUTIONS_MODE=queue») разделяет UI-процесс и воркеры, исключая узкое место single-thread NodeJS.




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

### Аппаратные требования

Ресурс | Минимум | Рекомендовано  
---|---|---  
CPU | 2 vCPU | 4–8 vCPU  
RAM | 4 ГиБ | 8–16 ГиБ  
Диск | 20 ГиБ | 50 ГиБ+ SSD  
Сеть | 100 Мбит | 1 Гбит  
  
### Установка Docker
    
    
    
     
    
    
    mkdir -p /opt/n8n && sudo chown $USER /opt/n8n
    cd /opt/n8n
    
    # Устанавливаем 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" | \
      sudo 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 && sudo chmod +x /usr/local/bin/docker-compose
    
    
    
    
     

**Сгенерируй ключ** (если у тебя ещё его нет):
    
    
     
    
    
    openssl rand -base64 32

Пример:
    
    
     
    
    
    J4KFz+WkJDJcPf4vEyRyM4EVuPu7z33fIQF9vN84dNY=

Оформляем `.env `с ключом:
    
    
    N8N_VERSION=1.101.0
    WEBHOOK_URL=https://your.website/
    GENERIC_TIMEZONE=Europe/Kyiv
    
    # Auth
    N8N_BASIC_AUTH_USER=admin
    N8N_BASIC_AUTH_PASSWORD=StrongDBPass123!
    
    # DB
    POSTGRES_USER=n8n
    POSTGRES_PASSWORD=StrongDBPass123!
    POSTGRES_DB=n8n
    
    # Queue UI-процесс
    EXECUTIONS_PROCESS=main
    
    N8N_ENCRYPTION_KEY=J4KFz+WkJDJcPf4vEyRyM4EVuPu7z33fIQF9vN84dNY=
    
    

### Production `docker-compose.yml`
    
    
     
    
    
    services:
      postgres:
        image: postgres:15-alpine
        restart: unless-stopped
        environment:
          - POSTGRES_USER=${POSTGRES_USER}
          - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
          - POSTGRES_DB=${POSTGRES_DB}
        volumes:
          - pg_data:/var/lib/postgresql/data
        networks:
          - n8nnet
    
      redis:
        image: redis:7-alpine
        restart: unless-stopped
        volumes:
          - redis_data:/data
        networks:
          - n8nnet
    
      n8n-main:
        image: n8nio/n8n:${N8N_VERSION}
        depends_on: [postgres, redis]
        restart: unless-stopped
        environment:
          - DB_TYPE=postgresdb
          - DB_POSTGRESDB_HOST=postgres
          - DB_POSTGRESDB_PORT=5432
          - DB_POSTGRESDB_DATABASE=${POSTGRES_DB}
          - DB_POSTGRESDB_USER=${POSTGRES_USER}
          - DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
          - QUEUE_BULL_REDIS_HOST=redis
          - EXECUTIONS_MODE=queue
          - EXECUTIONS_PROCESS=${EXECUTIONS_PROCESS}
          - N8N_BASIC_AUTH_ACTIVE=true
          - N8N_BASIC_AUTH_USER=${N8N_BASIC_AUTH_USER}
          - N8N_BASIC_AUTH_PASSWORD=${N8N_BASIC_AUTH_PASSWORD}
          - WEBHOOK_URL=${WEBHOOK_URL}
          - GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
          - N8N_SECURE_COOKIE=true
          - N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
        volumes:
          - ./n8n_data:/home/node/.n8n
        networks:
          - n8nnet
    
      n8n-worker:
        image: n8nio/n8n:${N8N_VERSION}
        depends_on: [postgres, redis]
        restart: unless-stopped
        command: worker
        environment:
          - DB_TYPE=postgresdb
          - DB_POSTGRESDB_HOST=postgres
          - DB_POSTGRESDB_PORT=5432
          - DB_POSTGRESDB_DATABASE=${POSTGRES_DB}
          - DB_POSTGRESDB_USER=${POSTGRES_USER}
          - DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
          - QUEUE_BULL_REDIS_HOST=redis
          - EXECUTIONS_MODE=queue
          - GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
          - N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
        networks:
          - n8nnet
    
      caddy:
        image: caddy:alpine
        restart: unless-stopped
        ports:
          - "80:80"
          - "443:443"
        volumes:
          - ./Caddyfile:/etc/caddy/Caddyfile
        networks:
          - n8nnet
    
    volumes:
      n8n_data:
      pg_data:
      redis_data:
    
    networks:
      n8nnet:

Создайте файл `Caddyfile`:
    
    
     
    
    
    your.website {
      reverse_proxy n8n-main:5678
    }
    

где `your.website` \- ваш домен A-запись которого уже указывает на ваш сервер.

Запуск:  

    
    
    docker compose up -d

![](https://dx86q6oq7ry0e.cloudfront.net/uploads/blog/a48%40server-panel.net/2025/07/01/11_q50.jpg)

после чего:
    
    
     
    
    
    docker compose ps          # все роли должны быть healthy
    docker compose logs -f n8n-main | grep "Queue initialized" 
    

![](https://dx86q6oq7ry0e.cloudfront.net/uploads/blog/a48%40server-panel.net/2025/07/01/10_vljMn5p_q50.jpg)

### Горизонтальное масштабирование воркеров

Добавление новых воркеров банально:
    
    
     
    
    
    docker compose up -d --scale n8n-worker=4
    

## Что это даёт на практике

Вы используете **режим очередей (`queue`) в n8n**, а значит:

  * `n8n-main` — это **UI-процесс** , он **только принимает задачи и пишет их в Redis**

  * `n8n-worker` — это **исполнитель** , он **берёт задачи из Redis и выполняет их**




По умолчанию запускается один `n8n-worker`. А если вы масштабируете:
    
    
     
    
    
    --scale n8n-worker=4

то запускаются **4 независимых контейнера** , каждый из которых:

  * подключается к Redis,

  * берёт задачи из очереди,

  * параллельно обрабатывает воркфлоу.




Результат:

  * Повышается **пропускная способность** системы.

  * Уменьшается **время выполнения параллельных задач**.

  * Можно **разгрузить главный контейнер UI** , особенно под нагрузкой.




## Пример использования

  * У вас 100+ задач в очереди одновременно.

  * Один воркер обрабатывает их последовательно и не справляется.

  * Вы добавляете `--scale n8n-worker=4` → 4 задачи могут обрабатываться **одновременно**.




## Важно знать

  * Все воркеры используют **одну Redis-очередь** и **одну базу данных**.

  * Не стоит масштабировать `n8n-main`, только `n8n-worker`.

  * Если нужна высокая надёжность — можно масштабировать воркеры на **разные сервера** (через Docker Swarm, Kubernetes и т.д.).




HTTPS и обратный прокси

Для продакшна обязательно прячем порт 5678 за TLS. Два варианта:

  * **Traefik** (автоматические сертификаты Let’s Encrypt).

  * **Nginx** (контейнер или пакет).




Пример блока Nginx:
    
    
     
    
    
    
    server {
      listen 443 ssl http2;
      server_name n8n.example.com;
    
      ssl_certificate     /etc/letsencrypt/live/n8n.example.com/fullchain.pem;
      ssl_certificate_key /etc/letsencrypt/live/n8n.example.com/privkey.pem;
    
      location / {
        proxy_pass http://n8n-main:5678;
        proxy_set_header Host $host;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
      }
    
      location ^~ /webhook/ {
        proxy_pass http://n8n-main:5678;
        proxy_set_header Host $host;
      }
    }
    

### Мониторинг и бэкапы

  * **Пруф-жизнь** : health-check контейнеров + алерт, если `queue_last_failed > 0`.

  * **Grafana/Loki** : отдельная стэк-композиция для логов.

  * **Postgres** : `pg_dumpall | gzip > $(date +%F)_n8n.sql.gz` ежедневно.

  * **n8n_home** : `tar -czf n8n_files.tgz /home/node/.n8n` ежедневно.

  * Храните резервные копии off-site или в S3-совместимом бакете.




### Безопасность продакшн-инстанции

  1. Скрыть Postgres :5432 и Redis :6379 во внутренней Docker-сети.

  2. Включить двухфакторную авторизацию у внешних OAuth-сервисов, используемых в нодах.

  3. Регулярно пересматривать разрешения API-токенов в воркфлоу.

  4. Ограничить доступ к UI.




### Заключение

Production Stack на Postgres + Redis + Queue Mode превращает n8n из удобного «автоматизатора на коленке» в зрелый сервис, выдерживающий высокую нагрузку и легко восстанавливающийся после сбоев. Теперь у вас:

  * транзакционная БД с точкой восстановления,

  * брокер очередей для параллельных задач,

  * масштабируемые воркеры,

  * защита HTTPS и централизованное логирование.




Внедряйте best-practice-бэкапы, мониторинг и автоматические обновления, и ваша автоматизация будет столь же надёжна, как и бизнес-процессы, которые она обслуживает.

### 

Похожие статьи

[Настройка FastCGI Microcache в Nginx PHP-FPM](https://zomro.com/rus/blog/faq/227-nastrojka-fastcgi-microcache-v-nginx-php-fpm) [Как установить Docker на Centos 7](https://zomro.com/rus/blog/faq/287-kak-ustanovit-docker-na-centos-7) [Установка ffmpeg-php на Centos 7 и Ubuntu 20](https://zomro.com/rus/blog/faq/345-install-ffmpeg-php-on-centos-7-and-ubuntu-20) [VestaCP: Как отключить или изменить количество резервных копий (бэкапов)](https://zomro.com/rus/blog/faq/71-vestacp-kak-otklyuchit-ili-izmenit-kolichestvo-rezervnyh-kopiy-bekapov) [WordPress Multisite: Как создать и управлять несколькими сайтами из одной админ панели](https://zomro.com/rus/blog/faq/322-wordpress-multisite-how-to-create-and-manage-multiple-sites-from-one-admin-panel)

[ Сервер для Forex от €7.95/мес ](/rus/server-for-forex)
