Перейти к содержимому

n8n на своём сервере: автоматизация без ограничений облака

Облачные серверы6 мин чтения

Установка n8n на облачный сервер VDS с Ubuntu 26.04 в Docker Compose: постоянный том, домен и HTTPS через nginx, вебхуки, обновление, резервные копии и условия лицензии Sustainable Use License.

Содержание

n8n — система автоматизации, в которой сценарии собираются из готовых блоков (узлов). Сценарий может по расписанию или по входящему запросу получить данные из одного сервиса, обработать их, обратиться к модели ИИ и передать результат в другой сервис. В облачных тарифах n8n число запусков сценариев в месяц ограничено. На собственном сервере ресурсами и данными распоряжаетесь вы сами: сценарии, история их выполнения и учётные данные внешних сервисов хранятся у вас.

Вход на сервер выполняется под учётной записью root по паролю или SSH-ключу (см. статью Как подключиться к серверу по SSH). Команды ниже приведены для root, поэтому sudo в них не указан. Примеры даны для Ubuntu 26.04.

Лицензия n8n

n8n распространяется по собственной лицензии Sustainable Use License, построенной по модели fair-code; открытой (open source) она не является. Лицензия разрешает бесплатно использовать n8n для внутренних задач компании, а также в личных и некоммерческих целях. Разработчики поясняют: если сценарии создают и изменяют только вы и сотрудники вашей организации, n8n можно использовать бесплатно, в том числе для автоматизаций, результатами которых пользуются ваши клиенты.

Без отдельного договора с n8n нельзя предоставлять n8n как услугу, в которой клиенты сами создают и настраивают сценарии, и выдавать n8n за собственный продукт, убрав его фирменное оформление. Функции, для которых нужен лицензионный ключ, например единый вход (SSO) и проекты, доступны только в платных редакциях. В спорных случаях сверьтесь с разделом License FAQ документации n8n.

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

  • Облачный сервер с Ubuntu 26.04. Расход памяти зависит от объёма данных, которые обрабатывают сценарии. Если памяти не хватит, n8n в Docker перезапустится автоматически; добавить память можно на вкладке «Ресурсы» страницы сервера.
  • Docker с плагином Compose. Порядок установки описан в статье о Docker; проверить, что всё готово, можно командой docker compose version.
  • Поддомен, например n8n.example.ru, с A-записью, указывающей на IP-адрес сервера. Он нужен, чтобы получить сертификат и открывать n8n по HTTPS.

Установка в Docker Compose

Создайте папку для n8n и перейдите в неё:

mkdir -p /opt/n8n
cd /opt/n8n

Создайте в ней файл compose.yaml (например, командой nano compose.yaml). Вместо n8n.example.ru укажите свой поддомен, вместо Europe/Moscow — нужный часовой пояс:

services:
  n8n:
    image: n8nio/n8n
    restart: always
    ports:
      - "127.0.0.1:5678:5678"
    environment:
      - N8N_HOST=n8n.example.ru
      - N8N_PORT=5678
      - N8N_PROTOCOL=https
      - N8N_EDITOR_BASE_URL=https://n8n.example.ru/
      - N8N_WEBHOOK_URL=https://n8n.example.ru/
      - N8N_PROXY_HOPS=1
      - N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
      - GENERIC_TIMEZONE=Europe/Moscow
      - TZ=Europe/Moscow
    volumes:
      - n8n_data:/home/node/.n8n

volumes:
  n8n_data:
    name: n8n_data

Запустите n8n и посмотрите журнал запуска:

docker compose up -d
docker compose logs -f n8n

Просмотр журнала завершается сочетанием клавиш Ctrl+C, контейнер при этом продолжает работать. Порт 5678 опубликован только на адресе 127.0.0.1, поэтому из интернета n8n напрямую недоступен: подключения к нему будет принимать nginx. Публиковать порт на всех адресах не стоит, поскольку правила ufw не действуют на порты, опубликованные Docker: такие подключения обрабатываются до проверки правил ufw.

Переменные окружения и вебхуки

N8N_HOSTдоменное имя, по которому открывается n8n
N8N_PROTOCOLпротокол внешнего адреса, здесь https
N8N_PORTпорт n8n внутри контейнера, по умолчанию 5678
N8N_EDITOR_BASE_URLадрес редактора; он же используется в письмах, которые отправляет n8n
N8N_WEBHOOK_URLвнешний адрес, из которого строятся адреса вебхуков
N8N_PROXY_HOPSчисло обратных прокси перед n8n; при работе через nginx значение равно 1
GENERIC_TIMEZONE, TZчасовой пояс для расписаний n8n и для системы в контейнере; без него расписания работают по времени Нью-Йорка
N8N_ENFORCE_SETTINGS_FILE_PERMISSIONSстрогие права доступа к файлу настроек с ключом шифрования

Вебхук (webhook) — адрес, на который внешний сервис отправляет запрос, чтобы запустить сценарий. У узла Webhook два адреса. Тестовый, вида https://n8n.example.ru/webhook-test/…, принимает запросы, пока в редакторе нажата кнопка Listen for Test Event, а рабочий, вида https://n8n.example.ru/webhook/…, начинает действовать после публикации сценария. Оба адреса n8n строит из N8N_WEBHOOK_URL; без этой переменной за обратным прокси в редакторе показывались бы адреса с внутренним портом 5678.

Переменная N8N_WEBHOOK_URL появилась в n8n 2.30. В более ранних версиях и во многих старых инструкциях используется прежнее имя WEBHOOK_URL: оно пока работает, но начиная с версии 2.35 считается устаревшим.

Где хранятся данные

Данные n8n хранятся в томе Docker n8n_data, который подключён в контейнер как папка /home/node/.n8n. В нём находятся база данных SQLite со сценариями, пользователями и историей выполнения, а также файл config с ключом, которым зашифрованы учётные данные внешних сервисов. Том сохраняется при пересоздании и обновлении контейнера; на диске сервера он расположен в папке /var/lib/docker/volumes/n8n_data/_data.

Если n8n будут пользоваться многие сотрудники или сценарии будут работать круглосуточно, документация n8n рекомендует вместо SQLite подключить базу данных PostgreSQL.

Домен и HTTPS через nginx

Установите nginx и certbot:

apt install nginx certbot python3-certbot-nginx

Создайте файл /etc/nginx/sites-available/n8n.example.ru с настройками сайта:

server {
    listen 80;
    server_name n8n.example.ru;

    client_max_body_size 16m;

    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-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_read_timeout 300s;
    }
}

Заголовки Upgrade и Connection нужны для WebSocket: по этому соединению редактор получает от сервера изменения, например ход выполнения сценария. Ограничение client_max_body_size совпадает с предельным размером запроса в n8n (по умолчанию 16 МБ), а увеличенный proxy_read_timeout не даёт nginx через 60 секунд обрывать долгие запросы и простаивающее соединение WebSocket.

Включите сайт, проверьте настройки nginx и получите сертификат:

ln -s /etc/nginx/sites-available/n8n.example.ru /etc/nginx/sites-enabled/
nginx -t
systemctl reload nginx
certbot --nginx -d n8n.example.ru

certbot добавит настройки HTTPS в конфигурацию сайта и будет продлевать сертификат автоматически; подробности — в статье о сертификатах certbot. Если вы включили межсетевой экран ufw, разрешите в нём веб-порты командой ufw allow 80,443/tcp (см. статью Как открыть порт на сервере).

Первый вход

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

n8n поддерживает двухфакторную аутентификацию, и для учётной записи владельца её стоит включить. Бесплатная регистрация редакции Community открывает несколько дополнительных функций, например папки для сценариев и отладку в редакторе. Зарегистрироваться можно в разделе Settings → Plan & usage кнопкой Unlock, указав адрес почты.

Обновление

Новые версии n8n выходят почти каждую неделю, и разработчики советуют обновляться не реже раза в месяц, чтобы не перескакивать сразу через много версий. Перед обновлением сделайте резервную копию (см. следующий раздел) и просмотрите заметки о выпуске: в них описаны несовместимые изменения. Обновление выполняется так:

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

Образ n8nio/n8n без указания версии соответствует последней стабильной версии. Чтобы контролировать переход на новые версии, укажите версию явно, например image: n8nio/n8n:2.47.4, и меняйте её в compose.yaml перед каждым обновлением.

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

Полная резервная копия n8n — это содержимое тома n8n_data: база SQLite и ключ шифрования. Без ключа учётные данные из копии расшифровать не удастся. Копировать базу SQLite во время работы n8n нельзя, иначе копия может оказаться несогласованной, поэтому на время копирования n8n останавливают:

mkdir -p /root/backup
cd /opt/n8n
docker compose stop
tar -czf /root/backup/n8n-$(date +%F).tar.gz -C /var/lib/docker/volumes/n8n_data/_data .
docker compose start

Для восстановления остановите n8n, распакуйте архив в ту же папку тома командой tar -xzf <архив> -C /var/lib/docker/volumes/n8n_data/_data и запустите n8n снова. Храните копии не только на самом сервере: скачивайте их или переносите на другой сервер. Перед крупными изменениями дополнительно делайте снимок сервера.

Не нашли ответ? Напишите в поддержку — подскажем.