Вводная
В этой инструкции расскажу как поднять на своем 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
Для подготовки этого материала я использовал инструкции с официальных сайтов:
Portainer CE https://docs.portainer.io/start/install-ce/server/docker/linux
Nginx Proxy Manager https://nginxproxymanager.com/setup/