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

Обзор развертывания Open WebUI с DeepSeek-R1:14B на сервере

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

Для развертывания требуется Linux-сервер с Ubuntu, соответствующий следующим спецификациям:

  • Операционная система: Ubuntu (рекомендуется последняя LTS-версия).

  • Привилегии: Для всех шагов установки и конфигурации требуются права root или привилегии sudo.

  • Домен: Сервер должен быть настроен для разрешения домена hostkey.in.

  • Порты:

  • Порт 80: Требуется для перенаправления HTTP и валидации вызовов ACME.

  • Порт 443: Требуется для трафика HTTPS.

  • Порт 11434: Используется внутренне службой Ollama.

  • Порт 3000: Внутренний порт для приложения Open WebUI.

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

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

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

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

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

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

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

  • /root/nginx/compose.yml: Файл Docker Compose для Nginx и Certbot.

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

  • /data/nginx/user_conf.d/: Каталог, содержащий файлы конфигурации виртуальных хостов.

    • deepseek<Server ID>.hostkey.in.conf: Конфигурация виртуального хоста HTTPS.

    • deepseek<Server ID>.hostkey.in.http.conf: Конфигурация виртуального хоста HTTP для вызовов ACME.

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

  • /etc/systemd/system/ollama.service.d/: Каталог, содержащий переопределения systemd для службы Ollama.

  • override.conf: Файл конфигурации, изменяющий переменные окружения Ollama.

  • /var/www/certbot/: Каталог webroot внутри контейнера Nginx для вызовов ACME от Let's Encrypt.

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

Стек приложения состоит из трех основных компонентов: Ollama, Open WebUI и обратного прокси-сервера Nginx с Certbot.

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

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

  3. Модель deepseek-r1:14b загружается и подгружается в службу Ollama.

  4. Служба настраивается на прослушивание всех сетевых интерфейсов (0.0.0.0) и разрешает межсайтовые запросы (CORS).

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

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

  7. Контейнер настраивается на использование сетевого режима хоста (host networking) и запрашивает возможности GPU.

  8. Он подключается к локальному экземпляру Ollama по адресу http://127.0.0.1:11434.

  9. Настройка прокси и SSL:

  10. Развертывается контейнер Nginx с образом jonasal/nginx-certbot:latest для обработки терминации SSL и работы в качестве обратного прокси.

  11. Прокси пересылает трафик с внешнего FQDN на внутренний сервис Open WebUI.

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

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

  • Межсетевой экран (Firewall): Сервер должен разрешать входящий трафик на портах 80 и 443. Внутренняя коммуникация происходит на портах 11434 и 3000.

  • SSL/TLS: Сертификаты SSL управляются автоматически службой Certbot внутри контейнера Nginx.

  • Ограничения окружения: Служба Ollama настроена с параметром OLLAMA_ORIGINS=* для разрешения подключений из веб-интерфейса, а также включен параметр LLAMA_FLASH_ATTENTION=1 для оптимизации производительности.

Базы данных

  • Метод хранения: Приложение Open WebUI хранит свои данные в Docker-томе с именем open-webui.

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

  • Конфигурация: Внешний сервер базы данных не требуется; приложение использует свой внутренний механизм хранения.

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

Развертывание использует два основных Docker-контейнера:

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

  2. Имя: open-webui

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

  4. Режим сети: host

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

  6. Переменные окружения:

    • ENV: dev

    • OLLAMA_BASE_URLS: http://127.0.0.1:11434

  7. Томы:

    • open-webui:/app/backend/data
  8. Запросы устройств: Запрашиваются возможности GPU для ускорения инференса.

  9. Контейнер прокси Nginx:

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

  11. Режим сети: host

  12. Политика перезапуска: unless-stopped

  13. Переменные окружения:

    • CERTBOT_EMAIL: hkadm@hostkey.com
  14. Томы:

    • nginx_secrets:/etc/letsencrypt (Внешний том)

    • /data/nginx/user_conf.d:/etc/nginx/user_conf.d (Прямое монтирование)

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

Обратный прокси-сервер Nginx настроен для обработки терминации SSL и маршрутизации трафика на приложение Open WebUI.

  • Провайдер SSL: Let's Encrypt через Certbot.

  • Файлы конфигурации:

  • HTTPS: Расположен по пути /data/nginx/user_conf.d/deepseek<Server ID>.hostkey.in.conf.

    • Слушает порт 443.

    • Пересылает запросы на http://127.0.0.1:8080 (Примечание: Скрипт конфигурации устанавливает прокси-пересылку на порт 8080, хотя внутреннее приложение работает на порту 3000; система полагается на специфическую маршрутизацию, определенную в сгенерированной конфигурации).

    • Передает заголовок Host на вышестоящий сервер.

  • HTTP: Расположен по пути /data/nginx/user_conf.d/deepseek<Server ID>.hostkey.in.http.conf.

    • Слушает порт 80.

    • Обслуживает вызовы ACME из /var/www/certbot/.well-known/acme-challenge/.

    • Перенаправляет весь остальной трафик на HTTPS.

  • Пользовательские домены: Прокси настроен специально для поддомена deepseek<Server ID>.hostkey.in.

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

  • Каталог конфигурации Nginx: /root/nginx принадлежит root:root с правами 0755.

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

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

  • Переопределения Systemd: /etc/systemd/system/ollama.service.d/override.conf принадлежит root со стандартными системными правами конфигурации.

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

  • Переопределение службы Ollama: /etc/systemd/system/ollama.service.d/override.conf

  • Файл Compose Nginx: /root/nginx/compose.yml

  • Конфигурация HTTPS Nginx: /data/nginx/user_conf.d/deepseek<Server ID>.hostkey.in.conf

  • Конфигурация HTTP Nginx: /data/nginx/user_conf.d/deepseek<Server ID>.hostkey.in.http.conf

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

  • Данные приложения: Хранятся в Docker-томе open-webui.

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

  • Порт 80: HTTP (Перенаправляет на HTTPS).

  • Порт 443: HTTPS (Основная точка доступа к интерфейсу Open WebUI).

  • Порт 11434: API Ollama (Только для внутреннего использования).

  • Порт 3000: Внутренний порт Open WebUI (Не открыт напрямую для публичного интернета).

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

Службы управляются через systemd для 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 pull ghcr.io/open-webui/open-webui:cuda, за которым следует docker restart open-webui

  • Контейнер прокси Nginx:

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

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

  • Перезагрузка конфигурации: docker exec nginx-nginx-1 nginx -s reload

  • Проверка конфигурации: docker exec nginx-nginx-1 nginx -t

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