n8n на GX10: автоматизации с локален AI
Вдигаме на локален AI сървър от класа NVIDIA GB10 работилница за автоматизации: n8n за работните процеси, Postgres за паметта му и Ollama за модела. Всичко върви в Docker с една команда, моделът не напуска машината, а тайните стоят в отделен файл.
N8N_BASIC_AUTH_* не съществува в днешните версии — първото отваряне създава собственически акаунт), версиите latest (сега са закачени във .env: n8n 2.41.4, Ollama 0.35.0, Postgres 18), Postgres 16, реда platform: linux/arm64 (образите са многоархитектурни и Docker взема сам ARM64), ръчната инсталация на Docker (на DGX OS той е предварително инсталиран), отварянето на порт 5678 в защитната стена и публичния Caddy като стандартен път. Добавихме: Ollama като вътрешна услуга без публикуван порт (нищо не слуша на 0.0.0.0), достъп до редактора през SSH тунел, затворени портове (само 127.0.0.1), именувани томове, проверка на ARM64 и на достъпа до видеокартата, генерирани тайни, копия и обновяване. Поправихме числата: „1 PetaFLOP“ е при FP4 с разреждане (sparsity), не обща мощност; 128 GB памет е обща за процесора и видеокартата. Съкратихме петте работни процеса до един подробен (оценка на запитване с локален модел) и таблица с идеи — конкретните връзки към външни услуги (CRM, социални мрежи, Clearbit) не са сверени, затова не ги даваме като готови рецепти.
01Какво ще научиш
- Какво е машина от класа GB10 и защо ARM64 и общата памет са важни за контейнерите.
- Как да опишеш цял стек в един файл
compose.yamlи да пазиш тайните в.env. - Как да вдигнеш n8n с Postgres и Ollama и да провериш, че са живи.
- Как да стигнеш до редактора от своя компютър, без да отваряш машината към мрежата.
- Как да направиш първия работен процес, в който локален модел оценява запитване.
- Как да правиш копия на данните и да обновяваш безопасно.
02Преди да започнеш
- Машина от класа NVIDIA GB10 (например ASUS Ascent GX10 или DGX Spark) с DGX OS (Ubuntu 24.04 за Arm64), настроена по първото включване.
- Достъп до терминала на машината — директно или по SSH.
- Docker и NVIDIA Container Toolkit — на DGX Spark са предварително инсталирани и настроени (по документацията на NVIDIA). Ако Docker иска
sudo, добави се към групата по инструкцията на NVIDIA или пишиsudoпред командите. - Интернет за изтеглянето на образите и моделите (десетки гигабайта при по-големите модели).
- Свободно място на диска: образите и моделите заемат десетки гигабайта — провери с
df -h.
| Какво | Стойност (по ASUS и NVIDIA) |
|---|---|
| Процесор | 20 ядра Arm: 10 × Cortex-X925 + 10 × Cortex-A725 |
| Видеокарта | NVIDIA Blackwell (GB10, вградена); Tensor ядра 5-о поколение |
| Памет | 128 GB LPDDR5x, обща за процесора и видеокартата |
| Мощност за ИИ | до 1 PFLOP при FP4 с разреждане (sparsity) |
| Мрежа | 10 Gbit Ethernet, Wi-Fi 7, ConnectX-7 |
| Система | NVIDIA DGX OS (Ubuntu 24.04) |
linux/arm64. Проверихме в Docker Hub: n8n 2.41.4, Postgres 18, Ollama 0.35.0 и Caddy 2 имат такива образи. Docker сам избира правилния — не е нужен ред platform.03Стъпки
-
Какво ще стои къде
Накрая ще имаш три контейнера в един проект. Защо контейнери? Всяка програма идва с всичко нужно, не пречи на другите и се маха с една команда.
Услуга За какво е Достъп n8n Редактор и двигател за автоматизации само 127.0.0.1:5678на машинатаPostgres Базата на n8n вътрешна, без публикуван порт Ollama Локалните езикови модели вътрешна, без публикуван порт -
Провери машината
Първите две команди показват архитектурата и версиите. Третата пуска малък контейнер с достъп до видеокартата — така знаем, че Docker вижда GPU, преди да сложим Ollama.
bash · на машинатаuname -m docker --version docker compose version docker run --rm --gpus=all nvcr.io/nvidia/cuda:13.0.1-devel-ubuntu24.04 nvidia-smiОчакваш
aarch64, Compose v2 и таблица с видеокартата. В нея редът за памет може да казва „Memory-Usage: Not Supported“ — това е нормално: видеокартата няма отделна памет, а ползва общата (потвърждава NVIDIA).⚠️Не тръгва с GPU?Виж раздела за отстраняване на неизправности в документацията на NVIDIA за контейнерната среда: проверка наnvidia-ctk --version, на/etc/docker/daemon.jsonи рестарт на Docker. Версията на образа на CUDA в командата е по документацията към 01.10.2026 — при по-нова система провери актуалния таг. -
Папка и файл с тайните
Тайните (пароли, ключ за криптиране) не се пишат в compose файла. Държим ги в
.env— Compose го чете сам. Генерираме ги на място, за да няма две инсталации с една и съща „тайна“.bash · ~/n8n-gx10/.envmkdir -p ~/n8n-gx10 && cd ~/n8n-gx10 cat > .env <<EOF N8N_VERSION=2.41.4 OLLAMA_VERSION=0.35.0 POSTGRES_USER=n8n POSTGRES_PASSWORD=$(openssl rand -hex 24) POSTGRES_DB=n8n N8N_ENCRYPTION_KEY=$(openssl rand -hex 32) TZ=Europe/Sofia EOF chmod 600 .env✅Запази ключа извън стекаN8N_ENCRYPTION_KEYшифрова всичките ти достъпи в n8n. Без него, след възстановяване от копие, достъпите не могат да се разшифроват. Препиши го в мениджър на пароли. Версиите са текущите към 01.10.2026 — виж „Обновяване“ по-долу. -
Файлът compose.yaml
Един файл описва целия стек. Четири правила си заслужава да запомниш: версиите са закачени (не
latest), данните са в именувани томове, единственият публикуван порт е на n8n и то само към127.0.0.1, а n8n чака Postgres да е „здрав“, преди да стартира.yaml · ~/n8n-gx10/compose.yamlname: n8n-gx10 services: postgres: image: postgres:18 restart: unless-stopped environment: POSTGRES_USER: ${POSTGRES_USER} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} POSTGRES_DB: ${POSTGRES_DB} PGDATA: /var/lib/postgresql/data volumes: - db_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -h localhost -U ${POSTGRES_USER} -d ${POSTGRES_DB}"] interval: 5s timeout: 5s retries: 10 ollama: image: ollama/ollama:${OLLAMA_VERSION} restart: unless-stopped volumes: - ollama_models:/root/.ollama deploy: resources: reservations: devices: - driver: nvidia count: all capabilities: [gpu] n8n: image: docker.n8n.io/n8nio/n8n:${N8N_VERSION} restart: unless-stopped depends_on: postgres: condition: service_healthy environment: TZ: ${TZ} GENERIC_TIMEZONE: ${TZ} DB_TYPE: postgresdb DB_POSTGRESDB_HOST: postgres DB_POSTGRESDB_PORT: "5432" DB_POSTGRESDB_DATABASE: ${POSTGRES_DB} DB_POSTGRESDB_USER: ${POSTGRES_USER} DB_POSTGRESDB_PASSWORD: ${POSTGRES_PASSWORD} N8N_ENCRYPTION_KEY: ${N8N_ENCRYPTION_KEY} N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS: "true" ports: - "127.0.0.1:5678:5678" volumes: - n8n_data:/home/node/.n8n volumes: db_data: ollama_models: n8n_data:💡Защо точно такаPGDATA — Postgres 18 смени мястото на данните по подразбиране; без този ред базата започва празна (предупреждение от документацията на n8n). Ollama безports— моделът е достъпен само за другите контейнери в проекта, а не за мрежата; така не отваряме Ollama на0.0.0.0. deploy.devices — така Compose иска достъп до видеокартата (формата е от документацията на Docker). 127.0.0.1 — портът на n8n не е видим за другите в мрежата ти.Провери, че файлът е четим (Compose замества променливите и показва резултата — тайните също, затова не го пращай никому):
bashdocker compose config --quiet && echo "compose: OK" -
Стартирай и провери
bashdocker compose up -d docker compose ps curl -sf http://localhost:5678/healthz && echo " n8n е жив"Първия път се теглят образите. След това
docker compose psтрябва да покажеpostgresкатоhealthy, аn8nиollamaкатоrunning. Ако нещо не стои, виж логовете:docker compose logs -f n8n(изход сCtrl+C). -
Отвори редактора от своя компютър
n8n слуша само на самата машина. От твоя компютър стигаш до него през SSH тунел — защитен коридор, който не отваря нищо към мрежата. Адресът на машината е този, с който вече се свързваш по SSH.
bash · на твоя компютърssh -L 5678:localhost:5678 <потребител>@<адрес-на-машината>Остави връзката отворена и отвори
http://localhost:5678в браузъра си. При първо отваряне n8n те кара да създадеш собственически акаунт (имейл, име, парола) — няма друга „основна автентикация“. Ако работиш директно на машината, просто отвори същия адрес.🌐Нужен ти е публичен адрес?Това е друг, по-рисков урок: нужен е домейн, обратен прокси (например Caddy, който сам урежда HTTPS), променливитеN8N_HOST,N8N_PROTOCOL,WEBHOOK_URLиN8N_PROXY_HOPS— виж документацията на n8n. Не го правим тук и не сме го пробвали на GB10. Докато не ти трябва външен webhook, тунелът е достатъчен. -
Ollama: изтегли модел
Моделите се теглят вътре в контейнера на Ollama и стоят в тома
ollama_models— оцеляват при рестарт.bashdocker compose exec ollama ollama pull llama3.1 docker compose exec ollama ollama list docker compose exec ollama ollama run llama3.1 "Кажи „Стекът работи!“ на 3 езика"По ollama.com:
llama3.1(8B) е около 4,9 GB,mistral(7B) — 4,4 GB,gemma2:27b— 16 GB,llama3.1:70b— 43 GB. Паметта е обща: моделът, системата и контейнерите делят едни и същи 128 GB, затова не пускай няколко големи модела наведнъж. ⚠️ Скоростта на отговорите на твоята машина не сме мерили.⚠️Вече имаш Ollama, инсталиран направо в системата?Той по подразбиране слуша само на loopback и контейнерът на n8n не може да го достигне. Най-простото е да ползваш Ollama от този compose (както по-горе). Ако държиш системния, задай адреса му презsudo systemctl edit ollama(променливатаOLLAMA_HOST) — но не на0.0.0.0, защото така моделът става достъпен за цялата мрежа. ⚠️ Този вариант не е тестван от нас; виж настройките в документацията на Ollama. -
Първи работен процес: локален модел оценява запитване
В n8n: Credentials → Create credential → Ollama → Base URL
http://ollama:11434(името на услугата от compose; вътре в контейнераlocalhostе самият контейнер) → Save.След това Workflows → Create workflow и добави:
- възел Webhook — метод POST, път
lead-demo; - възел Basic LLM Chain с промпт „Define below“, например: Оцени от 1 до 10 колко е готово за покупка това запитване и обясни в едно изречение: {{ $json.body.message }};
- към веригата закачи под-възела Ollama Chat Model с твоя credential и модел
llama3.1.
Натисни Listen for test event във Webhook възела и от терминала на машината прати измислено запитване на тестовия адрес:
bashcurl -X POST http://localhost:5678/webhook-test/lead-demo \ -H "Content-Type: application/json" \ -d '{"message":"Здравейте, търсим автоматизация за обработка на заявки, бюджет до 2000 EUR, стартираме този месец."}'Отговорът на модела се появява в изхода на веригата (полето
text). Докато редактираш, работи тестовият адрес/webhook-test/…; за постоянно действие работният процес трябва да е публикуван (бутонът Publish) и да се вика на/webhook/….✅Човек одобрява всяко действие с реален ефектОценката е препоръка. Изпращането на имейл, публикуването в социална мрежа или записът в CRM трябва да минат през одобрение от човек — докато не си сигурен как моделът греши. - възел Webhook — метод POST, път
-
Какво още можеш да автоматизираш
Същият модел „вход → локален модел → одобрение → действие“ върши работа на много места. Идеи, които можеш да изградиш по образеца от стъпка 8 (конкретните възли за външните услуги избери по документацията на n8n):
Идея Вход Какво прави локалният модел Оценка на запитвания Webhook от формата на сайта Оценка и обобщение за екипа Серия имейли График (Schedule) + таблица в Postgres Персонализира текста; изпращането минава през одобрение Чернови за социални мрежи График + списък с теми Пише варианти; публикува човек Седмичен отчет Данни от твои източници Резюме на български с числата Данните на тези процеси (запитвания, имейли) не напускат машината, докато моделът е локален — това е причината да ги вдигнеш тук, а не при облачен доставчик.
-
Сигурност — минимумът
.envе с права 600, не е в Git и не се праща никому.- Ключът
N8N_ENCRYPTION_KEYе препис на сигурно място. - Публикуван е само
127.0.0.1:5678; Postgres и Ollama нямат публикувани портове. - Не слагай
0.0.0.0пред Ollama и не отваряй n8n към интернет без HTTPS и защита. - Паролата на собственическия акаунт е дълга и уникална, а двуфакторното удостоверяване е включено (Settings → Personal → Enable 2FA — по документацията на n8n; пази кодовете за възстановяване).
-
Копия, обновяване и следене
bash · от ~/n8n-gx10mkdir -p backups docker compose exec -T postgres sh -c 'pg_dump -U "$POSTGRES_USER" "$POSTGRES_DB"' > backups/n8n-db-$(date +%Y%m%d).sqlПълното копие има две части: базата и ключът за криптиране (той е във
.env— копирай и този файл на сигурно място). Пази копията и на друго място извън машината — копие на същия диск не пази от повреда на диска.Всеки ден, без да помниш. Сложи горната команда във файл
backup.shв папката на стека (сcdкъм нея в началото) и го пусни по график сcrontab -e, например всеки ден в 03:00:0 3 * * * <пълен-път>/backup.sh. Старите копия чисти отделно (напримерfind backups -name '*.sql' -mtime +30 -delete) — но едва след като си проверил, че копията извън машината стигат.История на изпълненията. n8n сам чисти старите изпълнения: по подразбиране пази до 14 дни (
EXECUTIONS_DATA_MAX_AGE=336часа) и до 10 000 записа (EXECUTIONS_DATA_PRUNE_MAX_COUNT). Ако ти трябват по-кратко или по-дълго, добави тези променливи вenvironmentна n8n.Обновяване. Сменяш числото в
.env(N8N_VERSION,OLLAMA_VERSION) по текущите издания в Docker Hub на n8n и на Ollama, и пускаш (първо направи копие):bashdocker compose pull docker compose up -d --remove-orphans docker compose logs -f n8n --tail=50Не сменяй основната версия на Postgres просто с нов таг — това изисква отделна процедура (виж документацията на Postgres).
Следене.
bashdocker compose ps docker stats --no-stream nvidia-smidocker statsпоказва процесор и памет на контейнерите,nvidia-smi— натоварването на видеокартата (без брояч за памет — виж стъпка 2).
04Проверка
uname -mдаваaarch64и тестът сnvidia-smiв контейнер показва видеокартата.docker compose ps: Postgres еhealthy, Ollama и n8n работят.- Редакторът се отваря през тунела и имаш собственически акаунт.
- Ключът за криптиране е препис извън стека.
- Работният процес връща оценка от локалния модел за измислено запитване.
- Само
127.0.0.1:5678е публикуван. - Има поне едно копие на базата.
Тест
1. Как контейнерът на n8n достига до Ollama в този стек?
2. Защо Ollama няма ред ports в compose файла?
3. Къде е правилно да стои паролата на базата и ключът за криптиране на n8n?
4. Редът „Memory-Usage: Not Supported“ в nvidia-smi на GB10 означава:
05Какво следва
06Източници
- ASUS Ascent GX10: технически данни — процесор, памет, мрежа, система.
- NVIDIA DGX Spark: хардуер · контейнерна среда за Docker · известни особености — 1 PFLOP при FP4 с разреждане, предварително инсталиран Docker, „Memory-Usage: Not Supported“.
- n8n: инсталиране с Docker Compose — Postgres 18 и PGDATA.
- n8n: Ollama credential — Base URL, Ollama в друг контейнер.
- n8n: променливи за средата —
N8N_ENCRYPTION_KEY,WEBHOOK_URL,N8N_PROXY_HOPS. - n8n: двуфакторно удостоверяване · n8n: данни за изпълненията — 2FA, автоматично чистене (336 часа, 10 000 записа).
- Docker Compose: достъп до GPU · Ollama в Docker 🔒 локално.
- n8n в Docker Hub · Ollama в Docker Hub — тагове и архитектури (arm64).
- llama3.1 · mistral · gemma2 🔒 локално — размери на моделите.