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

Обзор развертывания 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.

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

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

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

  5. Настройка сервиса Ollama:

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

  8. Развертывание Open WebUI:

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

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

  14. Создается каталог /root/nginx.
  15. Генерируется файл compose.yml для запуска контейнера jonasal/nginx-certbot:latest.
  16. В конфигурационный файл Nginx добавляется правило пересылки запросов (proxy_pass) на http://127.0.0.1:8080.
  17. Запускается контейнер прокси через 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 и их запуск

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

  1. Open WebUI:
  2. Запускается командой 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
  3. Образ: ghcr.io/open-webui/open-webui:cuda.

  4. Nginx Certbot:

  5. Запускается через docker compose из директории /root/nginx.
  6. Образ: jonasal/nginx-certbot:latest.
  7. Режим перезапуска: unless-stopped.
  8. Режим сети: host.
  9. Монтирование томов:
    • nginx_secrets в /etc/letsencrypt.
    • /data/nginx/user_conf.d в /etc/nginx/user_conf.d.
  10. Переменная 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 и перезапуска контейнеров.
question_mark
Я могу вам чем-то помочь?
question_mark
ИИ Помощник ×