Как установить и настроить N8N на своем сервере VPS (в связке с Portainer и Nginx Proxy Manager)
В этой инструкции расскажу как поднять на своем VPS opensource-платформу для автоматизации рабочих процессов N8N и необходимые для ее функционирования сопутствующие сервисы. Я первый раз настраивал n8n по инструкции с официального сайта, но мне не понравилось, что в конфигурации по дефолту используется traefik – по мне так он избыточен для большинства установок N8N и в качестве обратного прокси лучше подходит nginx proxy manager. Через него также можно работать с сертификатами letsencrypt, так что в функциональности относительно официальной инструкции мы, кажется, вообще ничего теряем, а с точки расходования ресурсов сервера – выигрываем, как минимум в потреблении оперативки. Итак, приступим. Что нам потребуется Если вы собираетесь в рамках своих автоматизаций работать с зарубежными сервисами по API(например, для использования по api сервисов, предоставляющих доступ к LLM, вроде OpenAI, OpenRouter и т.п.), то лучше брать VPS-ку где-то не в РФ, так как с российскими ip-адресами некоторые сервисы не работают(бан на стороне сервисов) Если вы намерены использовать n8n для работы с перс.данными(любой совокупности данных, на основе которой можно однозначно определить конкретного человека) – то для выполнения 152-ФЗ вам необходимо хранить и обрабатывать данные, не транслируя их наружу – и тогда наоборот, сервер должен находиться внутри страны, а данные – быть изолированны от зарубежных сервисов. Настройка DNS-записей Для корректной работы поддоменов нам необходимо добавить для купленного домена поддомены для инструментов, которые нам необходимы: Базовая настройка VPS Большинство хостеров при создании VPS выдают только root-учетку с паролем, поэтому начиная работать с новым сервером, мы создадим нового пользователя. Для этого откроем терминал на локальной машине и зайдем на новый сервер с помощью команды ssh root@123.123.123.123 Объяснить с где 123.123.123 – ip-шник вашей 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, указываем: 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, указав свою таймзону Далее идем на http://123.123.123.123:81, настраиваем учетку администратора, заполнив форму регистрации и затем в разделе Hosts добавляем необходимые поддомены(domain.net – соответственно ваш домен) по кнопке add proxy host: С такими же настройками добавляем хосты для поддоменов n8n.domain.net, nginx.domain.net, меняя для них только Forward port на первой вкладке: Установка и настройка 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-stoppedvolumes: n8n_data:Объяснить с В конфиге соответственно нужно отредактировать строки N8N_HOST и WEBHOOK_URL под ваш домен и нажать на Deploy. В этот раз деплой будет идти чуть дольше. После успешной установки и поднятия контейнера, переходим по адресу n8n.domain.netи заполняем форму, указывая данные нового пользователя Все готово! Мы получили работающую VPS-ку с n8n на борту, с настроенными поддоменами и ssl-сертификатами на них(что позволит использовать те же web-хуки для интеграций с внешними сервисами).Для доступа к нужным инструментам мы теперь можем обращаться к соответствующим доменам: Для подготовки этого материала я использовал инструкции с официальных сайтов:
Read More