Lokalna Ollama z WebUI + n8n w kontenerze – analiza maila ze statystykami

# Środowisko domowe
Serwer lokalny (Debian, Docker + Docker compose)
Domena lokalna: jakas_domena.lan
AdGuard: lokalny DNS cache + adblocker + przepisywanie subdomena.jakas_domena.lan na adres IP serwera
nginx-proxy-manager: SSL dla wszystkich subdomen (cert dla jakas_domena.lan), przekierowanie domeny na odpowiedni port (apki działają jako kontenery, nasłuchują na konkretnych portach)
+ kilka innych pierdół, które nie są konieczne do podania w tym wpisie 😉

 

1. Instalacja Ollama + Ollama WebUI uruchomiona w kontenerze

Z oficjalnej strony: curl -fsSL https://ollama.com/install.sh | sh

Po instalacji Ollama nasłuchiwała tylko na localhoście. Stwierdziłem, że skoro już działa lokalnie to można się przesiąść z ChataGPT na rzecz niej. Niby nie wrzucam żadnych danych wrażliwych, no ale lokalnie to lokalnie. Konieczne było wyedytowanie pliku /etc/systemd/system/ollama.service i dorzucenie zmiennej środowiskowej:
Environment=OLLAMA_HOST=0.0.0.0:11434 ,
a następnie systemctl daemon-reload i systemctl restart ollama.

Gdy już uruchomiła się poprawnie pobrałem model gemma3: ollama run gemma3 . Stwierdziłem, że przydałby się jakiś webui. Najpierw z pomocą ChataGPT zrobiłe prostą stronę + serwowałem ją z wykorzystaniem kontenera nginx. Była słaba. Doczytałem w necie i znalazłem Ollama WebUI. Wywaliłem nginx.

Plik docker-compose.yml dla Ollama WebUI, która korzysta z Ollamy lokalnej:

services:
ollama-webui:
image: ghcr.io/ollama-webui/ollama-webui:latest
container_name: ollama-webui
environment:
– OLLAMA_API_BASE_URL=http://adres_ip_serwera:11434/api
ports:
– „port_na_jakim_nasłuchuje_publicznie:8080”
restart: unless-stopped

Dorzuciłem webui do nginx-proxy-managera (który ogarniał też SSL). Konieczne było jeszcze rekonfigurowanie AdGuarda, który jako lokalny dns przepisuje również domeny w sieci lokalnej.

Pierwszy wniosek (którego by nie było, gdyby się czytało wymagania sprzętowe) – generuje duże obciążenie serwera. Ale działa 🙂

 

2. n8n lokalnie w kontenerze

Wg oficjalnej dokumentacji uruchomimy sobie kontener, który będzie działał do momentu zamknięcia. Chciałbym jednak kontener działający ciągle, a najlepiej gdyby ogarniał mi jeszcze domenę n8n.moja_domena.

docker create \
–name n8n \
-p 8086:5678 \
-e GENERIC_TIMEZONE=”Europe/Warsaw” \
-e TZ=”Europe/Warsaw” \
-e N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true \
-e N8N_RUNNERS_ENABLED=true \
-v n8n_data:/home/node/.n8n \
docker.n8n.io/n8nio/n8n:latest

Poźniej tylko klasycznie: adguard -> przepisywanie DNS oraz nginx-proxy-manager -> Add Proxy Host.

** Podczas tworzenia kontenera możemy zdefiniować od razu domenę, jednakże w moim przypadku to jest niepotrzebne, ponieważ nginx-proxy-manager to ogarnia.

* Konfiguracja w nginx-proxy-manager (wymienione włączone checkboxy):
[Details]
Scheme: https/http (w zależności od tego jak nasłuchuje usługa)
Forward Hostname/IP: IP serwera
Forward Port: port, na jakim nasłuchuje usługa
Cache Assets
Block Common Exploits
Websocket Support (włączone tylko w przypadku n8n)

[SSL]
SSL Certificate: wybieram domenę, dla której utworzony jest cert
Force SSL
HTTP/2 Support
HSTS Enabled

 

3. Spięcie n8n z ollamą

Spięcie obu narzędzi ze sobą polega jedynie na podaniu adresu IP serwera Ollamy oraz wybraniu Modelu.

Tutaj dłuższy czas walczyłem z tym, cały czas wywalało utratę połączenia z serwerem. Po różnych modyfikacjach kontenera itp. okazało się, że brakowało włączonej opcji Websocket Support w przypadku subdomeny dla n8n. Po włączeniu opcji i ponownym utworzeniu kontenera wszystko ruszyło.

 

4. Workflow analizujący staty z serwera (tylko w celach testowych n8n)

Codziennie na maila dostaję statystyki z serwera dotyczące statusu usług, df, free, kontenery itp. Chciałbym, żeby za pomocą lokalnej Ollamy przeanalizował to i w przypadku problemu poinformował mnie, że coś na serwerze jest nie tak. Jako feedback wykorzystuję Todoist.

Wyszło coś takiego jak poniżej. Dodam tylko, że workflow dodatkowo wykorzystuje 2 skrypty bashowe uruchamiane lokalnie na serwerze domowym. Konieczne również było utworzenie dodatkowego wolumenu na pliki.

 

Zaktualizowany kontener n8n:
docker create \
–name n8n \
-p 8086:5678 \
-e GENERIC_TIMEZONE=”Europe/Warsaw” \
-e TZ=”Europe/Warsaw” \
-e N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true \
-e N8N_RUNNERS_ENABLED=true \
-v n8n_data:/home/node/.n8n \
-v katalog_dla_public:/public \
docker.n8n.io/n8nio/n8n:latest

W celu świadczenia usług na najwyższym poziomie stosujemy pliki cookies, które będą zamieszczane w Państwa urządzeniu (komputerze, laptopie, smartfonie). W każdym momencie mogą Państwo dokonać zmiany ustawień Państwa przeglądarki internetowej i wyłączyć opcję zapisu plików cookies. View more
Zaakceptuj