Данное руководство является логическим продолжением основной статьи по продакшн-развёртыванию n8n с использованием Docker Swarm, PostgreSQL, Redis и Caddy. Если вы ещё не ознакомились с базовой инструкцией по установке и настройке кластера, рекомендуем сначала изучить её, так как в этом документе рассматриваются дополнительные возможности и оптимизации, предназначенные для более гибкой и устойчивой эксплуатации системы.
В этом руководстве рассматриваются:
Генерация самоподписанных SSL-сертификатов (если Let's Encrypt недоступен)
Определение, на каких узлах работают воркеры
Масштабирование n8n-worker (статическое и динамическое)
Быстрый чек-лист перед запуском
Дополнительные улучшения и 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.