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

ИИ чат-бот на собственном сервере (Ollama и Open WebUI)

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

Для развертывания требуется сервер с поддерживаемой версией Ubuntu. Для выполнения скриптов установки и управления службами необходимы права суперпользователя (root). Следующие компоненты являются обязательными:

  • Операционная система: Ubuntu 22.04 или Ubuntu 24.04. Ubuntu 25.04 не поддерживается из-за отсутствия официальной поддержки NVIDIA CUDA для релизов, не являющихся LTS.

  • Привилегии: Для установки CUDA, Docker и настройки системных служб требуется доступ с правами root или sudo.

  • Аппаратное обеспечение: Для эффективной работы моделей требуется графическая карта NVIDIA с совместимыми драйверами.

  • Порты: Порты 80 и 443 должны быть открыты для работы прокси-сервера Nginx и управления SSL-сертификатами. Порт 8080 используется внутри приложения.

FQDN финальной панели управления

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

  • ollama<Server ID>.hostkey.in

Сервис работает через HTTPS на порту 443.

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

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

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

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

  • /etc/letsencrypt: Содержит SSL-сертификаты, управляемые контейнером Nginx.

  • /app/backend/data: Расположение постоянного тома (persistent volume) для данных приложения Open WebUI внутри контейнера.

  • /etc/systemd/system: Содержит файл юнита службы для Ollama (ollama.service).

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

Установка включает настройку драйверов CUDA, Docker, Ollama и веб-интерфейса через контейнеры Docker.

  • Проверка совместимости ОС: Скрипт установки проверяет версию Ubuntu. Если обнаружена Ubuntu 25.04, установка прерывается.

  • CUDA и драйверы NVIDIA:

  • Скрипт устанавливает gcc в качестве предварительного требования.

  • CUDA Toolkit и драйверы устанавливаются в зависимости от версии релиза Ubuntu (22.04 или 24.04).

  • Устанавливается пакет nvidia-docker2 (для Ubuntu 22.04) или nvidia-container-toolkit (для Ubuntu 24.04) для обеспечения использования GPU в контейнерах Docker.

  • Установка Ollama:

  • Ollama устанавливается с помощью официального скрипта с адреса https://ollama.com/install.sh.

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

  • Файл службы по умолчанию резервируется и заменяется пользовательской конфигурацией для включения ускорения GPU и специфических переменных окружения.

  • Инициализация модели:

  • При успешной установке скрипт автоматически загружает (pull) модель qwen3:14b.

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

Безопасность обеспечивается с помощью правил межсетевого экрана (firewall), прав пользователей и изоляции служб.

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

  • SSL/TLS: SSL-сертификаты автоматически управляются контейнером nginx-certbot, обеспечивая зашифрованную связь через HTTPS.

  • Сетевая изоляция: Контейнеры приложения общаются внутри через сети Docker, при этом публичному интернету открыт только прокси-сервер Nginx.

Базы данных

Приложение Open WebUI хранит свои данные в структуре томов Docker.

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

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

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

Приложение зависит от двух основных контейнеров, управляемых через Docker Compose:

  • Open WebUI:

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

  • Имя контейнера: open-webui

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

  • Подключение тома: open-webui:/app/backend/data

  • Внутренний порт: 8080

  • Nginx Proxy:

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

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

  • Маппинг портов: Порты 80 и 443 открыты для хоста.

  • Подключения томов:

    • nginx_secrets сопоставлен с /etc/letsencrypt

    • Каталог хоста /data/nginx/user_conf.d сопоставлен с /etc/nginx/user_conf.d

  • Команда развертывания: Контейнеры запускаются с помощью следующей команды в каталоге /root/nginx:

    docker compose up -d
    

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

Nginx выступает в роли обратного прокси (reverse proxy) и завершает SSL-соединения для приложения.

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

  • Настройки прокси:

  • Прокси пересылает запросы из location / по адресу http://open-webui:8080.

  • Завершение SSL-сессии (SSL termination) осуществляется контейнером Nginx с использованием Let's Encrypt.

  • Окружение:

  • Адрес электронной почты для управления сертификатами установлен как hkadm@hostkey.com.

Настройки разрешений

Разрешения на файлы и каталоги настроены следующим образом:

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

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

  • Системная служба: Файл службы Ollama по адресу /etc/systemd/system/ollama.service установлен с правами 0644 и владением root:root.

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

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

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

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

  • Файл службы Ollama: /etc/systemd/system/ollama.service

  • Данные приложения: /app/backend/data (внутри тома контейнера open-webui)

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

Для развертывания настроены следующие порты:

  • Порт 443: HTTPS-трафик для веб-интерфейса (Внешний).

  • Порт 80: HTTP-трафик для валидации SSL-сертификатов и перенаправления (Внешний).

  • Порт 3000: Внутренний порт, определенный в конфигурации (не открыт напрямую для публики).

  • Порт 8080: Внутренний порт, используемый контейнером Open WebUI.

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

Служба Ollama и контейнеры Docker управляются через стандартные системные и контейнерные команды.

Управление службой Ollama: Для управления бэкенд-службой Ollama используйте следующие команды systemctl:

systemctl restart ollama
systemctl status ollama

Управление контейнерами Docker: Для управления контейнерами Open WebUI и Nginx перейдите в каталог /root/nginx и используйте docker compose:

  • Запуск/Перезапуск контейнеров:

    cd /root/nginx
    docker compose up -d
    

  • Остановка контейнеров:

    docker compose down
    

  • Обновление контейнеров: Загрузите последние образы и перезапустите:

    docker compose pull
    docker compose up -d
    

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