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.

naspäť