Перейти к содержанию

Обзор развертывания Open WebUI и Ollama на сервере

Предпосылки и предварительные требования

Для корректной работы системы необходимо наличие следующих компонентов и условий:

  • Операционная система на базе Ubuntu.
  • Установленный Docker Engine для запуска контейнеров.
  • Доступ к интернету для загрузки образов контейнеров и моделей.
  • Права суперпользователя (root) для управления службами и файлами конфигурации.
  • Открытые порты:
  • 8080 для доступа к веб-интерфейсу Open WebUI.
  • 11434 для локального доступа к API Ollama (доступно через host.docker.internal).
  • Наличие GPU с поддержкой CUDA для ускорения работы моделей (требуется для образа cuda).

Структура файлов и каталогов

Конфигурация и данные приложения распределены по следующим директориям:

  • /root/nginx/ — каталог для конфигурации прокси-сервера и скрипта docker compose.
  • compose.yml — файл конфигурации для запуска контейнеров Nginx и Certbot.
  • /data/nginx/user_conf.d/ — директория с пользовательскими конфигурациями Nginx.
  • Файлы вида <prefix><server_id>.hostkey.in.conf содержат настройки проксирования.
  • /data/nginx/nginx-certbot.env — файл переменных окружения для Certbot.
  • /etc/systemd/system/ollama.service — файл конфигурации системной службы Ollama.
  • /usr/share/ollama/.ollama/models/ — каталог для хранения загруженных моделей (например, qwen3-coder).
  • /var/lib/docker/volumes/open-webui/_data — том Docker для хранения данных приложения Open WebUI.

Процесс установки приложения

Установка выполняется в несколько этапов, включающих настройку бэкенда и развертывание фронтенда.

  1. Установка Ollama:
  2. Скачивается и выполняется скрипт установки с официального репозитория.
  3. Создается системный пользователь ollama.
  4. Загружается модель qwen3-coder с помощью команды ollama pull qwen3-coder.

  5. Настройка службы Ollama:

  6. Файл службы /etc/systemd/system/ollama.service модифицируется для добавления переменных окружения:
    • OLLAMA_HOST=0.0.0.0
    • OLLAMA_ORIGINS=*
    • LLAMA_FLASH_ATTENTION=1
  7. Служба перезагружается и активируется.

  8. Запуск Open WebUI:

  9. Запускается контейнер Docker с образом ghcr.io/open-webui/open-webui:cuda.
  10. Контейнер привязывается к порту 8080.
  11. Используются GPU-ресурсы (--gpus all).
  12. Устанавливается переменная окружения ENV=dev.
  13. Указывается адрес бэкенда Ollama через OLLAMA_BASE_URLS=http://host.docker.internal:11434.

  14. Настройка прокси-сервера:

  15. В каталоге /root/nginx создается файл compose.yml.
  16. В конфигурационный файл Nginx добавляется правило проксирования на http://127.0.0.1:8080.
  17. Запускается стек Nginx и Certbot через docker compose up -d.

Контейнеры Docker и их запуск

В системе используются два типа контейнеризации: отдельный запуск контейнера и оркестрация через Compose.

Контейнер Open WebUI: Запускается командой:

docker run -d -p 8080:8080 --gpus all \
  --add-host=host.docker.internal:host-gateway \
  -v open-webui:/app/backend/data \
  --name open-webui \
  -e ENV='dev' \
  -e OLLAMA_BASE_URLS='http://host.docker.internal:11434' \
  --restart always ghcr.io/open-webui/open-webui:cuda

Стек Nginx и Certbot: Управляется файлом compose.yml в директории /root/nginx. Конфигурация включает: - Образ: jonasal/nginx-certbot:latest. - Режим сети: host. - Том nginx_secrets для хранения сертификатов Let's Encrypt. - Монтирование пользовательских конфигов в /etc/nginx/user_conf.d.

Прокси серверы

Для обработки входящего трафика и управления SSL-сертификатами используется контейнер Nginx с Certbot.

  • Образ: jonasal/nginx-certbot:latest.
  • Домен и сертификаты: Сертификаты хранятся в томе nginx_secrets, который монтируется в /etc/letsencrypt.
  • Почта для Certbot: hkadm@hostkey.com.
  • Правила проксирования:
  • В файле конфигурации /data/nginx/user_conf.d/<prefix><server_id>.hostkey.in.conf в блоке location / добавляется строка:
    proxy_pass http://127.0.0.1:8080;
    
  • Это перенаправляет весь трафик на локальный порт 8080, где работает контейнер Open WebUI.

Базы данных

Приложение Open WebUI использует встроенное хранилище данных, которое сохраняется в томе Docker.

  • Том: open-webui.
  • Путь на хосте: /var/lib/docker/volumes/open-webui/_data.
  • Монтирование: Том монтируется в контейнер по пути /app/backend/data.
  • Внешняя база данных не требуется, все данные (пользователи, чаты, настройки) хранятся внутри этого тома.

Настройки прав

Права доступа к файлам и директориям настроены следующим образом:

  • Директория /root/nginx имеет владельца root:root и права 0755.
  • Файл /root/nginx/compose.yml имеет владельца root:root и права 0644.
  • Служба ollama работает от имени системного пользователя ollama.
  • Контейнер Open WebUI запускается с правами, необходимыми для доступа к GPU и томам данных.

Запуск, остановка и обновление

Управление компонентами системы осуществляется через стандартные утилиты Docker и systemd.

Управление службой Ollama: - Перезагрузка демона systemd:

systemctl daemon-reload
- Перезапуск службы:
systemctl restart ollama
- Включение автозапуска:
systemctl enable ollama

Управление контейнером Open WebUI: - Проверка статуса:

docker inspect -f '{{.State.Status}}' open-webui
- Остановка и удаление (при необходимости):
docker stop open-webui
docker rm open-webui
- Перезапуск (автоматически настроен через флаг --restart always).

Управление стеком Nginx: - Запуск в фоновом режиме:

docker compose up -d
Команда выполняется из директории /root/nginx. - Остановка:
docker compose down

question_mark
Я могу вам чем-то помочь?
question_mark
ИИ Помощник ×