Обзор развертывания Open WebUI и Ollama на сервере¶
Предпосылки и предварительные требования¶
Для корректной работы системы необходимо наличие следующих компонентов и условий: - Операционная система Ubuntu. - Установленный пакетный менеджер apt и утилита curl. - Права суперпользователя (root) для установки сервисов и управления контейнерами. - Доступ к интернету для загрузки образов Docker, моделей и сертификатов. - Свободные порты 80, 443 для веб-сервера и 8080 для приложения. - Наличие GPU для работы с моделями (требуется для запуска контейнера с флагом --gpus all).
Структура файлов и каталогов¶
Конфигурация и данные приложения распределены по следующим директориям: - /root/nginx — каталог для запуска контейнера прокси-сервера и хранения файла compose.yml. - /data/nginx/user_conf.d — директория с пользовательскими конфигурациями Nginx, куда записываются файлы вида {{ prefix }}{{ server_id }}.hostkey.in.conf. - /data/nginx/nginx-certbot.env — файл переменных окружения для настройки Certbot. - /etc/letsencrypt — точка монтирования для хранения SSL-сертификатов (через том nginx_secrets). - /etc/systemd/system/ollama.service — файл конфигурации системного сервиса Ollama. - /usr/share/ollama/.ollama/models — каталог для хранения загруженных моделей (например, gpt-oss). - /var/lib/docker/volumes/open-webui — том Docker для хранения данных приложения Open WebUI.
Процесс установки приложения¶
Установка выполняется в несколько этапов, включающих настройку бэкенда и развертывание интерфейса:
- Установка Ollama:
- Скачивается и выполняется скрипт установки с официального репозитория.
- Создается системный пользователь
ollama. -
Загружается модель
gpt-oss:20bчерез командуollama pull. -
Настройка сервиса Ollama:
- Файл
ollama.serviceмодифицируется для добавления переменных окружения:OLLAMA_HOST=0.0.0.0OLLAMA_ORIGINS=*LLAMA_FLASH_ATTENTION=1
-
Демон
systemdперезагружается, а сервисollamaперезапускается и включается в автозагрузку. -
Развертывание Open WebUI:
- Запускается контейнер Docker с образом
ghcr.io/open-webui/open-webui:cuda. - Контейнер привязывается к порту
8080и получает доступ ко всем GPU. - Устанавливается переменная окружения
ENV=devи адрес бэкендаOLLAMA_BASE_URLS=http://host.docker.internal:11434. -
Контейнер настраивается на автоматический перезапуск (
--restart always). -
Настройка прокси-сервера:
- Создается каталог
/root/nginx. - Генерируется файл
compose.ymlдля запуска контейнераjonasal/nginx-certbot:latest. - В конфигурационный файл Nginx добавляется правило пересылки запросов (
proxy_pass) наhttp://127.0.0.1:8080. - Запускается контейнер прокси через
docker compose up -d.
Права доступа и безопасность¶
- Пользователь
ollamaсоздается как системный пользователь. - Каталог
/root/nginxимеет права доступа0755и принадлежит пользователюroot. - Файл
compose.ymlимеет права0644. - Сервис Ollama настроен на прослушивание всех сетевых интерфейсов (
0.0.0.0), что требует настройки брандмауэра на уровне сервера для ограничения внешнего доступа. - Контейнер прокси-сервера использует режим сети
hostдля прямого доступа к портам.
Базы данных¶
Приложение Open WebUI использует локальное хранилище данных, которое монтируется в том Docker: - Том open-webui монтируется в путь /app/backend/data внутри контейнера. - Данные сохраняются в /var/lib/docker/volumes/open-webui на хосте. - Явное подключение к внешней базе данных в предоставленных конфигурациях не предусмотрено.
Контейнеры Docker и их запуск¶
В системе используются два основных контейнера:
- Open WebUI:
- Запускается командой
docker runс параметрами:- Порт:
-p 8080:8080 - GPU:
--gpus all - Хост-переменная:
--add-host=host.docker.internal:host-gateway - Том:
-v open-webui:/app/backend/data - Имя:
--name open-webui - Перезапуск:
--restart always
- Порт:
-
Образ:
ghcr.io/open-webui/open-webui:cuda. -
Nginx Certbot:
- Запускается через
docker composeиз директории/root/nginx. - Образ:
jonasal/nginx-certbot:latest. - Режим перезапуска:
unless-stopped. - Режим сети:
host. - Монтирование томов:
nginx_secretsв/etc/letsencrypt./data/nginx/user_conf.dв/etc/nginx/user_conf.d.
- Переменная
CERTBOT_EMAILустановлена вhkadm@hostkey.com.
Прокси серверы¶
Для обработки входящего трафика и управления SSL-сертификатами используется контейнер Nginx с Certbot: - Домен и конфигурация определяются в файле /data/nginx/user_conf.d/{{ prefix }}{{ server_id }}.hostkey.in.conf. - В блоке location / автоматически добавляется строка proxy_pass http://127.0.0.1:8080;. - Старые строки proxy_pass в этом блоке удаляются перед добавлением новой. - Сертификаты хранятся в томе nginx_secrets, который монтируется в /etc/letsencrypt. - Настройки email для Certbot берутся из файла /data/nginx/nginx-certbot.env и переменной окружения.
Настройки прав¶
- Директория
/root/nginxсоздается с правами0755и владельцемroot:root. - Файл конфигурации
compose.ymlсоздается с правами0644и владельцемroot:root. - Файл сервиса
ollama.serviceрезервируется перед изменением путем копирования вollama.service.bak. - Права на файлы конфигурации Nginx в
/data/nginx/user_conf.dдолжны позволять запись для процесса генерации конфигурации.
Запуск, остановка и обновление¶
Управление сервисами осуществляется следующими способами:
- Сервис Ollama:
- Перезагрузка демона:
systemctl daemon-reload. - Перезапуск и включение:
systemctl restart ollamaиsystemctl enable ollama. -
Проверка статуса:
systemctl status ollama. -
Контейнер Open WebUI:
- Запуск выполняется автоматически при установке.
- Проверка статуса контейнера:
docker inspect -f '{{.State.Status}}' open-webui. - Остановка:
docker stop open-webui. - Запуск:
docker start open-webui. -
Обновление образа: требуется ручная пересборка контейнера с новым тегом образа.
-
Прокси-сервер (Nginx):
- Запуск:
docker compose up -dиз директории/root/nginx. - Остановка:
docker compose downиз директории/root/nginx. - Обновление конфигурации: требует регенерации файла
compose.ymlи перезапуска контейнеров.