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

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

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

Для развертывания требуется Linux-сервер с операционной системой Ubuntu и правами root. В системе должен быть установлен и настроен Docker для поддержки ускорения GPU для контейнера open-webui. Требуются следующие компоненты:

  • Операционная система: Ubuntu

  • Права доступа: Доступ root

  • Домен: hostkey.in

  • Порты:

  • 443 (внешний доступ по HTTPS)

  • 8080 (внутренний сервис Open WebUI)

  • 11434 (внутренний сервис Ollama)

FQDN финальной панели

Приложение доступно по следующему формату полностью квалифицированного доменного имени (FQDN):

  • llama<Server ID>.hostkey.in:443

Замените <Server ID> на конкретный идентификатор, назначенный экземпляру сервера.

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

Развертывание использует следующую структуру каталогов для конфигурации, данных и сертификатов:

  • /root/nginx/: Содержит конфигурацию Docker Compose для прокси-сервера.

  • /root/nginx/compose.yml: Файл Docker Compose для сервисов Nginx и Certbot.

  • /data/nginx/user_conf.d/: Содержит пользовательские файлы конфигурации Nginx для конкретного домена.

  • /data/nginx/nginx-certbot.env: Переменные окружения для сервиса Certbot.

  • /etc/systemd/system/ollama.service: Файл сервиса Systemd для Ollama.

  • /etc/systemd/system/ollama.service.bak: Резервная копия исходного файла сервиса Ollama.

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

Стек приложения состоит из Ollama для вывода моделей (inference) и Open WebUI для пользовательского интерфейса.

  1. Установка Ollama:

    • Ollama устанавливается с помощью официального скрипта установки.

    • Создается системный пользователь ollama.

    • Сервис ollama настраивается с использованием конкретных переменных окружения:

      • OLLAMA_HOST=0.0.0.0

      • OLLAMA_ORIGINS=*

      • LLAMA_FLASH_ATTENTION=1

    • Модель llama3.3 загружается (pull) и подгружается в систему.

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

    • Приложение Open WebUI развертывается как Docker-контейнер с использованием образа ghcr.io/open-webui/open-webui:cuda.

    • Контейнер настроен на открытие порта 8080.

    • Для сохранения данных бэкенда используется именованный том (named volume) open-webui.

    • Контейнер подключается к локальному экземпляру Ollama через http://host.docker.internal:11434.

Права доступа и безопасность

  • Межсетевой экран (Firewall): Внешний доступ ограничен портом 443 (HTTPS) через прокси Nginx. Внутренние сервисы на портах 8080 и 11434 не доступны напрямую из публичного интернета.

  • Пользователи: Для управления сервисом Ollama создан системный пользователь ollama.

  • Ограничения: Прокси Nginx обрабатывает завершение SSL-сессий (SSL termination) и пересылает трафик во внутреннее приложение.

Базы данных

  • Хранилище: Open WebUI хранит свои данные в именованном Docker-томе с меткой open-webui.

  • Расположение: Данные сохраняются в /app/backend/data внутри контейнера, что маппится на хранилище Docker-томов хоста.

  • Подключение: Подключение к внешней базе данных не требуется; приложение использует внутреннюю базу данных SQLite, управляемую внутри тома контейнера.

Docker-контейнеры и их развертывание

Развертываются два основных компонента Docker:

  1. Контейнер Open WebUI:

    • Образ: ghcr.io/open-webui/open-webui:cuda

    • Команда:

      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
      

    • Политика перезапуска: always

  2. Контейнер Nginx и Certbot:

    • Образ: jonasal/nginx-certbot:latest

    • Метод развертывания: Docker Compose

    • Расположение: /root/nginx/compose.yml

    • Конфигурация:

    • Использует network_mode: host.

    • Монтирует том nginx_secrets для сертификатов Let's Encrypt.

    • Монтирует /data/nginx/user_conf.d для пользовательских конфигураций сайтов.

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

В развертывании используется Nginx с Certbot для завершения SSL-сессий и работы в качестве обратного прокси.

  • Конфигурация прокси:

  • Контейнер Nginx слушает сеть хоста.

  • Пользовательская конфигурация для домена находится в /data/nginx/user_conf.d/llama<Server ID>.hostkey.in.conf.

  • Прокси пересылает запросы с корневого пути / во внутренний сервис Open WebUI по адресу http://127.0.0.1:8080.

  • SSL/TLS:

  • Автоматически управляется Certbot внутри контейнера Nginx.

  • Сертификаты хранятся в томе nginx_secrets в директории /etc/letsencrypt.

  • Электронная почта: Уведомления о продлении сертификатов отправляются на hkadm@hostkey.com.

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

  • Каталог Nginx: /root/nginx принадлежит пользователю root с правами 0755.

  • Файл Compose: /root/nginx/compose.yml принадлежит пользователю root с правами 0644.

  • Сервис Ollama: Сервис ollama работает от имени системного пользователя ollama.

Расположение файлов конфигурации и данных

  • Nginx Compose: /root/nginx/compose.yml

  • Пользовательская конфигурация Nginx: /data/nginx/user_conf.d/llama<Server ID>.hostkey.in.conf

  • Окружение Certbot: /data/nginx/nginx-certbot.env

  • Сервис Ollama: /etc/systemd/system/ollama.service

  • Данные Open WebUI: Docker-том open-webui (маппится на /app/backend/data внутри контейнера).

Доступные порты для подключения

  • 443: HTTPS (публичный доступ через прокси Nginx).

  • 8080: HTTP (внутренний сервис Open WebUI, проксируется через Nginx).

  • 11434: HTTP (внутренний API Ollama, доступен только с хоста или из сети Docker).

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

  • Сервис Ollama:

  • Запуск: systemctl start ollama

  • Остановка: systemctl stop ollama

  • Перезапуск: systemctl restart ollama

  • Включение при загрузке: systemctl enable ollama

  • Контейнер Open WebUI:

  • Запуск: docker start open-webui

  • Остановка: docker stop open-webui

  • Перезапуск: docker restart open-webui

  • Обновление: Загрузите последний образ и пересоздайте контейнер, используя команду развертывания, предоставленную в разделе Docker-контейнеры.

  • Прокси Nginx:

  • Запуск/Перезапуск: docker compose up -d (выполняется из /root/nginx)

  • Остановка: docker compose down (выполняется из /root/nginx)

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