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

Обзор развертывания 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, загрузка модели и развертывание веб-интерфейса.

  1. Установка зависимостей системы:
  2. Устанавливаются пакеты curl и ca-certificates через менеджер пакетов apt.

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

  4. Запускается скрипт установки от разработчика через команду curl -fsSL https://ollama.com/install.sh | sh.
  5. Создается системный пользователь ollama.
  6. Создается директория для переопределений сервиса /etc/systemd/system/ollama.service.d.
  7. Записывается файл конфигурации /etc/systemd/system/ollama.service.d/override.conf с переменными окружения:
    • OLLAMA_HOST=0.0.0.0
    • OLLAMA_ORIGINS=*
    • LLAMA_FLASH_ATTENTION=1
  8. Сервис ollama перезагружается и включается в автозагрузку.

  9. Загрузка модели нейросети:

  10. Скачивается модель deepseek-r1:14b с помощью команды ollama pull deepseek-r1:14b.

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

  12. Запускается контейнер Docker с образом ghcr.io/open-webui/open-webui:cuda.
  13. Контейнер использует режим сети host для прямого доступа к портам.
  14. Устанавливаются переменные окружения:
    • ENV=dev
    • OLLAMA_BASE_URLS=http://127.0.0.1:11434
  15. Монтируется том open-webui в директорию /app/backend/data внутри контейнера для хранения данных.
  16. Включается доступ к GPU через device_requests.

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

  18. Создается каталог /root/nginx.
  19. Генерируется файл /root/nginx/compose.yml на основе шаблона.
  20. В конфигурационный файл HTTPS-хоста добавляется правило proxy_pass http://127.0.0.1:8080; для пересылки трафика на Open WebUI.
  21. Добавляется заголовок Host для корректной передачи имени хоста.
  22. Создается конфигурация HTTP-хоста для обработки запросов ACME и перенаправления на HTTPS.
  23. Запускается контейнер Nginx через docker compose up -d в директории /root/nginx.
  24. Внутри контейнера создается директория для сертификатов /var/www/certbot/.well-known/acme-challenge.
  25. Проверяется конфигурация Nginx командой nginx -t и выполняется перезагрузка nginx -s reload.

Базы данных

Данные приложения Open WebUI хранятся в Docker-томе с именем open-webui, который монтируется в директорию /app/backend/data внутри контейнера. В предоставленных конфигурациях не используются внешние базы данных или специализированные СУБД.

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

В системе развернуты два основных контейнера:

  1. Контейнер Open WebUI:
  2. Имя: open-webui.
  3. Образ: ghcr.io/open-webui/open-webui:cuda.
  4. Режим сети: host.
  5. Политика перезапуска: always.
  6. Управление: Запуск осуществляется через модуль community.docker.docker_container с параметрами state: started.

  7. Контейнер Nginx с Certbot:

  8. Имя: nginx-nginx-1 (генерируется автоматически).
  9. Образ: jonasal/nginx-certbot:latest.
  10. Режим сети: host.
  11. Политика перезапуска: unless-stopped.
  12. Управление: Запуск осуществляется через команду docker compose up -d в директории /root/nginx.
  13. Монтированные тома:
    • 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.
question_mark
Я могу вам чем-то помочь?
question_mark
ИИ Помощник ×