Размещение n8n в контейнерах Docker обеспечивает изоляцию зависимостей, простое масштабирование и беспроблемные обновления, а панель управления Hestia CP берёт на себя заботу о веб‑хостинге, SSL‑сертификатах и резервном копировании. В этой инструкции мы последовательно развернём Docker‑окружение, установим n8n через Docker Compose и подключим его к фронтенду Nginx, управляемому Hestia CP.
Зачем сочетать n8n + Docker + Hestia CP
n8n — мощный инструмент автоматизации (iPaaS), который удобно работать в контейнере.
Docker Compose изолирует сервисы (PostgreSQL, Redis, n8n-web, n8n-worker) и упрощает обновление.
Hestia CP закрывает администрирование доменов, почты и SSL, а мы используем её Nginx-фронт вместо того, чтобы публиковать контейнер напрямую.
Предварительные требования
Компонент | Минимальная версия | Комментарий |
---|---|---|
Ubuntu 22.04 LTS | – | Проверенные пакеты Docker + systemd |
Hestia CP | 1.8.x | Включён Nginx + Apache (proxy) |
Docker Engine | ≥ 24 | sudo apt-get install docker-ce docker-ce-cli containerd.io |
Compose plugin | ≥ 2.x | sudo apt-get install docker-compose-plugin |
Домен | n8n.example.com | A-/AAAA-запись на IP вашего VPS |
Часть 1. Установка Docker и Docker Compose
Целевая ОС: Ubuntu 22.04 LTS (рекомендована Hestia CP ≥ 1.8)
Подготовьте репозиторий Docker CE.
sudo apt update && sudo apt install -y \
ca-certificates curl gnupg lsb-release
# Каталог для ключей APT
sudo install -m 0755 -d /etc/apt/keyrings
# Добавляем официальный GPG‑ключ
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo 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
Установите движок Docker и дополнительные плагины.
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io \
docker-buildx-plugin docker-compose-plugin
Docker Compose v2 теперь поставляется как плагин (docker compose
). Если вам всё ещё нужен самостоятельный бинарник v1, скачайте его отдельно:
sudo 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
Добавьте пользователя в группу docker (необязательно, но удобно).
sudo usermod -aG docker $USER
newgrp docker # применить изменения сразу
Проверьте установку.
docker --version # Docker Engine
docker compose version # Compose v2 plugin
Вы должны увидеть актуальные версии без ошибок.
Часть 2. Подготовка проекта n8n
Следующая структура папок позволит легко бэкапить данные и обновляться без простоев:
/opt/n8n/
├── docker-compose.yml # состав сервисов
├── .env # переменные окружения (защищённые)
└── volumes/ # постоянные данные
├── pg_data/
├── redis_data/
└── n8n_data/
Создайте каталог и файл переменных
mkdir -p /opt/n8n/volumes
chown -R $USER:$USER /opt/n8n
cd /opt/n8n
vim .env
chmod 600 .env
Создаем .env
# Версия n8n
N8N_VERSION=1.101.0
# Внешний URL (обязательно `/` в конце)
WEBHOOK_URL=https://n8n.example.com/
GENERIC_TIMEZONE=Europe/Kyiv
# Базовая авторизация
N8N_BASIC_AUTH_USER=admin
N8N_BASIC_AUTH_PASSWORD=<СЛУЧАЙНЫЙ_ПАРОЛЬ>
# Postgres
POSTGRES_USER=n8n
POSTGRES_PASSWORD=<СЛУЧАЙНЫЙ_ПАРОЛЬ>
POSTGRES_DB=n8n
# Очереди и шифрование
N8N_RUNNERS_ENABLED=true
OFFLOAD_MANUAL_EXECUTIONS_TO_WORKERS=true
N8N_ENCRYPTION_KEY=$(openssl rand -base64 32)
Подготовьте 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: docker.n8n.io/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
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}
N8N_HOST: n8n.example.com
N8N_PORT: 5678
N8N_RUNNERS_ENABLED: "true"
OFFLOAD_MANUAL_EXECUTIONS_TO_WORKERS: "true"
N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS: "true"
volumes:
- n8n_data:/home/node/.n8n
ports:
- "127.0.0.1:5678:5678" # доступ только с localhost
networks: [n8nnet]
n8n-worker:
image: docker.n8n.io/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}
N8N_RUNNERS_ENABLED: "true"
N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS: "true"
networks: [n8nnet]
volumes:
pg_data:
redis_data:
n8n_data:
networks:
n8nnet:
Запуск сервисов
cd /opt/n8n
docker compose pull # Скачать (или обновить) образы
docker compose up -d # Запустить в фоне
docker compose logs -f n8n-main # Следить за стартом
Проверка:
docker compose ps # все контейнеры должны быть в состоянии Up
Часть 3. Интеграция с Hestia CP / Nginx
Web → Add Web Domain → укажите
n8n.example.com
, включите «Enable SSL» и «Force SSL».Сгенерируйте сертификат Let’s Encrypt.
В панели Hestia перейдите Web → Edit → «SSL Certificates» и убедитесь, что ключи появились.
Откройте интерфейс по адресу
https://n8n.example.com
— браузер запросит логин и пароль Basic Auth, затем загрузится UI n8n.
Шаблон Nginx для проксирования
Создайте кастомный шаблон, чтобы при обновлениях Hestia не перезаписала конфиг:
sudo mkdir -p /usr/local/hestia/data/templates/web/nginx/n8n
sudo vim /usr/local/hestia/data/templates/web/nginx/n8n/n8n.tpl # HTTP
sudo vim /usr/local/hestia/data/templates/web/nginx/n8n/n8n.stpl # HTTPS
Содержимое n8n.stpl
(SSL-вариант):
server {
listen %ip%:%ssl_port% ssl;
server_name %domain_idn%;
ssl_certificate %ssl_pem%;
ssl_certificate_key %ssl_key%;
include %home%/%user%/conf/web/%domain%/nginx.hsts.conf*;
# WebSocket & HTTP
location / {
proxy_pass http://127.0.0.1:5678;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_read_timeout 86400;
}
# Скрываем служебные файлы
location ~ /\.(?!well-known\/|file) { deny all; }
location /error/ {
alias %docroot%/document_errors/;
}
}
Важно: HTTP-шаблон (
n8n.tpl
) может просто принудительно переадресовать на HTTPS (include nginx.forcessl.conf*;
).
Примените шаблон в панели Hestia (Web → Edit Web Domain → Advanced Options → Backend Template).
Перезапустите стек Hestia, чтобы подхватить новый шаблон:
systemctl restart hestia
Заключение
Связка Hestia CP + Docker Compose даёт чистое разделение ролей:
Hestia отвечает за HTTP(S), SSL, почту и удобную панель для разработчика.
Docker — за «живучие» сервисы (Postgres, Redis, n8n-main, n8n-worker), которые можно масштабировать, обновлять и бэкапить без риска тронуть окружение системы.
Следуя шагам выше, вы получите надёжную, масштабируемую и безопасную установку n8n, готовую обслуживать как тестовые прототипы, так и продакшен-автоматики.