Установка n8n в Docker и настройка docker-compose.yml - Академия Selectel

Установка n8n в Docker и настройка docker-compose.yml

Разворачиваем n8n на своём сервере в Docker: от установки зависимостей до запуска, редактирования docker-compose.yml и настройки SSL и API

Каждый разработчик рано или поздно приходит к моменту, когда ему нужно связать между собой базу данных, отправку писем и условный ChatGPT. Сначала для этого пишется один скрипт на Python, потом второй, а через месяц вы стоите посреди самописных костылей, которые падают от любой проблемы с API. Сторонние SaaS-платформы автоматизации вроде Zapier или Make могут помочь, но это лишние траты на подписку, да и проверку от безопасников они банально не пройдут: «Никаких данных наших клиентов на зарубежных серверах».

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

Именно это предлагает n8n — мощная open-source платформа, которая сочетает в себе гибкость написания кода и скорость no-code визуальных конструкторов. С ней можно объединить приложения, базы и нейросети в единые цепочки через более чем 400 готовых интеграций, сохраняя полный контроль над процессами.

Один из лучших способов использовать n8n — развернуть его локально на своем железе.

Такой подход гарантирует высокий уровень защиты по сравнению с зарубежными облаками, ведь вся конфиденциальная информация останется внутри вашего периметра. Кроме того, self-hosted решение позволяет полностью кастомизировать инструмент: добавлять любые интеграции и гибко подстраивать его под свои задачи.

В этой статье мы подробно разберем, как развернуть n8n с помощью Docker и Docker-compose и настроить безопасный доступ к сервису.

Перед установкой

Перед началом развертывания необходимо убедиться, что устройство соответствует минимальным системным требованиям: 

  • оперативная память — от 2 ГБ (но рекомендуем использовать 4–8 ГБ RAM);
  • процессор — 2 vCPU;
  • дисковое пространство — ≥ 20 ГБ

Дальнейшие шаги мы разберем для разных операционных систем. Вне зависимости от того, разворачиваете ли вы сервис в изолированном контуре на сервере с Linux или подготавливаете окружение на Windows/macOS, базовым инструментом будет Docker. Однако процесс его установки отличается.

Для развертывания n8n через Docker, нужно предварительно его установить. 

На Linux Docker и плагин Docker Compose устанавливаются через официальный скрипт одной командой:

curl -fsSL https://docker.com -o get-docker.sh && sh get-docker.sh

На Windows и macOS для работы с контейнерами используется официальный инсталлятор Docker Desktop. Все необходимые компоненты, включая Docker Compose, уже входят в его состав.

Когда окружение готово, можно переходить к созданию конфигурационных файлов n8n.

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

Linux

Самый быстрый способ запустить n8n и познакомиться с ним — поднять одиночный контейнер. Для начала создадим Docker-том (volume), чтобы данные ваших сценариев автоматизации сохранялись при перезапусках:

docker volume create n8n_data

Эта команда создает том для хранения постоянных данных. Вместо «n8n_data» можно использовать любое название.

Далее нужно выполнить команду, которая установит необходимый образ n8n и запустит контейнер.

docker run -d --name n8n -p 5678:5678 -v n8n_data:/home/node/.n8n docker.n8n.io/n8nio/n8n

В результате выполнения команды по адресу http://localhost:5678 (или по публичному IP-адресу вашего сервера) откроется графический интерфейс n8n, где платформа предложит настроить учетную запись администратора.

Графический интерфейс n8n.
Графический интерфейс n8n.

Windows/MacOS

Для развертывания n8n на Windows или MacOS необходимо открыть Docker Desktop. Затем выполнить в командной строке или PowerShell для Windows следующую команду для создания тома для хранения постоянных данных. Название «n8n_data» можно заменить на любое другое.

docker volume create n8n_data

Далее выполняем команду для установки образа n8n и запуска контейнера.

docker run -d --name n8n -p 5678:5678 -v n8n_data:/home/node/.n8n docker.n8n.io/n8nio/n8n

После завершения выполнения команды, переходим по адресу http://localhost:5678, где теперь отображается графический интерфейс n8n с регистрацией пользователя.

Настройки n8n в docker-compose.yml

Еще один способ развертывания n8n — с помощью docker-compose. Docker compose позволяет запускать приложения, состоящие из множества контейнеров, одной командой в терминале. Вся конфигурация для приложения хранится в файле docker-compose.yaml, что обеспечивает прозрачность работы инструмента. 

Также docker compose автоматически создает общую изолированную сеть для всех контейнеров, позволяя им общаться друг с другом по именам сервисов.

Linux/Windows/MacOS

Для начала создадим базовый файл под названием docker-compose.yaml, в котором установим образ (image) n8n и запустим инструмент в локальной сети с портом 5678:


      services:
  n8n:
    image: docker.n8n.io/n8nio/n8n
    restart: always
    ports:
      - "5678:5678"
    environment:
      - N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
      - N8N_HOST=127.0.0.1
      - N8N_PORT=5678
      - N8N_PUBLIC_API_DISABLED=false
    volumes:
      - n8n_data:/home/node/.n8n
volumes:
  n8n_data:

На данный момент в конфигурации создается один контейнер для n8n, в будущем в файл docker-compose.yaml можно будет добавить дополнительные сервисы.

Перед запуском docker compose на устройствах на базе Windows и MacOS необходимо запустить Docker Desktop. Для устройств на базе Linux никаких дополнительных действий не требуется.

Запускаем контейнер командой:

docker compose up -d

По адресу http://localhost:5678 (при локальном развертывании) или по внешнему IP-адресу вашего сервера графический интерфейс n8n станет доступен для настройки и авторизации.

Настройка доступа к API

Для получения API-ключа n8n перейдите в графический интерфейс n8n и зайдите по пути Settingsn8n API. В этом разделе нужно создать API ключ и настроить нужные параметры (срок действия ключа и разделы n8n, к которым дает доступ этот ключ).

Стартовая страница n8n
Стартовая страница n8n.

Для проверки работоспособности введите следующую команду терминал, заменив https://n8n.example.com на свой адрес и впиcав полученный API-ключ. В случае, если вы разворачиваете n8n в локальной сети, впишите адрес http://localhost:5678.


      curl https://n8n.example.com/api/v1/workflows \
  -H "X-N8N-API-KEY: ваш_ключ"

В результате выполнения в терминале выведется информация о существующих workflow.

Также n8n предоставляет встроенную интерактивную документацию Swagger UI. С помощью которой можно отправлять запросы в браузере без использования команд в терминале. Для входа введите https://n8n.example.com/api/v1/docs в браузере, заменив n8n.example.com на свой адрес. 

Настройка SSL и доступ к серверу по HTTPS

Для настройки безопасного доступа к n8n по протоколу HTTPS используется обратный прокси-сервер (например, Nginx, Traefik, Caddy). Он принимает защищенный трафик на порту 443, проверяет SSL-сертификаты и передает запросы внутрь изолированных контейнеров по протоколу HTTP.

Перед запуском n8n с протоколом HTTPS нужно убедиться, что на устройстве выполнены следующие условия:

  • у вас есть собственный домен или поддомен (например, n8n.example.com);
  • в DNS-панели вашего домена настроена A-запись, указывающая на публичный IP-адрес вашего сервер;
  • на сервере открыты порты 80 (HTTP) и 443 (HTTPS) — они необходимы для выпуска SSL-сертификата.

В качестве обратного прокси-сервера мы выберем Traefik. Он отлично интегрируется с Docker и умеет автоматически получать и обновлять бесплатные SSL-сертификаты от Let’s Encrypt.

Создаем файл .env с важными переменными для конфигурации n8n. Для примера возьмем n8n.example.com, который нужно заменить на свой домен. В строчку SSL_EMAIL впишите свой email-адрес.

DOMAIN_NAME=example.com
SUBDOMAIN=n8n
SSL_EMAIL=ваша_почта@example.com

Далее создаем файл docker-compose.yaml


      services:
  traefik:
    image: "traefik:latest"
    restart: always
    command:
      - "--api=false"
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.web.address=:80"
      - "--entrypoints.web.http.redirections.entryPoint.to=websecure"
      - "--entrypoints.web.http.redirections.entryPoint.scheme=https"
      - "--entrypoints.websecure.address=:443"
      - "--certificatesresolvers.mytlschallenge.acme.tlschallenge=true"
      - "--certificatesresolvers.mytlschallenge.acme.email=${SSL_EMAIL}"
      - "--certificatesresolvers.mytlschallenge.acme.storage=//6ef4e6a1-9d49-47ac-bfed-170f67a815cf.selcdn.net/letsencrypt/acme.json"
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - traefik_data:/letsencrypt
      - /var/run/docker.sock:/var/run/docker.sock:ro
  n8n:
    image: docker.n8n.io/n8nio/n8n
    restart: always
    ports:
      - "127.0.0.1:5678:5678"
    labels:
      - traefik.enable=true
      - traefik.http.routers.n8n.rule=Host(`${SUBDOMAIN}.${DOMAIN_NAME}`)
      - traefik.http.routers.n8n.tls=true
      - traefik.http.routers.n8n.entrypoints=web,websecure
      - traefik.http.routers.n8n.tls.certresolver=mytlschallenge
      - traefik.http.middlewares.n8n.headers.SSLRedirect=true
      - traefik.http.middlewares.n8n.headers.STSSeconds=315360000
      - traefik.http.middlewares.n8n.headers.browserXSSFilter=true
      - traefik.http.middlewares.n8n.headers.contentTypeNosniff=true
      - traefik.http.middlewares.n8n.headers.forceSTSHeader=true
      - traefik.http.middlewares.n8n.headers.SSLHost=${DOMAIN_NAME}
      - traefik.http.middlewares.n8n.headers.STSIncludeSubdomains=true
      - traefik.http.middlewares.n8n.headers.STSPreload=true
      - traefik.http.routers.n8n.middlewares=n8n@docker
    environment:
      - N8N_HOST=${SUBDOMAIN}.${DOMAIN_NAME}
      - N8N_PORT=5678
      - N8N_PROTOCOL=https
      - NODE_ENV=production
      - WEBHOOK_URL=https://${SUBDOMAIN}.${DOMAIN_NAME}/
      - N8N_RUNNERS_ENABLED=true
      - N8N_BLOCK_ENV_ACCESS_IN_NODE=true
      - N8N_SECURE_COOKIE=true
      - N8N_PUBLIC_API_DISABLED=false
    volumes:
      - n8n_data:/home/node/.n8n
volumes:
  traefik_data:
  n8n_data:

                                                                                       

Запускаем контейнеры командой:

docker compose up -d

Переходим по указанному в файле .env адресу (в примере https://n8n.example.com), где уже запущен n8n.

Чтобы сразу протестировать возможности системы и ИИ-агентов, вы можете использовать готовые цепочки блоков (workflows). Посмотрите, как выглядят настроенные сценарии на практике.

Пример workflow коммуникация с БД.
Пример workflow коммуникация с БД.

Интеграция ИИ с базой данных. Сценарий связывает Ollama Chat Model с базой Postgres для ведения контекстного диалога на основе ваших данных.

Пример workflow анализ сайта.
Пример workflow анализ сайта.

Интеграция ИИ для парсинга сайтов. Сценарий принимает веб-ссылку, извлекает контент и отправляет его на анализ нейросети.

Чем может помочь Selectel

Зачастую мощности личного компьютера не хватает для плавной работы n8n. В этом случае пользователь может арендовать облачный сервер в панели управления Selectel и сконфигурировать его в соответствии с минимальными требованиями n8n.

В случае, когда не хочется погружаться в установку и настройку n8n, пользователь может воспользоваться продуктом AI-маркетплейс и арендовать сервер с уже установленным и запущенным n8n на отдельной виртуальной машине, которая полностью соответствует требованиям. Остается только перейти по ссылке в GUI и начинать работу с инструментом.

Заключение

В итоге мы получаем мощную платформу, которая берет на себя всю рутину по интеграции сервисов. В n8n удобно настраивать логику: вы просто связываете задачи на экране, и они выполняются последовательно или по заданным условиям. Запуская n8n на своих мощностях, вы полностью контролируете безопасность данных и настраиваете инструмент так, как нужно именно вашему проекту.