Устанавливаем n8n в Docker с HAProxy: Понятное руководство для начинающих
Опубликовано 02.07.2025
Привет, друзья! Сегодня мы погрузимся в мир автоматизации и развернем n8n — мощный инструмент для создания рабочих процессов. Мы установим его в Docker, а в качестве «ворот» в интернет будем использовать надежный реверс-прокси HAProxy.
Это руководство создано специально для новичков. Мы пойдем по шагам, объясняя каждую команду, чтобы вы не только сделали, но и поняли, как всё работает.
Зачем вообще нужен HAProxy?
Можно было бы просто открыть порты n8n в интернет, так? Да, но это небезопасно и неудобно. HAProxy выступит в роли охранника и диспетчера:
- Безопасность (SSL/TLS): Он будет обрабатывать HTTPS-запросы, шифруя трафик между пользователем и вашим сервером.
- Единая точка входа: Все запросы на ваш домен будут приходить на HAProxy, а он уже будет решать, какому приложению их передать. Это удобно, если вы захотите добавить на этот же сервер другие сервисы.
- Гибкость: HAProxy — невероятно мощный инструмент, и освоив его сейчас, вы сможете в будущем настраивать сложные правила и балансировку нагрузки.
Что нам понадобится? ✅
- Сервер с Ubuntu/Debian: Подойдет любой виртуальный или выделенный сервер.
- Установленные Docker и Docker Compose: Это наша основная рабочая среда.
- Доменное имя: Оно должно быть привязано к IP-адресу вашего сервера (через A-запись в настройках DNS).
- SSH-доступ к серверу с правами
sudo
.
Шаг 1: Подготовка сервера и структуры проекта
Сначала убедимся, что система обновлена, и создадим папки для нашего проекта.
Обновите пакеты:
sudo apt update && sudo apt upgrade -y
Проверьте версии Docker:
docker --version docker compose version
Если команды вернули версии, всё отлично. Если нет — их нужно установить по официальной документации.
Создайте каталог для проекта: Мы будем хранить все файлы в одном месте.
mkdir ~/n8n-project cd ~/n8n-project
Создайте подкаталоги: Один для данных n8n, другой для конфигурации HAProxy.
mkdir -p ./n8n-data mkdir -p ./haproxy
Шаг 2: Создание файла docker-compose.yml
Это главный файл, который описывает, как Docker должен запускать наши приложения (сервисы). Создайте файл docker-compose.yml
в папке ~/n8n-project
и добавьте в него этот код.
⚠️ Важно: Замените n8n.ВАШ_ДОМЕН.com
, ВАШ_ЛОГИН
и ВАШ_СУПЕР_ПАРОЛЬ
на ваши реальные данные.
version: '3.8'
services:
n8n:
image: n8nio/n8n
container_name: n8n
restart: unless-stopped
ports:
- "127.0.0.1:5678:5678" # Открываем порт только для HAProxy внутри сервера
environment:
- N8N_BASIC_AUTH_ACTIVE=true
- N8N_BASIC_AUTH_USER=ВАШ_ЛОГИН # 👈 Замените
- N8N_BASIC_AUTH_PASSWORD=ВАШ_СУПЕР_ПАРОЛЬ # 👈 Замените
- WEBHOOK_URL=https://n8n.ВАШ_[ДОМЕН.com/](https://ДОМЕН.com/)
- N8N_HOST=n8n.ВАШ_ДОМЕН.com # 👈 Замените
- N8N_PORT=5678
- N8N_PROTOCOL=https
- NODE_ENV=production
volumes:
- ./n8n-data:/home/node/.n8n # Привязываем папку для хранения данных n8n
networks:
- n8n_network
haproxy:
image: haproxy:2.8 # Используем официальный образ
container_name: haproxy
restart: unless-stopped
ports:
- "80:80" # Для HTTP и получения сертификата
- "443:443" # Для HTTPS
volumes:
- ./haproxy:/usr/local/etc/haproxy:ro # :ro означает "только для чтения"
networks:
- n8n_network
depends_on: # Запускаем HAProxy только после n8n
- n8n
networks:
n8n_network:
driver: bridge
💡 Ключевые моменты:
ports: - "127.0.0.1:5678:5678"
: Мы сделали порт n8n доступным только внутри сервера. Никто извне не сможет подключиться к нему напрямую, только через HAProxy.volumes: - ./n8n-data:/home/node/.n8n
: Мы «пробрасываем» папкуn8n-data
с нашего сервера внутрь контейнера. Так все ваши рабочие процессы и настройки сохранятся, даже если контейнер будет удален или обновлен.
Шаг 3: Настройка HAProxy
Теперь настроим нашего «охранника». Создайте файл haproxy.cfg
в папке ~/n8n-project/haproxy/
и добавьте в него эту базовую конфигурацию.
⚠️ Важно: Пока мы не будем включать SSL/HTTPS. Наша цель — сначала запустить всё по HTTP, получить сертификат, и только потом включить шифрование.
global
daemon
log stdout local0
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5s
timeout client 50s
timeout server 50s
frontend http_front
bind *:80
acl host_n8n hdr(host) -i n8n.ВАШ_ДОМЕН.com # 👈 Замените
use_backend n8n_backend if host_n8n
backend n8n_backend
server n8n n8n:5678 check
Как это работает?
frontend http_front
: Это «лицо» нашего прокси. Он принимает входящие подключения на*:80
(80-й порт).acl host_n8n...
: Создается правило (ACL) с именемhost_n8n
. Оно сработает, если кто-то зайдет на сайтn8n.ВАШ_ДОМЕН.com
.use_backend n8n_backend...
: Если правило сработало, HAProxy отправляет запрос вn8n_backend
.backend n8n_backend
: Это описание нашего приложения.server n8n n8n:5678 check
говорит HAProxy: «Отправляй трафик на контейнер с именемn8n
на его порт5678
». Имяn8n
здесь — это имя сервиса изdocker-compose.yml
.
Шаг 4: Первый запуск и получение SSL-сертификата
Теперь, когда база готова, запустим контейнеры и получим заветный SSL-сертификат от Let’s Encrypt с помощью утилиты acme.sh
. Мы используем самый простой метод верификации — через HTTP.
Запустите Docker Compose:
cd ~/n8n-project docker compose up -d
Команда
-d
запускает контейнеры в фоновом режиме. Проверьте, что все работает:docker compose ps
Вы должны увидеть два запущенных контейнера:
n8n
иhaproxy
.Установите acme.sh:
curl [https://get.acme.sh](https://get.acme.sh) | sh source ~/.bashrc
Выпустите сертификат: Эта команда скажет Let’s Encrypt проверить ваш домен.
acme.sh
создаст временный файл, а Let’s Encrypt попробует его прочитать по HTTP. Так как наш HAProxy уже работает на 80-м порту, всё пройдет успешно.# Указываем acme.sh, куда складывать файлы для проверки sudo mkdir -p /var/www/acme-challenge sudo chown $USER:$USER /var/www/acme-challenge # Запрашиваем сертификат ~/.acme.sh/acme.sh --issue -d n8n.ВАШ_ДОМЕН.com --webroot /var/www/acme-challenge/
Установите сертификат для HAProxy: HAProxy требует, чтобы ключ и сертификат были в одном файле.
acme.sh
может сделать это автоматически и настроить автообновление.# Создаем папку для сертификатов внутри папки проекта mkdir -p ~/n8n-project/haproxy/certs # Устанавливаем сертификат с командой автообновления ~/.acme.sh/acme.sh --install-cert -d n8n.ВАШ_ДОМЕН.com \ --key-file ~/n8n-project/haproxy/certs/privkey.pem \ --fullchain-file ~/n8n-project/haproxy/certs/fullchain.pem \ --reloadcmd "cat ~/n8n-project/haproxy/certs/fullchain.pem ~/n8n-project/haproxy/certs/privkey.pem > ~/n8n-project/haproxy/certs/custom.pem && docker compose -f ~/n8n-project/docker-compose.yml restart haproxy"
Это самая важная команда! Она не только копирует сертификаты, но и настраивает
reloadcmd
— команду, которая будет выполняться каждые 60 дней для автоматического обновления сертификата. Она объединяет ключ и сертификат в один файлcustom.pem
и плавно перезапускает HAProxy.
Шаг 5: Включаем HTTPS в HAProxy
Сертификат получен! Осталось только научить HAProxy его использовать.
Откройте
~/n8n-project/haproxy/haproxy.cfg
и приведите его к такому виду:global daemon log stdout local0 # Добавляем настройки для SSL ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384 ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets defaults log global mode http option httplog option dontlognull timeout connect 5s timeout client 50s timeout server 50s frontend http_https_front # Принимаем подключения на 80 и 443 порты bind *:80 bind *:443 ssl crt /usr/local/etc/haproxy/certs/custom.pem # Автоматически перенаправляем всех с HTTP на HTTPS http-request redirect scheme https unless { ssl_fc } # Проверяем домен, как и раньше acl host_n8n hdr(host) -i n8n.ВАШ_ДОМЕН.com # 👈 Замените use_backend n8n_backend if host_n8n backend n8n_backend # Добавляем заголовок, чтобы n8n знал, что работа идет через HTTPS http-request set-header X-Forwarded-Proto https if { ssl_fc } server n8n n8n:5678 check
Перезапустите HAProxy, чтобы он применил новую конфигурацию:
cd ~/n8n-project docker compose restart haproxy
Шаг 6: Финальная проверка
Откройте ваш домен в браузере: https://n8n.ВАШ_ДОМЕН.com
.
Вы должны увидеть:
- Замочек в адресной строке — это значит, что ваше SSL-соединение работает.
- Окно авторизации n8n. Введите логин и пароль, которые вы указали в
docker-compose.yml
.
Если все так, то поздравляю! Вы успешно развернули n8n с безопасным доступом по HTTPS! 🎉
Что дальше? (Обслуживание)
- Обновление n8n: Чтобы обновить n8n до последней версии, достаточно выполнить две команды в папке
~/n8n-project
:docker compose pull n8n # Скачивает новую версию образа docker compose up -d # Пересоздает контейнер с новой версией
- Резервное копирование: Самое ценное — это ваши рабочие процессы. Они хранятся в папке
~/n8n-project/n8n-data
. Регулярно делайте ее резервную копию. - Автообновление сертификата:
acme.sh
автоматически добавил задачу вcron
. Сертификат будет обновляться без вашего участия.
Надеюсь, это руководство было для вас полезным. Теперь вы готовы автоматизировать мир с помощью n8n!
Похожие посты
047 | Plesk: Гибкая панель для веб-профессионалов и разработчиков
09.07.2025
044 | Hestia Control Panel: Мощная и бесплатная альтернатива
06.07.2025
041 | Альтернативы n8n: Сравниваем инструменты автоматизации без кода
03.07.2025
040 | n8n: Облачные vs Self-Hosted — Выбираем свой путь к автоматизации
02.07.2025