Вводная

В этой инструкции расскажу как поднять на своем VPS opensource-платформу для автоматизации рабочих процессов N8N и необходимые для ее функционирования сопутствующие сервисы. Я первый раз настраивал n8n по инструкции с официального сайта, но мне не понравилось, что в конфигурации по дефолту используется traefik - по мне так он избыточен для большинства установок N8N и в качестве обратного прокси лучше подходит nginx proxy manager. Через него также можно работать с сертификатами letsencrypt, так что в функциональности относительно официальной инструкции мы, кажется, вообще ничего теряем, а с точки расходования ресурсов сервера - выигрываем, как минимум в потреблении оперативки. Итак, приступим.

Что нам потребуется

  • Купленный домен

  • Доступ к редактированию DNS-записей

  • Арендованная VPS c Ubuntu на борту c доступом по ssh, удовлетворяющая следующим требованиям:

    • 2 гига оперативки минимум

    • от 20 Гб ssd

Если вы собираетесь в рамках своих автоматизаций работать с зарубежными сервисами по API(например, для использования по api сервисов, предоставляющих доступ к LLM, вроде OpenAI, OpenRouter и т.п.), то лучше брать VPS-ку где-то не в РФ, так как с российскими ip-адресами некоторые сервисы не работают(бан на стороне сервисов)

Если вы намерены использовать n8n для работы с перс.данными(любой совокупности данных, на основе которой можно однозначно определить конкретного человека) - то для выполнения 152-ФЗ вам необходимо хранить и обрабатывать данные, не транслируя их наружу - и тогда наоборот, сервер должен находиться внутри страны, а данные - быть изолированны от зарубежных сервисов.

Настройка DNS-записей

Для корректной работы поддоменов нам необходимо добавить для купленного домена поддомены для инструментов, которые нам необходимы:

  • portainer.domain.net

  • nginx.domain.net

  • n8n.domain.net Для каждого из поддоменов в панели управления DNS нужно добавить A-запись с указанием ip нашей VPS (далее в примерах будет использоваться 123.123.123.123)

Базовая настройка VPS

Большинство хостеров при создании VPS выдают только root-учетку с паролем, поэтому начиная работать с новым сервером, мы создадим нового пользователя. Для этого откроем терминал на локальной машине и зайдем на новый сервер с помощью команды

ssh root@123.123.123.123

где 123.123.123 - ip-шник вашей VPS
При подключении система попросит ввести пароль, который вам предоставил хостер.

  • Созданный на этом и последующих шагах пароли, нам, естественно потребуются в дальнейшем, поэтому лучше сразу сохранять их в вашем любимом менеджере паролей.

  • Так как VPS-ка у нас общедоступная, то и пароли должны быть устойчивыми - в идеале генерировать их в том же парольном менеджере.

Создадим нового пользователя

sudo adduser username

здесь и в дальнейших командах вместо username - желаемое имя вашего нового пользователя
На этом шаге в терминале надо будет последовательно ответить на несколько вопросов, задаваемых операционкой, но эту информацию можно не заполнять(кроме имени пользователя и пароля, само собой). Далее добавим пользователя в группу sudo, чтоб у него хватило прав на выполнение последущих команд).

Добавим нового пользователя в группу sudo

sudo usermod -aG sudo username

На всякий случай проверим, что пользователь действительно добавился

id username

Далее отключаемся от сервера

logout

и заходим под реквизитами созданного пользователя

ssh username@123.123.123.123

Установка и настройка Docker + Docker Compose

Проверяем, есть ли конфликтующие пакеты и удаляем, если они установлены:

sudo apt remove $(dpkg --get-selections docker.io docker-compose docker-compose-v2 docker-doc podman-docker containerd runc | cut -f1)

Добавляем репозиторий для docker. Сначала добавим GPG-ключ, для этого последовательно выполним:

sudo apt update
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL <https://download.docker.com/linux/ubuntu/gpg> -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

Ну и сам репозиторий пропишем в sources:

sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: <https://download.docker.com/linux/ubuntu>
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Signed-By: /etc/apt/keyrings/docker.asc
EOF

Обновим пакеты с учетом добавленного репозитория

sudo apt update && sudo apt -y upgrade

Ставим docker и docker-compose из добавленного репозитория

sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Проверяем статус:

sudo systemctl status docker

Если статус некорректный, то запускаем:

sudo systemctl start docker

Проверим, поднялся ли тестовый контейнер:

sudo docker run hello-world

Добавим текущего пользователя в группу docker

sudo usermod -aG docker "$USER"

Установка portainer

Создаем volume

sudo docker volume create portainer_data

И раскатываем контейнер

sudo docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portioner_data:/data portainer/portainer-ce:lts

Заходим по адресу:

http://123.123.123.123:8000/

Где 123.123.123.123 - ip вашей VPS

Для завершения установки portainer-а заполняем форму регистрации администраторской учетки - и готовы двигаться дальше.

docker pull portainer/portainer-ce:latest
docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_/data portainer/portainer-ce:latest

Установка и настройка хостов в Nginx Proxy Manager

В portainer-е идем в Environments -> local -> stacks, жмем на кнопку Add stack, указываем:

  • Name - любое, например nginx-manager

  • Build method - выбираем Web editor

  • В Web editor(многострочное поле ниже) - копируем текст из блока ниже

services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    container_name: nginx-proxy-manager
    ports:
      # These ports are in format <host-port>:<container-port>
      - '80:80' # Public HTTP Port
      - '443:443' # Public HTTPS Port
      - '81:81' # Admin Web Port
      # Add any other Stream port you want to expose
      # - '21:21' # FTP
    environment:
      GENERIC_TIMEZONE="Europe/Moscow"
      TZ: "Europe/Moscow"
      # Uncomment this if you want to change the location of
      # the SQLite DB file within the container
      # DB_SQLITE_FILE: "/data/database.sqlite"
      # Uncomment this if IPv6 is not enabled on your host
      # DISABLE_IPV6: 'true'
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt

Относительно инструкции на официальном сайте в конфиг добавлена строка с container_name. Также необходимо отредактировать строку TZ, указав свою таймзону

  • Access control - отключаем тоггл "Enable access control"

  • Нажимем на Deploy и ждем пока у нас задеплоится и поднимется контейнер с nginx proxy manager

Далее идем на http://123.123.123.123:81, настраиваем учетку администратора, заполнив форму регистрации и затем в разделе Hosts добавляем необходимые поддомены(domain.net - соответственно ваш домен) по кнопке add proxy host:

  • portainer.domain.net

    • На вкладке Details

      • Domain names - тут вводим portainer.domain.net и обязательно нажимаем "add" в строке, чтоб значение сохранилось в поле

      • Scheme: http

      • Forward Hostname/IP: 123.123.123.123

      • Forward port: 8000

    • На вкладке SSL:

      • SSL-Certificate: Request a new Certificate

      • Force SSL = on, остальные тогглы в этой секции в OFF

    • И нажимаем "Save"

С такими же настройками добавляем хосты для поддоменов n8n.domain.net, nginx.domain.net, меняя для них только Forward port на первой вкладке:

  • Для n8n: 5678

  • Для nginx: 81

Установка и настройка N8N

Ну, и наконец раскатываем стек с n8n, также в portainer-e через добавление конфигурации в разделе stack со следующем конфигом:

services:
    n8n:
        image: docker.n8n.io/n8nio/n8n:latest
        container_name: n8n
        ports:
         - "5678:5678"
        dns:
         - 8.8.8.8
         - 1.1.1.1
        environment:
         - NODE_ENV=production
         - N8N_PROTOCOL=https
         - N8N_HOST=n8n.domain.net
         - WEBHOOK_URL=https://n8n.domain.net
         - EXECUTIONS_DATA_PRUNE=true
         - EXECUTIONS_DATA_MAX_AGE=168
        volumes:
         - n8n_data:/home/node/.n8n
        restart: unless-stopped

volumes:
    n8n_data:

В конфиге соответственно нужно отредактировать строки N8N_HOST и WEBHOOK_URL под ваш домен и нажать на Deploy. В этот раз деплой будет идти чуть дольше.

После успешной установки и поднятия контейнера, переходим по адресу n8n.domain.net
и заполняем форму, указывая данные нового пользователя

Все готово!

Мы получили работающую VPS-ку с n8n на борту, с настроенными поддоменами и ssl-сертификатами на них(что позволит использовать те же web-хуки для интеграций с внешними сервисами).
Для доступа к нужным инструментам мы теперь можем обращаться к соответствующим доменам:

  • n8n.domain.net

  • portainer.domain.net

  • nginx.domain.net

Для подготовки этого материала я использовал инструкции с официальных сайтов:

Комментарии (0)