Lokálna AI – inštalácia Ollama a Qwen cez Docker Compose na Ubuntu Server 24.04 LTS vo VirtualBoxe

Lokálna umelá inteligencia (AI) – Ollama, Qwen a Docker
Lokálna umelá inteligencia (Local AI) predstavuje spôsob prevádzkovania jazykových modelov (LLM – Large Language Models) priamo na vlastnom počítači, virtuálnom serveri alebo fyzickom serveri bez potreby využívania externých cloudových AI služieb.
Na rozdiel od cloudových riešení, pri ktorých sa používateľské požiadavky spracúvajú na vzdialených serveroch poskytovateľa, lokálna AI umožňuje vykonávať celé spracovanie údajov vo vlastnej infraštruktúre.
V tomto projekte je lokálna AI postavená na nasledujúcich technológiách:
- Oracle VirtualBox – virtualizačná platforma umožňujúca vytvorenie samostatného virtuálneho servera.
- Ubuntu Server 24.04 LTS – operačný systém zabezpečujúci stabilné prostredie na prevádzku aplikácií.
- Docker Compose – nástroj na správu a spúšťanie kontajnerových aplikácií.
- Ollama – nástroj umožňujúci lokálne spúšťanie a správu jazykových modelov.
- Qwen – rodina jazykových modelov určených na spracovanie prirodzeného jazyka, generovanie textu, programovanie a ďalšie úlohy.
- Open WebUI – webové rozhranie umožňujúce pohodlnú komunikáciu s lokálnou AI prostredníctvom internetového prehliadača.
Bezpečnosť a ochrana údajov
Jednou z najväčších výhod lokálnej umelej inteligencie je kontrola nad spracovaním a ukladaním údajov.
Pri správne nakonfigurovanom lokálnom riešení prebieha komunikácia s AI modelom a spracovanie požiadaviek priamo na vlastnom serveri.
To znamená, že:
- Údaje zostávajú lokálne – používateľské otázky, odpovede a história konverzácií sa spracúvajú a ukladajú v lokálnej infraštruktúre.
- Bez odosielania do cloudových AI služieb – pri použití výhradne lokálnych modelov nie je potrebné posielať obsah konverzácií externým poskytovateľom AI.
- Kontrola nad dátami – správca systému rozhoduje o ukladaní, zálohovaní, prístupových oprávneniach a odstraňovaní údajov.
- Prevádzka bez internetu – po stiahnutí potrebných modelov a komponentov môže samotná AI fungovať aj bez aktívneho internetového pripojenia.
- Prístup cez LAN alebo VPN – k AI serveru je možné bezpečne pristupovať z ďalších počítačov v lokálnej sieti alebo prostredníctvom zabezpečeného VPN pripojenia.
Dôležité bezpečnostné upozornenie
Samotná lokálna prevádzka automaticky nezaručuje úplnú bezpečnosť ani to, že nedochádza k žiadnej externej komunikácii.
Na zabezpečenie súkromia je potrebné používať lokálne AI modely, správne nakonfigurovať Docker kontajnery, obmedziť sieťový prístup a nepovoľovať externé AI API, cloudové integrácie ani MCP nástroje, ktoré by mohli odosielať údaje mimo lokálnej infraštruktúry.
Aktualizácie, sťahovanie modelov a niektoré voliteľné funkcie môžu vyžadovať internetové pripojenie.
Výhody lokálnej AI
Lokálna AI poskytuje vysokú mieru nezávislosti, kontroly nad údajmi a flexibilitu pri nasadzovaní. Je vhodná pre domáce laboratóriá, vývojové prostredia, interné firemné systémy aj organizácie, ktoré nechcú odosielať citlivé informácie externým AI službám.
Vďaka technológii Docker Compose je možné celé riešenie jednoducho spravovať, zálohovať a migrovať medzi virtuálnymi a fyzickými servermi.
Cieľom projektu je vytvoriť vlastného AI asistenta, ktorý bude dostupný cez webový prehliadač alebo vývojové prostredie Visual Studio Code a ktorého spracovanie údajov zostane pod kontrolou správcu lokálnej infraštruktúry.
Podporované operačné systémy
| Operačný systém | Docker | Odporúčanie |
|---|---|---|
| Ubuntu Server 24.04 LTS | Áno | Odporúčané |
| Ubuntu Server 22.04 LTS | Áno | Vhodné |
| Debian 12 / 13 | Áno | Vhodné |
| Windows 11 + Docker Desktop | Áno | Testovanie |
| Windows Server | Podmienečne | Linux VM |
| Fedora / Rocky Linux | Áno | Vhodné |
| macOS | Áno | Lokálne použitie |
| Raspberry Pi OS 64-bit | Áno | Menšie modely |
Minimálne a odporúčané hardvérové požiadavky
| Komponent | Minimum | Odporúčané |
|---|---|---|
| CPU | 4 vCPU | 8–16 vCPU |
| RAM | 8 GB | 16–32 GB |
| Disk | 40 GB SSD | 100–200 GB SSD |
| GPU | Nie je potrebná | NVIDIA 12–24 GB VRAM |
| Sieť | 100 Mb/s | 1 Gb/s |
| Docker | Docker Engine + Compose | Aktuálna stabilná verzia |
| OS | 64-bit Linux | Ubuntu Server 24.04 LTS |
Hodnoty sú orientačné pre menšie kvantizované AI modely.
Nároky AI modelov na RAM
| Veľkosť modelu | RAM bez GPU | Využitie |
|---|---|---|
| 1–2B | 4–8 GB | Jednoduchý chat |
| 3–4B | 8–12 GB | Chat, základný kód |
| 7–8B | 12–16 GB | Univerzálny asistent |
| 14B | 20–32 GB | Náročnejšie úlohy |
| 32B | 32–48 GB a viac | Pokročilé programovanie |
| 70B | 64 GB a viac | Výkonný AI server |
Orientačné požiadavky pri približne 4-bitovej kvantizácii. Spotreba pamäte závisí aj od dĺžky kontextu a konkrétneho modelu.
1. Príprava virtuálneho servera vo VirtualBoxe
Zvolíme možnosť Nový.

Zadáme názov virtuálneho počítača a vyberieme ISO obraz Ubuntu Servera.

Následne klikneme na Set up unattended guest OS Installation
Vyplníme používateľské meno a heslo.

Potom ideme na možnosť Specify virtual hardware
Keďže môj notebook disponuje 32 GB operačnej pamäte RAM, tak si môžem dovoliť nastaviť 16384 MB a Number of CPUs 4. A disk odporúčam 100 GB

Následne klikneme na tlačidlo Dokončiť.

Následne sa spustí inštalácia operačného systému.


Klikneme na tlačidlo Zobraziť.

Uvidíme priebeh inštalácie

Po dokončení inštalácie sa prihlásime pomocou prihlasovacích údajov, ktoré sme zadali pri vytváraní virtuálneho počítača.

Úspešné prihlásenie

Inštalácia a aktivácia SSH servera
Overíme, či je na Ubuntu Serveri nainštalovaný SSH server.
sudo systemctl status ssh
Ak SSH server nie je nainštalovaný, nainštalujeme ho nasledujúcimi príkazmi:
sudo apt update
sudo apt install openssh-server -y
Následne nastavíme automatické spúšťanie SSH služby pri štarte systému.
sudo systemctl enable --now ssh
2. Konfigurácia siete a SSH prístupu vo VirtualBoxe
Volíme nastavenia

Nájdeme sieť

Klikneme na Expert

Ponecháme sieťový režim NAT a zvolíme Presmerovanie portov.
Je potrebné nastaviť následovne
- Názov – ssh
- Protocol – TCP
- Host IP – 127.0.0.1
- Host Port 2222
- Guest IP – (nechať prázdne)
- Guest Port 22
Keďže budeme Open WebUI používať prostredníctvom webového prehliadača, vo VirtualBoxe nastavíme aj presmerovanie TCP portu 3000. Tento port umožní prístup k webovému rozhraniu z hostiteľského počítača.
Nastavenie presmerovania portov:
- Názov: Open-WebUI
- Protocol: TCP
- Host IP: 127.0.0.1
- Host Port: 3000
- Guest IP: necháme prázdne
- Guest Port: 3000

Potom cez terminál je možné sa pripojiť následovne
ssh -p 2222 uzivatel@127.0.0.1
Výsledok

3. Príprava Ubuntu a Docker repozitára
sudo apt update && sudo apt upgrade -y
Nainštalujte potrebné balíky
sudo apt install -y ca-certificates curl
Pridanie oficiálneho Docker repozitára
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
-o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
Potom pridáme repozitár
sudo tee /etc/apt/sources.list.d/docker.sources > /dev/null <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF
Obnovíme zoznam balíkov.
sudo apt update
4. Inštalácia Dockeru
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
5. Overenie inštalácie Dockeru
sudo systemctl is-active docker
docker --version
docker compose version
Môžeme otestovať kontajner
sudo docker run --rm hello-world
6. Vytvorenie Docker Compose konfigurácie
Najskôr vytvoríme pracovný adresár pre konfiguráciu lokálnej AI a následne sa doň presunieme.
mkdir -p ~/docker/ai
cd ~/docker/ai
Pomocou textového editora Nano vytvoríme a otvoríme konfiguračný súbor docker-compose.yml, v ktorom definujeme služby Ollama a Open WebUI.
nano docker-compose.yml
Vložíme obsah
services:
ollama:
image: ollama/ollama:latest
container_name: ollama
restart: unless-stopped
volumes:
- ollama_data:/root/.ollama
networks:
- ai-network
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: open-webui
restart: unless-stopped
depends_on:
- ollama
ports:
- "3000:8080"
environment:
- OLLAMA_BASE_URL=http://ollama:11434
- WEBUI_SECRET_KEY=${WEBUI_SECRET_KEY}
volumes:
- open_webui_data:/app/backend/data
networks:
- ai-network
networks:
ai-network:
driver: bridge
volumes:
ollama_data:
open_webui_data:
Poznámka k sieťovej bezpečnosti
V konfigurácii Docker Compose používame presmerovanie portu 3000:8080, kde port 3000 predstavuje port virtuálneho Ubuntu Servera a port 8080 je interný port kontajnera Open WebUI.
Vo VirtualBoxe sme nastavili presmerovanie portu 3000 na adresu 127.0.0.1 hostiteľského počítača. Vďaka tomu je možné otvoriť webové rozhranie z Windows 11 na adrese http://127.0.0.1:3000.
Dôležité: Docker sprístupňuje port 3000 na všetkých sieťových rozhraniach virtuálneho Ubuntu Servera. Pri nasadení na fyzický server preto odporúčame obmedziť prístup firewallom, nastaviť vhodné sieťové pravidlá a podľa potreby zabezpečiť komunikáciu pomocou HTTPS.
7. Vytvorenie bezpečnostného kľúča
Pre zabezpečenie aplikácie Open WebUI vytvoríme náhodný bezpečnostný kľúč WEBUI_SECRET_KEY, ktorý sa uloží do súboru .env v pracovnom adresári Docker Compose.
Následne nastavíme prístupové oprávnenia tak, aby súbor mohol čítať a upravovať iba jeho vlastník.
printf 'WEBUI_SECRET_KEY=%s\n' "$(openssl rand -hex 32)" > .env
chmod 600 .env
8. Kontrola konfigurácie
Pred spustením kontajnerov overíme správnosť konfigurácie Docker Compose vrátane načítania premenných zo súboru .env.
sudo docker compose config --quiet
Ak príkaz nezobrazí žiadnu chybu, konfigurácia prešla kontrolou a môžeme pokračovať spustením kontajnerov. Táto kontrola však ešte nezaručuje, že sa všetky služby úspešne spustia.
9. Spustenie kontajnerov
Po úspešnej kontrole konfigurácie spustíme kontajnery Ollama a Open WebUI na pozadí pomocou Docker Compose. Pri prvom spustení sa automaticky stiahnu potrebné Docker obrazy, ak ešte nie sú dostupné lokálne.
sudo docker compose up -d
Po spustení overíme stav kontajnerov a skontrolujeme, či sú obe služby aktívne. Kontajner Open WebUI by mal po dokončení inicializácie zobrazovať stav healthy, ak je kontrola dostupnosti nakonfigurovaná.
sudo docker compose ps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
ollama ollama/ollama:latest "/bin/ollama serve" ollama 6 minutes ago Up 6 minutes 11434/tcp
open-webui ghcr.io/open-webui/open-webui:main "bash start.sh" open-webui 6 minutes ago Up 6 minutes (healthy) 0.0.0.0:3000->8080/tcp, [::]:3000->8080/tcp
Po úspešnom spustení kontajnerov otvoríme webový prehliadač na hostiteľskom počítači s Windows 11 a zadáme adresu:
http://127.0.0.1:3000

Po úspešnom spustení Open WebUI pokračujeme stiahnutím jazykového modelu Qwen3 4B do prostredia Ollama. Samotné webové rozhranie totiž neobsahuje jazykový model a na generovanie odpovedí potrebuje pripojenie k Ollama.
10. Stiahnutie a spustenie modelu Qwen3 4B
Najskôr stiahneme jazykový model Qwen3 4B do kontajnera Ollama. Model sa uloží do persistentného Docker volume ollama_data, takže zostane dostupný aj po reštartovaní kontajnera.
sudo docker exec -it ollama ollama pull qwen3:4b
Po dokončení sťahovania overíme, či sa model úspešne uložil. Nasledujúci príkaz zobrazí zoznam lokálne dostupných modelov Ollama.
sudo docker exec ollama ollama list
Následne spustíme model Qwen3 4B v interaktívnom režime priamo v termináli. Po načítaní modelu môžeme zadávať otázky a overiť, či správne generuje odpovede.
sudo docker exec -it ollama ollama run qwen3:4b
Zadáme napríklad nasledujúcu otázku:
Ahoj, predstav sa mi po slovensky a vysvetli, čo je Docker.

11. Prvé spustenie a nastavenie Open WebUI
Pri prvom otvorení Open WebUI sa zobrazí úvodná obrazovka, na ktorej vytvoríme používateľský účet.
Zadáme požadované prihlasovacie údaje a dokončíme registráciu. Prvý vytvorený účet automaticky získa oprávnenia administrátora Open WebUI.
Po prihlásení skontrolujeme, či je aplikácia prepojená so službou Ollama a či je v zozname dostupných modelov zobrazený Qwen3 4B.
Následne môžeme vytvoriť novú konverzáciu, vybrať model qwen3:4b a začať komunikovať s lokálnou AI prostredníctvom webového prehliadača.
