Обзор развертывания Open WebUI с Ollama на сервере¶
Предпосылки и предварительные требования¶
Для успешного развертывания приложения необходимо наличие сервера с операционной системой Ubuntu. Система должна иметь права суперпользователя (root) для выполнения команд установки и настройки сервисов.
Требуется наличие следующих компонентов в системе: - Утилита curl для загрузки установщиков. - Сертификаты ca-certificates для проверки HTTPS-соединений. - Доступ к интернету для загрузки образов Docker и моделей нейросетей. - Поддержка GPU для работы контейнера Open WebUI с флагом cuda.
Структура файлов и каталогов¶
Конфигурационные файлы и данные приложения размещаются в следующих директориях:
/root/nginx/— каталог для конфигурации прокси-сервера и запуска контейнеров Docker./root/nginx/compose.yml— файл конфигурации дляdocker composeс настройками Nginx и Certbot./data/nginx/— каталог для пользовательских конфигураций и переменных окружения./data/nginx/nginx-certbot.env— файл переменных окружения для сервиса Nginx./data/nginx/user_conf.d/— директория с конфигурационными файлами виртуальных хостов Nginx.- Файлы с расширением
.hostkey.in.confсодержат настройки HTTPS-хостов. - Файлы с расширением
.hostkey.in.http.confсодержат настройки HTTP-хостов для перенаправления на HTTPS.
- Файлы с расширением
/etc/systemd/system/ollama.service— основной файл сервиса Ollama./etc/systemd/system/ollama.service.d/override.conf— файл переопределения параметров сервиса Ollama.
Процесс установки приложения¶
Установка выполняется в несколько этапов: подготовка системы, установка движка Ollama, загрузка модели и развертывание веб-интерфейса.
- Установка зависимостей системы:
-
Устанавливаются пакеты
curlиca-certificatesчерез менеджер пакетовapt. -
Установка Ollama:
- Запускается скрипт установки от разработчика через команду
curl -fsSL https://ollama.com/install.sh | sh. - Создается системный пользователь
ollama. - Создается директория для переопределений сервиса
/etc/systemd/system/ollama.service.d. - Записывается файл конфигурации
/etc/systemd/system/ollama.service.d/override.confс переменными окружения:OLLAMA_HOST=0.0.0.0OLLAMA_ORIGINS=*LLAMA_FLASH_ATTENTION=1
-
Сервис
ollamaперезагружается и включается в автозагрузку. -
Загрузка модели нейросети:
-
Скачивается модель
deepseek-r1:14bс помощью командыollama pull deepseek-r1:14b. -
Развертывание Open WebUI:
- Запускается контейнер Docker с образом
ghcr.io/open-webui/open-webui:cuda. - Контейнер использует режим сети
hostдля прямого доступа к портам. - Устанавливаются переменные окружения:
ENV=devOLLAMA_BASE_URLS=http://127.0.0.1:11434
- Монтируется том
open-webuiв директорию/app/backend/dataвнутри контейнера для хранения данных. -
Включается доступ к GPU через
device_requests. -
Настройка прокси-сервера Nginx:
- Создается каталог
/root/nginx. - Генерируется файл
/root/nginx/compose.ymlна основе шаблона. - В конфигурационный файл HTTPS-хоста добавляется правило
proxy_pass http://127.0.0.1:8080;для пересылки трафика на Open WebUI. - Добавляется заголовок
Hostдля корректной передачи имени хоста. - Создается конфигурация HTTP-хоста для обработки запросов ACME и перенаправления на HTTPS.
- Запускается контейнер Nginx через
docker compose up -dв директории/root/nginx. - Внутри контейнера создается директория для сертификатов
/var/www/certbot/.well-known/acme-challenge. - Проверяется конфигурация Nginx командой
nginx -tи выполняется перезагрузкаnginx -s reload.
Базы данных¶
Данные приложения Open WebUI хранятся в Docker-томе с именем open-webui, который монтируется в директорию /app/backend/data внутри контейнера. В предоставленных конфигурациях не используются внешние базы данных или специализированные СУБД.
Контейнеры Docker и их запуск¶
В системе развернуты два основных контейнера:
- Контейнер Open WebUI:
- Имя:
open-webui. - Образ:
ghcr.io/open-webui/open-webui:cuda. - Режим сети:
host. - Политика перезапуска:
always. -
Управление: Запуск осуществляется через модуль
community.docker.docker_containerс параметрамиstate: started. -
Контейнер Nginx с Certbot:
- Имя:
nginx-nginx-1(генерируется автоматически). - Образ:
jonasal/nginx-certbot:latest. - Режим сети:
host. - Политика перезапуска:
unless-stopped. - Управление: Запуск осуществляется через команду
docker compose up -dв директории/root/nginx. - Монтированные тома:
nginx_secretsв/etc/letsencryptдля хранения сертификатов./data/nginx/user_conf.dв/etc/nginx/user_conf.dдля конфигураций хостов.
Прокси серверы¶
В качестве прокси-сервера используется контейнер Nginx с поддержкой Certbot для автоматического получения и обновления SSL-сертификатов.
- Доменное имя формируется по шаблону
{{ prefix }}{{ server_id }}.{{ zone }}. - Порт 80 используется для обработки запросов ACME-челленджа и перенаправления всего трафика на HTTPS (статус 301).
- Порт 443 обрабатывает HTTPS-запросы и пересылает их на локальный адрес
http://127.0.0.1:8080, где работает Open WebUI. - Для проверки и обновления конфигурации внутри контейнера используются команды
docker exec nginx-nginx-1 nginx -tиdocker exec nginx-nginx-1 nginx -s reload.
Права доступа и безопасность¶
- Все операции с системными сервисами и файлами конфигурации выполняются с правами
root(черезbecome: yes). - Каталог
/root/nginxимеет права0755и принадлежит пользователюroot. - Файл конфигурации
compose.ymlимеет права0644. - Конфигурационные файлы Nginx в
/data/nginx/user_conf.d/имеют права0644. - Сервис Ollama настроен на прослушивание всех интерфейсов (
0.0.0.0) и разрешает запросы с любых источников (OLLAMA_ORIGINS=*). - Для работы с GPU контейнеру Open WebUI предоставляются необходимые права через
device_requests.
Запуск, остановка и обновление¶
Управление сервисами осуществляется следующими способами:
- Сервис Ollama:
- Перезагрузка и включение в автозагрузку выполняются командой
systemctl daemon-reloadиsystemctl restart ollama. -
Статус и управление доступны через стандартные команды
systemctl. -
Контейнер Open WebUI:
- Запуск и остановка управляются через команды Docker, так как контейнер настроен с политикой
restart: always. -
Для обновления образа необходимо пересоздать контейнер с новым образом.
-
Контейнер Nginx:
- Запуск выполняется командой
docker compose up -dв директории/root/nginx. - Остановка и перезапуск управляются через
docker compose downиdocker compose up -d. - Перезагрузка конфигурации Nginx внутри контейнера выполняется командой
docker exec nginx-nginx-1 nginx -s reload.