opened image

n8n в Docker Swarm: сертификаты, масштабирование, безопасность и стабильность

 

 

Данное руководство является логическим продолжением основной статьи по продакшн-развёртыванию n8n с использованием Docker Swarm, PostgreSQL, Redis и Caddy. Если вы ещё не ознакомились с базовой инструкцией по установке и настройке кластера, рекомендуем сначала изучить её, так как в этом документе рассматриваются дополнительные возможности и оптимизации, предназначенные для более гибкой и устойчивой эксплуатации системы.

 

В этом руководстве рассматриваются:

  1. Генерация самоподписанных SSL-сертификатов (если Let's Encrypt недоступен)

  2. Определение, на каких узлах работают воркеры

  3. Масштабирование n8n-worker (статическое и динамическое)

  4. Быстрый чек-лист перед запуском

  5. Дополнительные улучшения и best practices:

    • Healthcheck для контейнеров

    • Ограничение ресурсов (CPU/RAM)

    • Привязка воркеров к конкретным узлам

    • Автообновление через Watchtower

    • Резервное копирование базы PostgreSQL

    • Мониторинг и оповещения

 

 

Самоподписанный SSL-сертификат (если Let's Encrypt недоступен)

 

Если по каким-либо причинам автоматическая выдача SSL-сертификата от Let's Encrypt невозможна (например, в закрытых сетях или при отсутствии публичного DNS), можно использовать самоподписанный сертификат.

 

Шаг 1: Генерация сертификата

 

mkdir -p ./certs
openssl req -x509 -nodes -days 365   -newkey rsa:2048   -keyout ./certs/selfsigned.key   -out ./certs/selfsigned.crt   -subj "/CN=your.website"

 

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

 

 

Шаг 2: Добавление монтирования в docker-stack.yml

 

Убедитесь, что у сервиса caddy в docker-stack.yml присутствует строка:

 

  - ./certs:/etc/caddy/certs

 

в docker-stack.yml в разделе caddy:

 

  caddy:
    image: caddy:alpine
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - ./certs:/etc/caddy/certs

 

 

 

 

И в Caddyfile укажите путь к самоподписанным сертификатам:

 

your.website {
  tls /etc/caddy/certs/selfsigned.crt /etc/caddy/certs/selfsigned.key
  reverse_proxy n8n-main:5678
}

 

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

 

 

Как узнать, на каком узле работает воркер?

 

Docker Swarm самостоятельно распределяет задачи по воркерам в зависимости от доступных ресурсов и ограничений placement.

 

Для просмотра состояния воркеров выполните:

 

docker service ps n8n_n8n-worker

 

 

 

 

Масштабирование n8n-worker в Docker Swarm

 

Вариант 1: Указание количества воркеров в docker-stack.yml

 

n8n-worker:
  deploy:
    mode: replicated
    replicas: 4

 

 

Вариант 2: Динамическое масштабирование вручную

 

docker service scale n8n_n8n-worker=6

 

 

 

Уменьшить:

 

docker service scale n8n_n8n-worker=2

 

 

Быстрый чек-лист (проверка перед запуском)

 

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

 

docker network ls | grep n8nnet

 

Если результат пустой, создайте overlay-сеть:

 

docker network create --driver overlay n8nnet

 

Развёртывание стека:

 

docker stack deploy -c docker-stack.yml n8n

 

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

 

docker service ls
docker service ps n8n_n8n-worker

 

 

 

 

Дополнительные рекомендации и best practices

 

1. Healthcheck для сервисов

 

healthcheck:
  test: ["CMD", "curl", "-f", "http://localhost:5678/healthz"]
  interval: 30s
  timeout: 10s
  retries: 3

 

2. Ограничения по ресурсам

 

deploy:
  resources:
    limits:
      cpus: '0.50'
      memory: 512M
    reservations:
      cpus: '0.25'
      memory: 256M

 

3. Привязка к конкретному узлу

 

placement:
  constraints:
    - node.hostname == worker-node-1

 

4. Watchtower — автоматическое обновление

 

  watchtower:
    image: containrrr/watchtower
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    command: --interval 300
    networks: [n8nnet]

 

5. Бэкапы PostgreSQL

 

docker exec -t <container_id> pg_dump -U n8n n8n > backup.sql

 

 

6. Мониторинг и алерты

  • Healthchecks.io, UptimeRobot или Prometheus + Alertmanager

  • Slack/webhook-интеграции при падении сервисов

 

 

Заключение

 

Это расширенное руководство дополняет базовую статью по установке n8n в Docker Swarm. Оно охватывает важные аспекты: работу без Let's Encrypt, масштабирование, мониторинг, безопасность и стабильность. Благодаря этим практикам вы можете построить более надёжную, предсказуемую и управляемую продакшн-инфраструктуру для автоматизации на базе n8n.