Savo AI pagalbininkas serveryje: Ollama ir Open WebUI
Paskutinį kartą atnaujinta: 2026-09-24 · Ovanap Team, knygos „Linux nuo nulio“ autoriai (leidėjas – Ovanap, Monine AS)
Trumpas atsakymas: taip, privatų ChatGPT tipo pagalbininką galima paleisti įprastame VPS serveryje ir be vaizdo plokštės. Ollama ir Open WebUI paleidi per Docker Compose, sąsajos prievadą susieji su 127.0.0.1 ir ją publikuoji per nginx su HTTPS. Rinkis mažą modelį, kuris telpa į laisvą serverio RAM (pavyzdžiui, llama3.2:1b), o jei serveris per mažas – prijunk tiekėjo API.
Svarbiausia
- Ollama pagal numatymą klauso adresu
127.0.0.1:11434. Adresą pakeisti galima tik kintamuojuOLLAMA_HOST(Ollama DUK). llama3.2:1bOllama bibliotekoje sveria 1,3 GB (2026-09-24 duomenimis, ollama.com). Tikslių RAM reikalavimų biblioteka neskelbia.- Open WebUI dokumentacija už nginx reikalauja
proxy_buffering off;(buferizavimas sugadina gyvai siunčiamus atsakymus), WebSocket antraščių ir kintamojoCORS_ALLOW_ORIGIN(Open WebUI ir nginx). - Docker atveriami prievadai apeina ufw (Docker dokumentacija), todėl compose faile rašoma
127.0.0.1:3000:8080. - GPU nebūtina. Ji perka greitį, o ne galimybę paleisti modelį: procesoriumi maži modeliai atsako lėtai, bet veikia.
Kai naudojiesi AI pokalbių svetaine, trys dalykai ten ne tavo: taisyklės (ką modeliui leidžiama daryti ir kada paslauga pasikeis), duomenys (tavo klausimai keliauja į kažkieno serverį) ir sąskaita. Visą pokalbį galima perkelti į serverį, kurį valdai pats: atviras modelis veikia per Ollama (programą, kuri parsisiunčia atvirus kalbos modelius ir paleidžia juos tavo kompiuteryje), pokalbių langą suteikia Open WebUI (atvirojo kodo ChatGPT tipo sąsaja naršyklėje), abu – Docker konteineriuose, už nginx (interneto serverio, veikiančio kaip atvirkštinis tarpinis serveris: jis priima HTTPS ryšius ir perduoda juos vidinei paslaugai).
Šiame straipsnyje parodysime, kaip tai paruošti Ubuntu Server 26.04 LTS VPS serveryje, sąžiningai aptarsime RAM ir greitį, o svarbiausia – vieną Docker klaidą, dėl kurios visa sistema atsiveria internetui. Darome prielaidą, kad jau turi apsaugotą serverį (žr. VPS paruošimo sąrašą), įdiegtą nginx ir domeną.
Pirmiausia: ar modelis tilps? Svarbu RAM, o ne GPU
Modelis – tai milijardai skaičių (svorių), ir atsakinėjant visi jie turi gulėti atmintyje. Įsivaizduok, kad diskas yra spinta, o RAM – darbastalis: modelio skaičių lentelė turi tilpti ant stalo.
Vaizdo plokštė nėra būtina. GPU – tarsi stadionas paprastų darbininkų, vienu metu atliekančių vienodus daugybos veiksmus, todėl su ja atsakymai gerokai greitesni. Be jos darbą atlieka procesorius – lėčiau, bet veikia. Tai praktiškai įmanoma dėl kvantavimo: tas pats modelis, užrašytas mažesniu tikslumu, tarsi suspausta nuotrauka; bibliotekose matysi žymas Q4 ar Q8.
Prieš rinkdamasis – pamatuok:
free -h
Žiūrėk į stulpelį available. Taisyklė: modelis turi tilpti į available su atsarga. Ollama biblioteka tikslių RAM reikalavimų neskelbia, todėl ir mes jų neišgalvojame. Orientyru imk modelio failo dydį, o įkėlus modelį ollama ps stulpelyje SIZE parodys, kiek jis užima iš tiesų.
Maži modeliai iš Ollama bibliotekos (parsisiuntimo dydžiai 2026-09-24):
| Modelis | Parsisiuntimo dydis |
|---|---|
gemma3:270m |
292 MB |
qwen3:0.6b |
523 MB |
gemma3:1b |
815 MB |
llama3.2:1b |
1,3 GB |
qwen3:1.7b |
1,4 GB |
llama3.2:3b |
2,0 GB |
Pradžiai siūlome llama3.2:1b. Dydžiai ir žymos keičiasi, todėl dabartinį sąrašą laikome modelių priede. Nepamiršk, kad atminties reikia ir pačiai Open WebUI bei sistemai. Jei available mažiau nei modelis, rinkis mažesnį arba kelią B (apie jį žemiau).
Du sąžiningi lūkesčiai. Be GPU atsakymas bėga lyg diktuojamas tekstas – tai normalu, ne gedimas. O jei modelis vos telpa, serveris klimpsta į iškėlimo sritį (swap) ir „galvoja“ minutėmis; vaistas – mažesnis modelis.
Du keliai į tą patį pagalbininką
- Kelias A: vietinis modelis. Ollama paleidžia modelį tavo VPS serveryje. Klausimai lieka tavo serveryje, ribas nustato atmintis ir procesorius.
- Kelias B: tiekėjo API. Open WebUI veikia tavo serveryje, bet atsakymus pateikia tiekėjas (pavyzdžiui, OpenAI) per tavo valdomą API raktą. Mokama už žetonus. Tinka, kai serveris per mažas arba nori stipresnio modelio.
Abu keliai baigiasi toje pačioje vietoje: privačiu pokalbių langu tavo naršyklėje.
1 žingsnis: įdiek Docker Engine
Docker Engine diek iš oficialios Docker saugyklos, o ne paketą docker.io. Tikslios eilutės, atkartojančios docs.docker.com, – Docker priede. Patikra:
docker --version
sudo docker run hello-world
2 žingsnis (nebūtinas): išbandyk Ollama terminale
Nori pamatyti, kaip modelis atsako, dar nieko nestatęs? Oficialus diegimo scenarijus:
curl -fsSL https://ollama.com/install.sh | sh
Ši eilutė atsisiunčia scenarijų ir iškart jį vykdo, todėl naudok ją tik iš šaltinio, kuriuo pasitiki. Norėdamas pirmiausia perskaityti, atsisiųsk jį su -o /tmp/ollama-install.sh, peržiūrėk per less ir tik tada paleisk. Rankinis diegimas be scenarijaus aprašytas Ollama priede.
ollama run llama3.2:1b
Užduok klausimą, išeik komanda /bye. Tas pats modelis per vietinį API 11434 prievade atsako ir programoms:
curl http://localhost:11434/api/generate -d '{
"model": "llama3.2:1b",
"prompt": "Parašyk vieną sakinį apie Linux.",
"stream": false
}'
Atsakymas – JSON lauke "response". Pagal numatymą Ollama klauso tik adresu 127.0.0.1:11434. Taip ir palik: nustatymas OLLAMA_HOST=0.0.0.0 atveria ją tinklui be jokio slaptažodžio.
Toliau aprašyta Docker sąranka paleidžia savo Ollama, tad baigęs bandyti šią išvalyk: ollama rm llama3.2:1b ir sudo systemctl disable --now ollama.
3 žingsnis: Ollama ir Open WebUI per Docker Compose
Docker Compose viename YAML faile aprašo kelis konteinerius ir paleidžia juos kartu viena komanda.
mkdir -p ~/ai-paslauga && cd ~/ai-paslauga
nano compose.yaml
services:
ollama:
image: ollama/ollama
restart: unless-stopped
volumes:
- ollama-duomenys:/root/.ollama
sasaja:
image: ghcr.io/open-webui/open-webui:main
restart: unless-stopped
environment:
- OLLAMA_BASE_URL=http://ollama:11434
- CORS_ALLOW_ORIGIN=https://ai.ona-svetaine.lt
volumes:
- sasaja-duomenys:/app/backend/data
ports:
- "127.0.0.1:3000:8080"
depends_on:
- ollama
volumes:
ollama-duomenys:
sasaja-duomenys:
Vietoj ai.ona-svetaine.lt įrašyk savo antrinį domeno vardą. Tada:
docker compose up -d
docker compose exec ollama ollama pull llama3.2:1b
docker compose ps
Ką daro svarbiausios eilutės:
- Tūriai (
volumes) išsaugo modelius, pokalbius ir nustatymus, kai konteineriai atnaujinami ar perkuriami. OLLAMA_BASE_URL=http://ollama:11434– konteineriai vienas kitą pasiekia paslaugos vardu, nes kiekvienas konteineris turi savo „localhost“.CORS_ALLOW_ORIGIN– Open WebUI dokumentacija jį rekomenduoja už atvirkštinio tarpinio serverio, kitaip gali neveikti WebSocket ryšys.restart: unless-stopped– po perkrovimo viskas pasileidžia pats. Išbandyk iš tiesų:sudo reboot, tadadocker ps.
4 žingsnis: prievado klaida, kuri atveria viską
Svarbiausia eilutė visame faile: "127.0.0.1:3000:8080".
Docker atveriami prievadai apeina ufw. Parašyk "3000:8080" be adreso – ir tavo pokalbių langas atviras visam internetui, nors sudo ufw status nieko nerodo. Su 127.0.0.1: priekyje 3000 prievadas egzistuoja tik serverio viduje. Įrodyk tai iš savo kompiuterio:
curl -I --max-time 10 http://203.0.113.10:3000
Turi baigtis Connection timed out. Šiuo atveju klaida – geras rezultatas.
5 žingsnis: nginx ir HTTPS priekyje
Sukurk failą /etc/nginx/sites-available/ai:
server {
listen 80;
listen [::]:80;
server_name ai.ona-svetaine.lt;
client_max_body_size 50M;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_buffering off;
proxy_cache off;
}
}
Eilutės Upgrade ir Connection praleidžia gyvą WebSocket srautą. proxy_buffering off neleidžia nginx „perkarpyti“ gyvai siunčiamų atsakymų (kitaip pokalbyje gali matytis ## ir **). client_max_body_size leidžia įkelti didesnius nei numatytasis 1 MB dokumentus. Įjunk ir apsaugok:
sudo ln -s /etc/nginx/sites-available/ai /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
sudo certbot --nginx -d ai.ona-svetaine.lt
Antriniam vardui reikia atskiro DNS A įrašo, rodančio į tavo serverį. Atidaryk https://ai.ona-svetaine.lt ir iškart susikurk administratoriaus paskyrą su stipriu slaptažodžiu. Daugiau smulkmenų – Open WebUI priede.
Kelias B: kai serveris per mažas
Išmesk ollama paslaugą ir depends_on, o Open WebUI prijunk prie tiekėjo API. Raktas guli faile ~/ai-paslauga/.env (viena eilutė OPENAI_API_KEY=...) su chmod 600 teisėmis – niekada ne compose faile, ne Git saugykloje ir ne ekrano nuotraukoje. Compose faile rašai tik ${OPENAI_API_KEY}, o docker compose .env failą perskaito pats. Open WebUI šiuos nustatymus įsimena per pirmąjį paleidimą, todėl vėlesni pakeitimai daromi per Settings → Admin → Connections. Visas failas ir pastabos apie kitus tiekėjus – API priede. Tiekėjo valdymo skydelyje nusistatyk išlaidų ribą.
Trys saugumo taisyklės
- Raktas lieka raktu. Tik
.envfaile suchmod 600. Jei nutekėjo – atšauk jį pas tiekėją. - Sąsaja nėra vieša svetainė, kol nestovi už nginx su HTTPS ir stipriu administratoriaus slaptažodžiu.
- Modelio atsakymas nėra faktas. Maži vietiniai modeliai klysta dažniau, o skamba taip pat įtikinamai. Bet kurią modelio pasiūlytą komandą perskaityk prieš vykdydamas.
Dažni klausimai
Ar Ollama veikia VPS serveryje be vaizdo plokštės (GPU)? Veikia. Vaizdo plokštė perka greitį, o ne galimybę paleisti modelį. Serveryje tik su procesoriumi maži modeliai veikia, tik lėtai.
Kiek RAM reikia Ollama?
Ollama biblioteka tikslių reikalavimų neskelbia. Laisvos RAM (available) turi būti bent tiek, kiek sveria modelio failas, ir dar šiek tiek darbui; tikrą naudojimą parodo ollama ps.
Nuo kurio mažo modelio pradėti?
llama3.2:1b (1,3 GB, 2026-09-24 duomenimis) arba mažesni qwen3:0.6b ir gemma3:270m. Prieš siųsdamasis pažiūrėk bibliotekos puslapį.
Ar Open WebUI saugu atverti internetui?
Tiesiogiai – ne. Susiek prievadą su 127.0.0.1, sąsają pasiek per nginx su HTTPS ir nusistatyk stiprų administratoriaus slaptažodį.
O jei serveris per silpnas vietiniam modeliui?
Naudok Open WebUI su tiekėjo API (kelias B), raktą laikydamas .env faile.
Pasistatyk pats – su kiekvienu žingsniu paaiškintu
Ši sąranka – knygos „Linux nuo nulio“ kelionės tikslas. Knyga iki jo nuveda nuo nulio: terminalas, apsaugotas VPS, nginx su HTTPS, atsarginės kopijos, Docker, o tada – ši AI paslauga laboratorijoje, kurioje kiekviena komanda paaiškinta, o prie kiekvieno rizikingo žingsnio yra kelias atgal. Kadangi modeliai, diegimo eilutės ir VPS pasiūlymai keičiasi greitai, knyga remiasi internetiniu priedu, kurį nuolat atnaujiname.
Perskaityk nemokamą ištrauką (registruotis nereikia), o jei patiks – įsigyk knygą.