Ubuntu + Ollama + Open WebUI

Пошаговый справочник по развёртыванию локального LLM-сервера: от статического IP до веб-интерфейса

01

Статический IP через Netplan

Чтобы сервер всегда имел один и тот же адрес в локальной сети 192.168.12.x

Узнать имя сетевого интерфейса

ip a

Ищите интерфейс со статусом UP и MAC-адресом. В VMware это обычно ens33, в VirtualBox — enp0s3, на реальном железе — eno1, enp3s0 и т.п.

Проверить текущий конфиг

ls /etc/netplan/
sudo cat /etc/netplan/*.yaml

Отредактировать конфиг

sudo nano /etc/netplan/50-cloud-init.yaml

Привести к виду (заменить ens33 на своё имя):

network:
  version: 2
  ethernets:
    ens33:
      addresses:
      - "192.168.12.33/24"
      routes:
      - to: "default"
        via: "192.168.12.1"
      nameservers:
        addresses: [8.8.8.8, 1.1.1.1]
СтрокаЗначение
192.168.12.33/24IP-адрес + маска (/24 = 255.255.255.0)
via: 192.168.12.1Шлюз (роутер). Обязательно IP, не маска!
nameserversDNS-серверы для доступа в интернет
⚠️

Типичная ошибка: указать в via маску 255.255.255.0 вместо адреса шлюза. Тогда система скажет Network is unreachable.

Применить и проверить

sudo netplan apply
ip a        # должен быть 192.168.12.33/24
ip route    # строка default via 192.168.12.1
02

SSH-доступ

Управлять сервером с другого компьютера

sudo apt update
sudo apt install -y openssh-server
sudo systemctl enable --now ssh
systemctl status ssh --no-pager

С другого ПК в сети 192.168.12.x:

ssh @192.168.12.33
03

Расширение диска (LVM)

Ubuntu Server ставится на LVM-раздел, который по умолчанию занимает не весь диск

Диагностика

df -h              # текущий размер корня
sudo vgdisplay     # ищем Free PE / Size

Если Free PE / Size больше нуля — свободное место есть, можно расширять.

Расширить том и файловую систему

sudo lvdisplay                              # точное имя тома
sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
sudo resize2fs /dev/ubuntu-vg/ubuntu-lv    # для ext4
💡

Если корень на xfs — команда sudo xfs_growfs /.

Если свободных PE нет

Значит, сам виртуальный диск меньше физического. Тогда:

  1. Выключить VM.
  2. В гипервизоре увеличить размер диска.
  3. Включить VM и выполнить:
sudo apt install -y cloud-guest-utils
sudo growpart /dev/sda 3      # номер раздела уточнить в lsblk
sudo pvresize /dev/sda3
sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
sudo resize2fs /dev/ubuntu-vg/ubuntu-lv
df -h /
04

Midnight Commander

Удобный консольный файловый менеджер (две панели, как в Norton Commander)

sudo apt install -y mc
mc

Управление: F3 — просмотр, F4 — редактирование, F10 — выход.

05

Docker

Нужен для запуска Open WebUI в контейнере

curl -fsSL https://get.docker.com | sudo sh
sudo usermod -aG docker $USER
newgrp docker
docker --version
06

Ollama

Движок для запуска локальных LLM

Установка

curl -fsSL https://ollama.com/install.sh | sh
newgrp ollama
systemctl status ollama --no-pager

Разрешить Ollama слушать все интерфейсы

Нужно для связи с Docker-контейнером.

sudo mkdir -p /etc/systemd/system/ollama.service.d
sudo nano /etc/systemd/system/ollama.service.d/override.conf

Содержимое файла:

[Service]
Environment="OLLAMA_HOST=0.0.0.0:11434"
sudo systemctl daemon-reload
sudo systemctl restart ollama
ss -tlnp | grep 11434   # должно быть 0.0.0.0:11434

Скачать модель

ollama pull llama3.1:8b
ollama list
ollama run llama3.1:8b   # выход: /bye
07

Open WebUI (веб-интерфейс)

Общаться с моделью из браузера, в том числе с других ПК

Скачать образ

docker pull ghcr.io/open-webui/open-webui:main
⚠️

Если рвётся соединение — попробовать зеркало:
docker pull ghcr.1ms.run/open-webui/open-webui:main

Запустить контейнер

docker run -d -p 3000:8080 \
  --add-host=host.docker.internal:host-gateway \
  -v open-webui:/app/backend/data \
  --name open-webui \
  --restart always \
  ghcr.io/open-webui/open-webui:main
ПараметрЗначение
-dЗапуск в фоне
-p 3000:8080Порт 3000 на хосте → 8080 в контейнере
--add-host=host.docker.internal:host-gatewayДоступ контейнера к хосту (где Ollama)
-v open-webui:/app/backend/dataПостоянное хранилище данных
--name open-webuiИмя контейнера
--restart alwaysАвтозапуск при загрузке системы

Проверка

docker ps   # строка с open-webui, статус Up
docker exec -it open-webui curl -s http://host.docker.internal:11434/api/tags

Открыть в браузере

С любого ПК в сети 192.168.12.x:

http://192.168.12.33:3000
✓

Первый зарегистрированный пользователь становится администратором.

08

Диагностика

СимптомЧто проверить
Нет сетиip a, ip route, cat /etc/netplan/*.yaml
Network is unreachableШлюз в via должен быть IP, не маска
apt update падаетDNS (cat /etc/resolv.conf), связь (curl -I http://archive.ubuntu.com)
Контейнер не видит Ollamass -tlnp | grep 11434 → должно быть 0.0.0.0
Модель не появилась в UIdocker restart open-webui, обновить страницу
Диск заполненdf -h, sudo vgdisplay
Медленные ответыCPU-режим; GPU даст 10–50× ускорения
09

Краткий чек-лист

1. ip a → узнать имя интерфейса 2. sudo nano /etc/netplan/50-cloud-init.yaml → прописать IP/шлюз/DNS 3. sudo netplan apply → применить 4. ip a && ip route → проверить 5. sudo apt update && sudo apt install -y openssh-server mc 6. sudo systemctl enable --now ssh 7. sudo vgdisplay → проверить Free PE 8. sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv 9. sudo resize2fs /dev/ubuntu-vg/ubuntu-lv 10. curl -fsSL https://get.docker.com | sudo sh 11. sudo usermod -aG docker $USER && newgrp docker 12. curl -fsSL https://ollama.com/install.sh | sh 13. newgrp ollama 14. sudo mkdir -p /etc/systemd/system/ollama.service.d 15. sudo nano /etc/systemd/system/ollama.service.d/override.conf → [Service] Environment="OLLAMA_HOST=0.0.0.0:11434" 16. sudo systemctl daemon-reload && sudo systemctl restart ollama 17. ollama pull llama3.1:8b 18. docker pull ghcr.io/open-webui/open-webui:main 19. docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway \ -v open-webui:/app/backend/data --name open-webui --restart always \ ghcr.io/open-webui/open-webui:main 20. Браузер: http://192.168.12.33:3000
10

Заметки для реального железа

Обновление Open WebUI

docker pull ghcr.io/open-webui/open-webui:main
docker stop open-webui && docker rm open-webui
# затем снова docker run с теми же параметрами