Локальный LLM-стек на openSUSE: Ollama + Open WebUI (CPU-режим)
Автор: LeO (Hallow) Дата: октябрь 2026 Лицензия: CC BY-SA 4.0
Полное, воспроизводимое руководство по развёртыванию локального стека языковых моделей на openSUSE Leap 16.0 без использования GPU. Конфигурация проверена в реальной эксплуатации: Ollama как сервер моделей, Open WebUI как веб-интерфейс, доступ по локальной сети и через временный внешний туннель.
Документ написан после того, как я дважды потерял рабочую конфигурацию при переустановке системы. Цель - чтобы восстановление занимало 30-40 минут, а не полный рабочий день проб и ошибок.
- Архитектура
- Почему CPU, а не GPU
- Требования
- Этап 1. Установка Ollama
- Этап 2. Настройка доступа по сети
- Этап 3. Установка Open WebUI в Docker
- Этап 4. Загрузка моделей
- Этап 5. Настройка моделей в Open WebUI
- Этап 6. Доступ по локальной сети
- Этап 7. Временный внешний доступ
- Альтернатива: GPU на неподдерживаемых AMD-картах
- Известные грабли
- Шпаргалка на каждый день
- Диагностика
- Ссылки
+---------------------------------------------------------+
| openSUSE Leap 16.0 |
| |
| +------------------+ +---------------------+ |
| | Ollama | | Open WebUI | |
| | (systemd, хост) | <----> | (Docker, :3000) | |
| | 0.0.0.0:11434 | API | :8080 внутри | |
| +------------------+ +---------------------+ |
| | | |
| | | |
| +--------+----------------------------+-----------+ |
| | Модели: gemma3:4b, dolphin-llama3:8b | |
| | Хранение: ~/.ollama/models/ | |
| +-------------------------------------------------+ |
| |
+---------------------------------------------------------+
| |
| локальная сеть | внешний доступ
v v
http://192.168.x.x:3000 https://xxxx.trycloudflare.com
| Компонент | Роль | Порт | Запуск |
|---|---|---|---|
| Ollama | Сервер моделей | 11434 | systemd |
| Open WebUI | Веб-интерфейс | 3000 | Docker |
На моей машине установлена AMD Radeon RX 5700 XT (архитектура gfx1010, RDNA1, Navi 10). Официальная сборка Ollama не видит эту карту и молча переключается на CPU.
Корень проблемы - не в отсутствии поддержки на уровне ROCm (система карту видит), а в том, что в коде Ollama список supported_types для amdgpu оказывается пустым. Это задокументировано в issue #8806.
Проверить, что происходит в системе:
ollama psЕсли в колонке PROCESSOR стоит 100% CPU - GPU не задействован, даже если установщик написал AMD GPU ready.
Эта инструкция сознательно описывает CPU-путь. Он предсказуем, стабилен и не ломается при обновлениях. Вариант с GPU для неподдерживаемых карт вынесен в отдельный раздел с честным описанием рисков.
-
openSUSE Leap 16.0 (или Tumbleweed)
-
Пользователь с
sudo -
Docker и Docker Compose
-
Интернет
-
ОЗУ: минимум 8 ГБ, комфортно - 16 ГБ
-
Диск: минимум 20 ГБ под модели
Проверка готовности:
docker --version
docker psСкрипт установки Ollama распаковывает .tar.zst, для этого нужен zstd:
sudo zypper install -y zstdcurl -fsSL https://ollama.com/install.sh | shСкрипт:
-
скачивает свежий бинарник в /usr/local/bin/ollama
-
создаёт системного пользователя ollama
-
создаёт и запускает systemd-сервис
Если в системе раньше стоял пакет ollama из репозитория, в /usr/bin может остаться «мёртвый» путь. Создаём симлинк:
sudo ln -sf /usr/local/bin/ollama /usr/bin/ollamaПроверка:
ollama --versionsudo systemctl status ollama
curl http://localhost:11434Ожидаемый ответ: Ollama is running
По умолчанию Ollama слушает только 127.0.0.1. Контейнер Open WebUI находится в изолированной сети и до 127.0.0.1 хоста не достучится. Нужно разрешить прослушивание всех интерфейсов.
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"Сохранить: Ctrl+O, Enter. Выйти: Ctrl+X.
sudo systemctl daemon-reload
sudo systemctl restart ollamasudo ss -tlnp | grep 11434Должно быть *:11434 или 0.0.0.0:11434.
Узнать свой IP:
ip a | grep -E "inet " | grep -v 127.0.0.1Например: 192.168.1.109
Проверка по IP:
curl http://192.168.1.109:11434Запомните свой IP. Он понадобится на этапе 3 и при каждой перенастройке контейнера.
sudo ss -tlnp | grep 3000Если занят - выбрать другой порт (например, 3002) и заменить 3000 во всех командах ниже.
Замените 192.168.1.109 на ваш IP из этапа 2.3:
docker run -d -p 3000:8080 \
-v open-webui:/app/backend/data \
-e OLLAMA_BASE_URL=http://192.168.1.109:11434 \
--name open-webui \
--restart always \
ghcr.io/open-webui/open-webui:mainКлючевые параметры:
| Параметр | Зачем |
|---|---|
-p 3000:8080 |
Наружу порт 3000, внутри контейнера 8080 |
-v open-webui:/app/backend/data |
Том: аккаунты, чаты, настройки |
-e OLLAMA_BASE_URL=... |
Прямой IP хоста, не host.docker.internal |
--restart always |
Автозапуск после перезагрузки |
sleep 5
docker ps | grep open-webui
docker exec open-webui curl -s http://192.168.1.109:11434Ожидаемый ответ: Ollama is running
http://localhost:3000
Создать аккаунт. Первый пользователь автоматически становится администратором.
# Универсальная, стабильная, хорошо понимает русский
ollama pull gemma3:4b
# Без цензуры, стабильна
ollama pull dolphin-llama3:8bДля Open WebUI, если нужен tool calling:
# 128K контекст, 3B параметров, поддержка tools
ollama pull granite4:3b
# Классика для tool calling
ollama pull llama3.1:8bollama list| Модель | Почему |
|---|---|
qwen3:8b |
Контекст 4096 по умолчанию, thinking-режим, на CPU крайне медленно |
gemma3:12b |
В Q4 занимает ~7-8 ГБ, на CPU будет очень медленно |
gemma3:4b и dolphin-llama3:8b не поддерживают нативный вызов инструментов. Если оставить эту опцию включённой, Open WebUI (начиная с версии 0.10.1) будет пытаться передать модели tools, получит does not support tools, и чат зависнет.
Открыть чат с моделью
-
Иконка шестерёнки в панели управления (или «плюс» вверху справа)
-
Найти раздел «Встроенные инструменты» (Builtin Tools)
-
Снять галочку
-
Сохранить
-
Иконка пользователя внизу слева → Рабочее пространство (Workspace)
-
Модели (Models)
-
Если список пуст - это нормально. Нажать «Создать модель»
-
Базовая модель:
gemma3:4b -
Дать название, сохранить
-
Открыть созданную модель → снять «Встроенные инструменты»
Почему «Рабочее пространство» пустое: это конструктор кастомных «обёрток», а не список скачанных моделей. Скачанные модели видны в основном чате, в Workspace их нет, пока не создадите на их основе кастомную.
Админ-панель → Настройки → Подключения → Управление соединениями API OpenAI:
-
Base URL:
http://192.168.1.109:11434/v1 -
API Key:
ollama(любая строка)
Сохранить, нажать «Обновить» рядом с соединением.
На openSUSE Leap 16.0 firewall-cmd падает с ошибкой ImportError: pyexpat... undefined symbol: XML_SetAllocTrackerActivationThreshold. Это сломанный Python 3.13 в системе.
Рабочее решение - отключить firewalld:
sudo systemctl stop firewalld
sudo systemctl disable firewalldЕсли firewalld у вас исправен:
sudo firewall-cmd --permanent --add-port=3000/tcp
sudo firewall-cmd --reloadС телефона в той же Wi-Fi сети:
http://192.168.1.109:3000
cd ~
wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64
chmod +x cloudflared-linux-amd64Не перемещать в /usr/local/bin. Запускать напрямую из домашней папки.
./cloudflared-linux-amd64 tunnel --url http://localhost:3000В логе появится ссылка:
https://xxxx-xxxx-xxxx.trycloudflare.com
Отправить её тому, кому нужен доступ. Работает, пока терминал открыт.
cd ~
nohup ./cloudflared-linux-amd64 tunnel --url http://localhost:3000 > ~/tunnel.log 2>&1 &
sleep 10
grep -o 'https://[^ ]*trycloudflare.com' ~/tunnel.log | head -1pkill -f cloudflaredСсылка без пароля. Любой, кто её знает, получает доступ к вашему AI. Для кратковременной демонстрации - приемлемо. Для постоянного использования - нужен named tunnel с аутентификацией.
-
Официальная Ollama не видит gfx1010 из-за пустого списка supported_types (issue #8806).
-
Форк
likelovewant/ollama-for-amdявно включаетgfx1010:xnack-в список поддерживаемых.
В обсуждениях форка есть успешные кейсы с Llama 3.2 на RX 5700 XT.
-
Удалить официальную Ollama.
-
Установить кастомную сборку
lollama-for-amdl под подходящую версию ROCm (по сообщениям - ROCm 5.7 стабильнее для gfx1010, чем 6.x). -
Настроить переменную окружения:
sudo systemctl edit ollama[Service]
Environment="HSA_OVERRIDE_GFX_VERSION=10.3.0"- Проверить, что модель грузится на GPU:
ollama psДолжно быть 100% GPU или смешанный режим.
-
Хрупкость: обновление системы может сломать связку ROCm + кастомная сборка.
-
Частичная загрузка: при нехватке VRAM модель уходит в shared memory, выигрыш от GPU падает.
-
Молчаливые падения: PyTorch может откатиться на CPU без явной ошибки.
-
Воспроизводимость: конфигурация, работающая на одной версии ROCm, может не работать на другой.
Рекомендация: экспериментировать на отдельной копии системы или в виртуальной машине, не на рабочей конфигурации.
| Симптом | Причина | Решение |
|---|---|---|
ollama: command not found |
Бинарник в /usr/local/bin, PATH смотрит в /usr/bin |
sudo ln -sf /usr/local/bin/ollama /usr/bin/ollama |
ollama ps показывает 100% CPU |
GPU не поддерживается | CPU-режим, см. раздел про GPU |
firewall-cmd падает |
Сломан pyexpat в Python 3.13 |
Отключить firewalld |
Модель висит, ошибка does not support tools |
Open WebUI 0.10.1+ включает native tool calling | Снять «Встроенные инструменты» |
| Порт 8080 занят | stirling-pdf или другой контейнер | Open WebUI на 3000 |
host.docker.internal не резолвится |
Особенность Docker на Linux | Использовать прямой IP хоста |
| Рабочее пространство пустое | Это конструктор, а не список моделей | Создать кастомную модель или настраивать через чат |
Open WebUI отдаёт 500 Internal Error |
Повреждён том или конфиг | Пересоздать том open-webui (потеряются чаты) |
curl http://localhost:11434 # Ollama
docker ps | grep open-webui # WebUI
ollama list # Модели
ollama ps # Что загружено сейчасsudo systemctl start ollama
sudo systemctl stop ollama
sudo systemctl restart ollama
sudo systemctl status ollamadocker start open-webui
docker stop open-webui
docker restart open-webui
docker logs open-webui --tail 30ollama pull <модель> # Скачать
ollama rm <модель> # Удалить
ollama run <модель> # Проверить в терминале# Запуск в фоне
cd ~
nohup ./cloudflared-linux-amd64 tunnel --url http://localhost:3000 > ~/tunnel.log 2>&1 &
sleep 10
grep -o 'https://[^ ]*trycloudflare.com' ~/tunnel.log | head -1
# Остановка
pkill -f cloudflareddocker ps | grep open-webui
docker logs open-webui --tail 30
sudo ss -tlnp | grep 3000docker exec open-webui curl -s http://192.168.1.109:11434/api/tagsЕсли пусто - неверный OLLAMA_BASE_URL. Пересоздать контейнер с правильным IP.
Скорее всего, включены «Встроенные инструменты». См. этап 5.1.
sudo systemctl status ollama
journalctl -u ollama -n 50 --no-pager
sudo systemctl restart ollamaDHCP может выдать новый адрес. Тогда:
-
Пересоздать контейнер Open WebUI с новым IP
-
Обновить ссылку для доступа по сети
Чтобы IP не менялся - настроить статическую привязку MAC в роутере.
- Ollama
- Open WebUI
- Cloudflare Tunnel
- ollama-for-amd (форк)
- Issue #8806: amdgpu not detected
- model-val: валидация AI-моделей
| Дата | Изменение |
|---|---|
| 2026-06 | Первая сборка стека, эксперименты с ROCm |
| 2026-09 | Потеря конфигурации при переустановке, восстановление |
| 2026-10 | Стабилизация на CPU-режиме, оформление гайда |
Документ распространяется по лицензии CC BY-SA 4.0. При использовании указывайте авторство: LeO (Hallow).