ИИ чат-бот на собственном сервере (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:
Прокси-серверы¶
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:
Управление контейнерами Docker: Для управления контейнерами Open WebUI и Nginx перейдите в каталог /root/nginx и используйте docker compose:
-
Запуск/Перезапуск контейнеров:
-
Остановка контейнеров:
-
Обновление контейнеров: Загрузите последние образы и перезапустите: