Instalacja n8n AI Starter Kit z Ollama
Szablon Docker Compose Self-hosted AI Starter Kit od zespołu n8n służy do budowania przepływów pracy AI, które działają w całości na własnym serwerze. Zapytania (prompty) i dokumenty są przetwarzane przez lokalny model językowy i nie są wysyłane do zewnętrznych usług AI.
Zestaw zawiera cztery komponenty:
- n8n, platformę do automatyzacji przepływów pracy z węzłami AI;
- Ollama, która uruchamia otwarte modele językowe lokalnie;
- Qdrant, wektorową bazę danych do przechowywania i wyszukiwania osadzeń (embeddings) dokumentów;
- PostgreSQL, bazę danych dla n8n.
Oficjalny zestaw jest oznaczony przez jego autorów jako przeznaczony do testów. W momencie pisania tego tekstu, uruchomiony zgodnie z opisem w pliku README, ma kilka problemów na serwerze z publicznym adresem IP: n8n, Ollama i Qdrant są wystawione do internetu, Ollama i Qdrant nie mają uwierzytelniania, sekrety w konfiguracji są takie same dla każdej instalacji, a demo przepływu pracy nie jest importowane. Ten przewodnik instaluje zestaw w stanie nienaruszonym i naprawia wszystko to za pomocą osobnego pliku zastępującego (override), dzięki czemu nadal można aktualizować zestaw z jego repozytorium.
Ten przewodnik jest napisany dla Ubuntu 24.04 LTS, n8n 2.47.3, Ollama 0.40.16, Qdrant 1.20.0, Docker 29 i Docker Compose v5.
Zanim zaczniesz
Będziesz potrzebować:
- serwera z systemem Ubuntu 24.04 LTS z dostępem root przez SSH;
- co najmniej 15 GB wolnego miejsca na dysku: obrazy Docker zajmują około 11 GB, a domyślny model Llama 3.2 około 2 GB;
- domeny lub subdomeny dla n8n, na przykład
n8n.example.com, z rekordem A wskazującym na adres IPv4 serwera.
Bez GPU model działa na procesorze (CPU) i odpowiada wolno. Do regularnego użytku wybierz serwer z kartą graficzną NVIDIA.
Wszystkie poniższe polecenia są uruchamiane jako root. Jeśli pracujesz jako zwykły użytkownik z uprawnieniami sudo, dodaj sudo przed każdym poleceniem.
Zainstaluj Docker
Zainstaluj Docker Engine i wtyczkę Compose z oficjalnego repozytorium 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
Dodaj repozytorium:
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
Zainstaluj pakiety i sprawdź wersje:
apt update apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker --version docker compose version
Pobierz zestaw
Sklonuj repozytorium do /opt i utwórz plik konfiguracyjny na podstawie przykładu:
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
Zastąp domyślne sekrety
Plik przykładowy zawiera stałe wartości, takie jak password dla PostgreSQL i super-secret-key dla klucza szyfrującego n8n. Są one takie same w każdej kopii zestawu, więc zastąp je losowymi:
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 szyfruje poświadczenia zapisywane w n8n. N8N_USER_MANAGEMENT_JWT_SECRET podpisuje sesje użytkowników.
Skopiuj plik .env w bezpieczne miejsce poza serwerem, na przykład do menedżera haseł. Bez N8N_ENCRYPTION_KEY poświadczenia zapisane w n8n nie mogą zostać odszyfrowane po przywróceniu kopii zapasowej.
Zamknij porty i dodaj HTTPS
W pliku docker-compose.yml zestawu, n8n (port 5678), Ollama (11434) i Qdrant (6333) są opublikowane na wszystkich interfejsach sieciowych. Docker dodaje własne reguły zapory sieciowej dla opublikowanych portów, które omijają UFW. Na serwerze z publicznym adresem IP oznacza to, że każdy może otworzyć edytor n8n przez zwykłe HTTP i korzystać z API Ollama i Qdrant, które nie mają uwierzytelniania.
Zamiast edytować docker-compose.yml, utwórz obok niego plik docker-compose.override.yml. Docker Compose odczytuje ten plik automatycznie i nakłada go na główny plik. Własne pliki zestawu pozostają niezmienione, więc ich aktualizacja z repozytorium nie nadpisze Twoich ustawień.
Utwórz /opt/self-hosted-ai-starter-kit/docker-compose.override.yml i zastąp n8n.example.com swoją domeną:
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:
Oto co zmienia ten plik:
- n8n nasłuchuje tylko na
127.0.0.1, a użytkownicy docierają do niego przez Caddy po HTTPS; - Ollama i Qdrant nie są w ogóle publikowane, n8n dociera do nich przez wewnętrzną sieć Docker, używając nazw
ollamaiqdrant; - Caddy jest dodawany jako odwrotne proxy (reverse proxy), które pobiera i odnawia certyfikat Let's Encrypt, o ile domena wskazuje na serwer, a porty 80 i 443 są otwarte;
- wolumeny danych dla n8n, PostgreSQL, Qdrant i Ollama pozostają takie, jak zdefiniowano w pliku
docker-compose.ymlzestawu, plik override ich nie zmienia.
Linia networks: ['demo'] jest wymagana. Wszystkie usługi zestawu działają w sieci o nazwie demo, a bez tej linii Caddy nie może połączyć się z n8n i zwraca błąd 502.
N8N_WEBHOOK_URL ustawia adres, którego n8n używa dla webhooków, w tym okna czatu w edytorze. Domena musi rozwiązywać się na Twój serwer z komputera, na którym otwierasz n8n. Jeśli tak nie jest, czat pokazuje tylko komunikat "Failed to receive response", nie wskazując na DNS jako przyczynę.
Utwórz /opt/self-hosted-ai-starter-kit/Caddyfile ze swoją domeną:
n8n.example.com { reverse_proxy n8n:5678 }
Sprawdź scaloną konfigurację:
docker compose --profile cpu config | grep -A4 "ports:"
Powinny być wymienione tylko n8n na 127.0.0.1:5678 i Caddy na portach 80 i 443.
Skonfiguruj zaporę sieciową
Plik override już trzyma wewnętrzne usługi zestawu z dala od sieci. UFW blokuje cały inny przychodzący ruch do serwera, z wyjątkiem SSH, HTTP i HTTPS. Zezwól na nie i włącz UFW:
ufw allow OpenSSH ufw allow 80/tcp ufw allow 443/tcp ufw --force enable
Uruchom zestaw
Uruchom stos w trybie CPU:
docker compose --profile cpu up -d
Przy pierwszym uruchomieniu Docker pobiera około 11 GB obrazów, a osobny kontener pobiera model Llama 3.2. Zajmuje to chwilę, w zależności od szybkości połączenia. Sprawdź, czy model jest na miejscu:
docker exec ollama ollama list
Lista powinna zawierać llama3.2:latest.
Sprawdź, czy na serwerze otwarte są tylko oczekiwane porty:
ss -tlnp
Porty 80 i 443 powinny być otwarte na wszystkich interfejsach, port 5678 tylko na 127.0.0.1. Porty 11434 i 6333 nie powinny znajdować się na liście.
Zestaw używa PostgreSQL 16. Dziennik n8n może pokazywać ostrzeżenie, że ta wersja jest poza obsługiwanym zakresem. To ostrzeżenie nie wpływa na działanie n8n.
Zaimportuj demo przepływu pracy
Zestaw zawiera demo przepływu pracy i dwa demo poświadczeń. Mają one być importowane przy pierwszym uruchomieniu, ale w momencie pisania tego tekstu sprawdzanie importu w pliku docker-compose.yml zestawu nigdy nie przechodzi, więc nic nie jest importowane. Uruchom import ręcznie:
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"
Opcja -c jest wymagana: usługa n8n-import uruchamia powłokę, a bez -c polecenie kończy się błędem "can't open 'n8n'".
Utwórz konto właściciela
Otwórz https://n8n.example.com w przeglądarce i utwórz konto właściciela: wprowadź swój e-mail, imię i nazwisko oraz hasło składające się z co najmniej 8 znaków, w tym co najmniej jednej cyfry i jednej wielkiej litery. Po pierwszym logowaniu n8n może wyświetlić krótką ankietę i ofertę darmowego klucza licencyjnego dla niektórych funkcji Community Edition. Oba są opcjonalne.
Strona przeglądu wymienia zaimportowany Demo workflow.

Napraw demo poświadczeń
Demo poświadczeń zostały zaszyfrowane domyślnym kluczem z .env.example. Po zastąpieniu N8N_ENCRYPTION_KEY, n8n nie może ich odszyfrować, więc oba muszą zostać wypełnione ponownie. Ustawienia są zapisywane zaszyfrowane Twoim własnym kluczem.
Otwórz Overview, przejdź do zakładki Credentials i otwórz Local Ollama service. Połączenie nie powiedzie się, a pole Base URL pokaże http://localhost:11434. Wewnątrz kontenera n8n, localhost to samo n8n, a nie Ollama.

Ustaw Base URL na http://ollama:11434, pozostaw API Key puste i kliknij Save. n8n przetestuje połączenie i pokaże Connection tested successfully.

Otwórz Local QdrantApi database. Ustaw Qdrant URL na http://qdrant:6333, pozostaw API Key puste i kliknij Save.

Przetestuj demo przepływu pracy
Otwórz Demo workflow. Zawiera trzy węzły: Chat Trigger odbiera wiadomość, Basic LLM Chain przekazuje ją do modelu, a Ollama Chat Model wysyła ją do Llama 3.2 w Ollama.

Kliknij Open chat na dole płótna i wyślij krótkie pytanie. Węzły zmieniają kolor na zielony w miarę działania przepływu pracy, a odpowiedź modelu pojawia się w czacie. Pierwsza odpowiedź zajmuje więcej czasu, ponieważ Ollama ładuje model do pamięci.

Jeśli czat pokazuje "Failed to receive response", a przepływ pracy się nie uruchamia, sprawdź, czy domena w N8N_WEBHOOK_URL rozwiązuje się na Twój serwer z Twojego komputera.
Użyj karty graficznej NVIDIA GPU
Jeśli serwer ma kartę NVIDIA GPU, zestaw może uruchomić na niej Ollama. Docker potrzebuje do tego NVIDIA Container Toolkit. Jeśli wcześniej nie używałeś GPU z Dockerem na tym serwerze, najpierw zainstaluj go, postępując zgodnie z instrukcjami Docker dla Ollama.
Następnie uruchom zestaw z profilem gpu-nvidia zamiast cpu:
docker compose --profile gpu-nvidia up -d
Powyższy plik override już zamyka port Ollama dla tego profilu. Użyj tego samego profilu we wszystkich innych poleceniach. Na przykład, import demo z profilem 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"
I aktualizacja:
cd /opt/self-hosted-ai-starter-kit git pull docker compose --profile gpu-nvidia pull docker compose --profile gpu-nvidia up -d
Zaktualizuj zestaw
Aby zaktualizować pliki i obrazy zestawu, uruchom polecenia z używanym profilem:
cd /opt/self-hosted-ai-starter-kit git pull docker compose --profile cpu pull docker compose --profile cpu up -d
Twój docker-compose.override.yml, Caddyfile i .env nie są częścią repozytorium, więc git pull ich nie zmienia.
Co dalej
Zestaw jest gotowy do Twoich własnych przepływów pracy AI. Stąd możesz:
- Pobrać inne modele za pomocą
docker exec ollama ollama pull, a następnie nazwy modelu, i wybrać je w węźle Ollama Chat Model; - Użyć Qdrant do przeszukiwania własnych dokumentów za pomocą węzłów wektorowej bazy danych w n8n;
- Połączyć swoje usługi i budować przepływy pracy, które łączą je z lokalnym modelem.
Ogólną instalację n8n bez komponentów AI znajdziesz w przewodniku Instalacja n8n z Dockerem i PostgreSQL . Wyjaśnia on również, jak tworzyć kopie zapasowe i przywracać bazę danych n8n.