1. Dlaczego własny serwer Ollama zamiast subskrypcji ChatGPT Plus?
Korzystanie z komercyjnych API oraz planów subskrypcyjnych generuje stałe koszty za każdego użytkownika i wiąże się z przesyłaniem wrażliwych danych na zewnętrzne serwery. Postawienie własnego stosu **Ollama + Open WebUI** na prywatnym serwerze daje pełną niezależność technologiczną:
- **100% prywatności kodu i dokumentów**: analizowane umowy, bazy danych i kod źródłowy nigdy nie opuszczają Twojej infrastruktury, co gwarantuje pełną zgodność z RODO oraz NDA.
- **Wbudowany system RAG (Retrieval-Augmented Generation)**: możesz wgrywać pliki PDF, dokumentację Markdown i arkusze danych bezpośrednio do czatu, tworząc własną bazę wiedzy bez zewnętrznych baz wektorowych.
- **Kompatybilność ze standardem OpenAI API**: serwer wystawia gotowe endpointy `/v1/chat/completions`, dzięki czemu jednym kliknięciem podepniesz go pod **n8n**, **Cursor AI** czy własne skrypty w Pythonie.
- **100% prywatności kodu i dokumentów**: analizowane umowy, bazy danych i kod źródłowy nigdy nie opuszczają Twojej infrastruktury, co gwarantuje pełną zgodność z RODO oraz NDA.
- **Wbudowany system RAG (Retrieval-Augmented Generation)**: możesz wgrywać pliki PDF, dokumentację Markdown i arkusze danych bezpośrednio do czatu, tworząc własną bazę wiedzy bez zewnętrznych baz wektorowych.
- **Kompatybilność ze standardem OpenAI API**: serwer wystawia gotowe endpointy `/v1/chat/completions`, dzięki czemu jednym kliknięciem podepniesz go pod **n8n**, **Cursor AI** czy własne skrypty w Pythonie.
2. Wymagania sprzętowe: CPU vs dedykowane GPU
Wybór maszyny zależy od tego, jak szybko model ma generować tokeny. Na klasycznym serwerze VPS bez karty graficznej skwantyzowane modele **7B / 8B (Q4_K_M)** wymagają **minimum 16 GB pamięci RAM** i nowoczesnego procesora (AMD EPYC), osiągając prędkość ok. **6–12 tokenów na sekundę**.
Jeśli potrzebujesz błyskawicznej inferencji rzędu **60–110 tokenów/s** dla wielu jednoczesnych zapytań z potoków AI, wybierz instancję z dedykowanym GPU (np. **RTX 3090 / RTX 4090 24 GB VRAM**), gdzie cały model mieści się bezpośrednio w szybkiej pamięci karty.
Jeśli potrzebujesz błyskawicznej inferencji rzędu **60–110 tokenów/s** dla wielu jednoczesnych zapytań z potoków AI, wybierz instancję z dedykowanym GPU (np. **RTX 3090 / RTX 4090 24 GB VRAM**), gdzie cały model mieści się bezpośrednio w szybkiej pamięci karty.
3. Przygotowanie systemu Ubuntu i katalogów roboczych
Zaloguj się na swój serwer przez SSH i przygotuj strukturę katalogów w `/opt/ai-stack`. Jeśli nie masz jeszcze zainstalowanego silnika **Docker**, poniższy skrypt zainstaluje go automatycznie wraz z wtyczką Compose:
terminal
apt update && apt upgrade -y
curl -fsSL https://get.docker.com | sh
mkdir -p /opt/ai-stack && cd /opt/ai-stack4. Plik docker-compose.yml: Ollama, Open WebUI i Caddy SSL
Tworzymy kompletną architekturę złożoną z trzech izolowanych kontenerów: silnika inferencyjnego **Ollama**, nowoczesnego interfejsu **Open WebUI** oraz serwera **Caddy**, który zabezpiecza ruch szyfrowanym certyfikatem **Let's Encrypt SSL**.
Wskazówka: Jeśli uruchamiasz ten stos na serwerze z kartą NVIDIA i zainstalowanym NVIDIA Container Toolkit, dodaj w sekcji usługi ollama blok: deploy -> resources -> reservations -> devices (driver: nvidia, count: all, capabilities: [gpu]).
/opt/ai-stack/docker-compose.yml
services:
ollama:
image: ollama/ollama:latest
container_name: ollama
restart: unless-stopped
environment:
- OLLAMA_KEEP_ALIVE=24h
- OLLAMA_NUM_PARALLEL=2
volumes:
- ollama_storage:/root/.ollama
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: open-webui
restart: unless-stopped
environment:
- OLLAMA_BASE_URL=http://ollama:11434
- WEBUI_SECRET_KEY=${WEBUI_SECRET_KEY}
- ENABLE_SIGNUP=${ENABLE_SIGNUP}
- DEFAULT_USER_ROLE=pending
volumes:
- webui_storage:/app/backend/data
depends_on:
- ollama
caddy:
image: caddy:latest
container_name: caddy-ai
restart: unless-stopped
ports:
- '80:80'
- '443:443'
volumes:
- caddy_data:/data
- caddy_config:/config
command: caddy reverse-proxy --from https://${SUBDOMAIN} --to http://open-webui:8080
volumes:
ollama_storage:
webui_storage:
caddy_data:
caddy_config:5. Konfiguracja zmiennych środowiskowych .env
W katalogu `/opt/ai-stack` utwórz plik `.env`. Flaga `ENABLE_SIGNUP=false` po utworzeniu pierwszego konta administratora całkowicie zablokuje osobom postronnym możliwość rejestracji w Twoim panelu:
/opt/ai-stack/.env
SUBDOMAIN=ai.twojadomena.pl
WEBUI_SECRET_KEY=TwojSuperTajnyKluczSzyfrowaniaSesji2026!
ENABLE_SIGNUP=true6. Uruchomienie stosu i pobranie modeli (Qwen 2.5 / Llama 3)
Uruchom kontenery w tle, a następnie pobierz zoptymalizowane modele bezpośrednio do wolumenu **Ollama**. Modele z rodziny **Qwen 2.5** świetnie radzą sobie z językiem polskim, pisaniem kodu oraz generowaniem ustrukturyzowanych plików JSON:
terminal
docker compose up -d
# Pobranie szybkiego modelu Qwen 2.5 (7B) do zadań ogólnych i kodu
docker exec -it ollama ollama pull qwen2.5:7b
# Pobranie modelu embeddingów pod lokalny system RAG (dokumenty PDF/MD)
docker exec -it ollama ollama pull nomic-embed-text7. Podpięcie lokalnego API pod n8n oraz system RAG
Po wejściu na `https://ai.twojadomena.pl` utwórz pierwsze konto administratora, a następnie w pliku `.env` zmień `ENABLE_SIGNUP=false` i przeładuj kontener komendą `docker compose up -d`.
Aby połączyć swój nowy serwer AI z automatyzacjami w **n8n**, przejdź w Open WebUI do **Settings -> Account**, wygeneruj klucz **API Key** i użyj w n8n standardowego węzła **OpenAI Chat Model**, podając jako **Base URL** adres `https://ai.twojadomena.pl/api`.
Aby połączyć swój nowy serwer AI z automatyzacjami w **n8n**, przejdź w Open WebUI do **Settings -> Account**, wygeneruj klucz **API Key** i użyj w n8n standardowego węzła **OpenAI Chat Model**, podając jako **Base URL** adres `https://ai.twojadomena.pl/api`.
Często zadawane pytania (FAQ)
Jak zablokować dostęp do rejestracji nowym użytkownikom po pierwszym uruchomieniu?
Pierwsze zarejestrowane konto w Open WebUI automatycznie otrzymuje uprawnienia administratora. Zaraz po jego założeniu zmień w pliku .env wartość ENABLE_SIGNUP=false i wykonaj docker compose up -d, lub wyłącz rejestrację bezpośrednio w panelu Admin Panel -> Settings -> General.
Dlaczego zmienna OLLAMA_KEEP_ALIVE=24h jest tak istotna?
Domyślnie Ollama zwalnia model z pamięci RAM/VRAM po 5 minutach bezczynności, co powoduje kilkunastosekundowe opóźnienie (cold start) przy kolejnym zapytaniu z webhooka. Ustawienie wartości 24h utrzymuje załadowany model w pamięci przez całą dobę, zapewniając natychmiastowy czas odpowiedzi.