Установка n8n на сервер: Docker Compose, домен и HTTPS

n8n и автоматизация

На своём компьютере n8n удобно попробовать, но для настоящей работы ему нужен сервер: сценарии должны выполняться круглосуточно, а вебхуки Telegram, форм и CRM требуют постоянного адреса с HTTPS. Ниже - полная инструкция по установке n8n на VPS через Docker Compose с доменом и бесплатным сертификатом. Версия n8n на момент написания - 2.47.

Что понадобится

  • VPS с Ubuntu 24.04: 1-2 ядра, от 2 ГБ оперативной памяти, 20 ГБ диска. Для сценариев с ИИ-агентами и большими файлами лучше 4 ГБ. Российские хостинги дают такие серверы с оплатой в рублях.
  • Домен или поддомен, например n8n.example.ru. В DNS создайте A-запись на IP сервера.
  • Доступ по SSH (данные приходят от хостинга после заказа сервера).

Шаг 1. Установите Docker

Подключитесь к серверу и выполните официальный скрипт установки Docker:

ssh root@IP-сервера
curl -fsSL https://get.docker.com | sh
docker compose version

Последняя команда должна показать версию Docker Compose. Если она отвечает ошибкой, установка не завершилась.

Шаг 2. Создайте файлы проекта

mkdir -p /opt/n8n && cd /opt/n8n
nano docker-compose.yml

Вставьте содержимое, заменив домен и часовой пояс на свои:

services:
  n8n:
    image: n8nio/n8n
    restart: unless-stopped
    environment:
      - N8N_HOST=n8n.example.ru
      - N8N_PORT=5678
      - N8N_PROTOCOL=https
      - N8N_WEBHOOK_URL=https://n8n.example.ru/
      - NODE_ENV=production
      - GENERIC_TIMEZONE=Europe/Moscow
      - TZ=Europe/Moscow
    volumes:
      - n8n_data:/home/node/.n8n

  caddy:
    image: caddy:2
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - caddy_data:/data

volumes:
  n8n_data:
  caddy_data:

Сохраните файл (Ctrl+O, Enter, Ctrl+X). Затем создайте настройки Caddy - это веб-сервер, который сам получает и продлевает сертификат Let's Encrypt:

nano Caddyfile
n8n.example.ru {
    reverse_proxy n8n:5678
}

В версиях n8n до 2.30 вместо N8N_WEBHOOK_URL используется переменная WEBHOOK_URL. Если адрес вебхуков указан неверно, Telegram и другие сервисы не смогут достучаться до сценариев.

Шаг 3. Запустите

docker compose up -d
docker compose logs -f n8n

Когда в журнале появится строка о том, что редактор доступен, нажмите Ctrl+C и откройте в браузере https://n8n.example.ru. Создайте учётную запись владельца: первый зарегистрированный пользователь становится администратором, поэтому сделайте это сразу после запуска.

Шаг 4. Закройте лишнее

Включите файрвол и оставьте только SSH и веб:

ufw allow 22
ufw allow 80
ufw allow 443
ufw enable

Порт 5678 наружу не открыт: в файле он не опубликован, n8n доступен только через Caddy по HTTPS. Учтите, что Docker может обходить правила ufw для опубликованных портов, поэтому не добавляйте в compose-файл ports для n8n.

Если на сервере уже есть nginx

Когда на сервере работают сайты на nginx, Caddy не нужен. Опубликуйте n8n только на локальном адресе ("127.0.0.1:5678:5678" в разделе ports сервиса n8n) и добавьте в nginx сайт с проксированием. Важно передать заголовки для WebSocket, иначе редактор будет терять соединение:

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-Forwarded-Proto $scheme;
    proxy_buffering off;
}

Обновление n8n

cd /opt/n8n
docker compose pull
docker compose up -d

Перед обновлением на новую основную версию читайте список изменений: иногда меняются переменные и поведение узлов. Для важных сценариев держите тестовую копию и обновляйте сначала её.

Резервные копии

Все сценарии, учётные данные и ключ шифрования хранятся в томе n8n_data. Самый простой способ сохранить сценарии отдельно - выгрузить их в файлы:

docker compose exec n8n n8n export:workflow --all --output=/home/node/.n8n/backup.json
docker compose cp n8n:/home/node/.n8n/backup.json ./backup-$(date +%F).json

Храните копии не только на этом сервере. Обязательно сохраните ключ шифрования (параметр encryptionKey в файле config внутри тома): без него при переносе на другой сервер не расшифруются сохранённые пароли и токены.

Частые проблемы

ПроблемаРешение
Сайт не открывается, сертификат не выпущенпроверьте, что A-запись домена указывает на сервер и порты 80 и 443 открыты; смотрите docker compose logs caddy
В вебхуках адрес localhost:5678не задан адрес вебхуков: проверьте N8N_WEBHOOK_URL (или WEBHOOK_URL в старых версиях) и перезапустите
Не хватает памяти, контейнер перезапускаетсядобавьте файл подкачки 2 ГБ или возьмите сервер с большей памятью
Неправильное время запуска сценариев по расписаниюпроверьте GENERIC_TIMEZONE и часовой пояс в настройках сценария

Что дальше

Сервер готов: соберите первого агента по инструкции ИИ-агент в n8n или подключите бота в Telegram. Если сомневаетесь, нужен ли свой сервер, сравните варианты в статье n8n, Make или Zapier.

Частые вопросы

Сколько стоит n8n на своём сервере?

Сам n8n в версии Community бесплатный и без ограничений на число запусков. Платите только за VPS, обычно это несколько сотен рублей в месяц.

Можно ли без домена?

Технически да, по IP-адресу, но без HTTPS не будут работать вебхуки Telegram и многих сервисов. Поддомен у любого регистратора решает проблему.

Чем Docker лучше установки через npm?

Docker изолирует n8n от остальной системы, обновляется двумя командами и одинаково работает на любом сервере. Установка через npm требует Node.js версии 20.19-24 и ручной настройки автозапуска.

Редакция ii-agenty.pro
Оцените автора