EUR
european

EUR

usa

USD

Ex. VAT Ex. VAT 0%

Установка n8n AI Starter Kit с Ollama

Self-hosted AI Starter Kit это шаблон Docker Compose от команды n8n для AI-workflows, которые целиком работают на вашем сервере. Запросы и документы обрабатывает локальная языковая модель, во внешние AI-сервисы они не отправляются.

В кит входят четыре компонента:

  • n8n, платформа автоматизации с AI-нодами;
  • Ollama, которая запускает открытые языковые модели локально;
  • Qdrant, векторная база данных для хранения и поиска эмбеддингов документов;
  • PostgreSQL, база данных для n8n.

Авторы помечают официальный кит как предназначенный для тестирования. На момент написания, если запустить его по README на сервере с публичным IP, возникает несколько проблем: n8n, Ollama и Qdrant открыты в интернет, у Ollama и Qdrant нет аутентификации, секреты в конфигурации одинаковые для всех установок, а демо-workflow не импортируется. В этой инструкции кит ставится как есть, а всё перечисленное исправляется отдельным файлом override, так что кит по-прежнему можно обновлять из репозитория.

Инструкция написана для Ubuntu 24.04 LTS, n8n 2.47.3, Ollama 0.40.16, Qdrant 1.20.0, Docker 29 и Docker Compose v5.

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

  • сервер с Ubuntu 24.04 LTS и root-доступом по SSH;
  • не меньше 15 ГБ свободного места на диске: образы Docker занимают около 11 ГБ, модель Llama 3.2 по умолчанию около 2 ГБ;
  • домен или поддомен для n8n, например n8n.example.com, с записью A, указывающей на IPv4-адрес сервера.

Info

Без GPU модель работает на процессоре и отвечает медленно. Для постоянной работы выбирайте сервер с GPU NVIDIA.

Все команды ниже выполняются от root. Если вы работаете под обычным пользователем с правами sudo, добавляйте sudo перед каждой командой.

Установка Docker

Установите Docker Engine и плагин Compose из официального репозитория Docker:

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

Добавьте репозиторий:

echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) stable" > /etc/apt/sources.list.d/docker.list

Установите пакеты и проверьте версии:

apt update apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker --version docker compose version

Загрузка кита

Клонируйте репозиторий в /opt и создайте файл конфигурации из примера:

cd /opt git clone https://github.com/n8n-io/self-hosted-ai-starter-kit.git cd self-hosted-ai-starter-kit cp .env.example .env

Замена секретов по умолчанию

В файле примера стоят фиксированные значения, например password для PostgreSQL и super-secret-key для ключа шифрования n8n. Они одинаковые в каждой копии кита, поэтому замените их случайными:

sed -i "s/^POSTGRES_PASSWORD=.*/POSTGRES_PASSWORD=$(openssl rand -hex 24)/" .env sed -i "s/^N8N_ENCRYPTION_KEY=.*/N8N_ENCRYPTION_KEY=$(openssl rand -hex 32)/" .env sed -i "s/^N8N_USER_MANAGEMENT_JWT_SECRET=.*/N8N_USER_MANAGEMENT_JWT_SECRET=$(openssl rand -hex 32)/" .env chmod 600 .env

N8N_ENCRYPTION_KEY шифрует учётные данные, которые вы сохраняете в n8n. N8N_USER_MANAGEMENT_JWT_SECRET подписывает сессии пользователей.

Warning

Скопируйте файл .env в надёжное место вне сервера, например в менеджер паролей. Без N8N_ENCRYPTION_KEY сохранённые в n8n учётные данные не расшифровать после восстановления.

Закрытие портов и HTTPS

В docker-compose.yml кита n8n (порт 5678), Ollama (11434) и Qdrant (6333) опубликованы на всех сетевых интерфейсах. Для опубликованных портов Docker добавляет собственные правила файрвола, и они обходят UFW. На сервере с публичным IP это значит, что кто угодно может открыть редактор n8n по обычному HTTP и пользоваться API Ollama и Qdrant, у которых нет аутентификации.

Вместо правки docker-compose.yml создайте рядом файл docker-compose.override.yml. Docker Compose читает его автоматически и применяет поверх основного. Собственные файлы кита остаются без изменений, поэтому их обновление из репозитория не затрёт ваши настройки.

Создайте файл /opt/self-hosted-ai-starter-kit/docker-compose.override.yml и замените n8n.example.com своим доменом:

services: n8n: ports: !override - "127.0.0.1:5678:5678" environment: - N8N_HOST=n8n.example.com - N8N_PROTOCOL=https - N8N_PROXY_HOPS=1 - N8N_WEBHOOK_URL=https://n8n.example.com/ ollama-cpu: ports: !reset [] ollama-gpu: ports: !reset [] qdrant: ports: !reset [] caddy: image: caddy:2 restart: unless-stopped networks: ['demo'] ports: - "80:80" - "443:443" volumes: - ./Caddyfile:/etc/caddy/Caddyfile:ro - caddy_data:/data - caddy_config:/config volumes: caddy_data: caddy_config:

Что меняет этот файл:

  • n8n слушает только 127.0.0.1, пользователи попадают в него через Caddy по HTTPS;
  • Ollama и Qdrant вообще не публикуются, n8n обращается к ним по внутренней сети Docker по именам ollama и qdrant;
  • добавляется Caddy, обратный прокси, который получает и продлевает сертификат Let's Encrypt, если домен указывает на сервер, а порты 80 и 443 открыты;
  • тома с данными n8n, PostgreSQL, Qdrant и Ollama остаются такими, как заданы в docker-compose.yml кита, override их не меняет.

Info

Строка networks: ['demo'] обязательна. Все сервисы кита работают в сети demo, и без этой строки Caddy не достучится до n8n и вернёт ошибку 502.

N8N_WEBHOOK_URL задаёт адрес, который n8n использует для вебхуков, в том числе для окна чата в редакторе. Домен должен указывать на ваш сервер с того компьютера, где вы открываете n8n. Иначе чат покажет только сообщение "Failed to receive response" и никак не укажет на DNS как причину.

Создайте файл /opt/self-hosted-ai-starter-kit/Caddyfile со своим доменом:

n8n.example.com { reverse_proxy n8n:5678 }

Проверьте итоговую конфигурацию:

docker compose --profile cpu config | grep -A4 "ports:"

В списке должны быть только n8n на 127.0.0.1:5678 и Caddy на портах 80 и 443.

Настройка файрвола

Файл override уже убирает внутренние сервисы кита из сети. UFW блокирует весь остальной входящий трафик на сервер, кроме SSH, HTTP и HTTPS. Разрешите их и включите UFW:

ufw allow OpenSSH ufw allow 80/tcp ufw allow 443/tcp ufw --force enable

Запуск кита

Запустите стек в режиме CPU:

docker compose --profile cpu up -d

При первом запуске Docker скачивает около 11 ГБ образов, а отдельный контейнер загружает модель Llama 3.2. Это займёт время, в зависимости от скорости канала. Проверьте, что модель на месте:

docker exec ollama ollama list

В списке должна быть llama3.2:latest.

Проверьте, что на сервере открыты только нужные порты:

ss -tlnp

Порты 80 и 443 должны быть открыты на всех интерфейсах, порт 5678 только на 127.0.0.1. Портов 11434 и 6333 в списке быть не должно.

Info

Кит использует PostgreSQL 16. В логе n8n может появиться предупреждение, что эта версия вне поддерживаемого диапазона. На работу n8n это предупреждение не влияет.

Импорт демо-workflow

В кит входят демо-workflow и две демонстрационные учётные записи (credentials). Они должны импортироваться при первом запуске, но на момент написания проверка импорта в docker-compose.yml кита никогда не срабатывает, и ничего не импортируется. Выполните импорт вручную:

docker compose --profile cpu run --rm n8n-import -c "n8n import:credentials --separate --input=/demo-data/credentials" docker compose --profile cpu run --rm n8n-import -c "n8n import:workflow --separate --input=/demo-data/workflows"

Опция -c обязательна: сервис n8n-import запускает оболочку, и без -c команда падает с ошибкой "can't open 'n8n'".

Создание аккаунта владельца

Откройте https://n8n.example.com в браузере и создайте аккаунт владельца: укажите email, имя, фамилию и пароль не короче 8 символов, хотя бы с одной цифрой и одной заглавной буквой. После первого входа n8n может показать короткий опрос и предложение бесплатного лицензионного ключа на часть функций Community Edition. И то и другое необязательно.

На главной странице появится импортированный Demo workflow.

Исправление демо-credentials

Демо-credentials зашифрованы ключом по умолчанию из .env.example. После замены N8N_ENCRYPTION_KEY n8n не может их расшифровать, поэтому обе записи нужно заполнить заново. Настройки сохранятся зашифрованными уже вашим ключом.

Откройте Overview, перейдите на вкладку Credentials и откройте Local Ollama service. Подключение не проходит, а в поле Base URL стоит http://localhost:11434. Внутри контейнера n8n localhost это сам n8n, а не Ollama.

Укажите в Base URL значение http://ollama:11434, поле API Key оставьте пустым и нажмите Save. n8n проверит подключение и покажет Connection tested successfully.

Откройте Local QdrantApi database. Укажите в Qdrant URL значение http://qdrant:6333, поле API Key оставьте пустым и нажмите Save.

Проверка демо-workflow

Откройте Demo workflow. В нём три ноды: Chat Trigger принимает сообщение, Basic LLM Chain передаёт его модели, а Ollama Chat Model отправляет его в Llama 3.2 в Ollama.

Нажмите Open chat внизу холста и отправьте короткий вопрос. По ходу выполнения ноды становятся зелёными, а ответ модели появляется в чате. Первый ответ занимает больше времени, потому что Ollama загружает модель в память.

Если чат показывает "Failed to receive response", а workflow не запускается, проверьте, что домен из N8N_WEBHOOK_URL указывает на ваш сервер с вашего компьютера.

Использование GPU NVIDIA

Если на сервере есть GPU NVIDIA, кит может запускать Ollama на нём. Для этого Docker нужен NVIDIA Container Toolkit. Если вы ещё не использовали GPU с Docker на этом сервере, сначала установите его по инструкции Ollama для Docker.

Затем запускайте кит с профилем gpu-nvidia вместо cpu:

docker compose --profile gpu-nvidia up -d

Файл override выше уже закрывает порт Ollama и для этого профиля. Используйте тот же профиль во всех остальных командах. Например, импорт демо с профилем GPU:

docker compose --profile gpu-nvidia run --rm n8n-import -c "n8n import:credentials --separate --input=/demo-data/credentials" docker compose --profile gpu-nvidia run --rm n8n-import -c "n8n import:workflow --separate --input=/demo-data/workflows"

И обновление:

cd /opt/self-hosted-ai-starter-kit git pull docker compose --profile gpu-nvidia pull docker compose --profile gpu-nvidia up -d

Обновление кита

Чтобы обновить файлы и образы кита, выполните команды с вашим профилем:

cd /opt/self-hosted-ai-starter-kit git pull docker compose --profile cpu pull docker compose --profile cpu up -d

Ваши docker-compose.override.yml, Caddyfile и .env не входят в репозиторий, поэтому git pull их не меняет.

Что дальше

Кит готов для ваших AI-workflows. Дальше можно:

  • Скачать другие модели командой docker exec ollama ollama pull с именем модели и выбрать их в ноде Ollama Chat Model;
  • Использовать Qdrant для поиска по своим документам через ноды векторного хранилища в n8n;
  • Подключить свои сервисы и строить workflows, которые объединяют их с локальной моделью.

Об установке n8n без AI-компонентов смотрите руководство Установка n8n с Docker и PostgreSQL. В нём же описано резервное копирование и восстановление базы n8n.

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • kingdom
  • germany
  • Español
  • French
  • Hrvatska
  • Italiano
  • Poland
  • Slovenski
  • ukraine
  • Türkçe
  • Русский
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA