Обзор развертывания Qwen3-Coder на сервере¶
Предварительные требования и основные условия¶
Перед развертыванием приложения Qwen3-Coder должны быть выполнены следующие системные требования:
-
Операционная система: Ubuntu (судя по использованию пакетного менеджера
aptв конфигурации). -
Привилегии: Для установки системных пакетов, управления службами и запуска контейнеров Docker требуются права суперпользователя (root) или доступ
sudo. -
Домен: Сервер должен быть связан с зоной
hostkey.in. -
Порты:
-
Порт
8080: Используется внутренне приложением Open WebUI. -
Порт
443: Используется внешним образом для HTTPS-трафика через прокси Nginx. -
Порт
11434: Используется внутренне службой Ollama.
Полное доменное имя (FQDN) финальной панели¶
Приложение доступно по Полному Доменному Имени (FQDN) по следующему шаблону:
qwen3-coder<Server ID>.hostkey.in:443
Где <Server ID> заменяется на уникальный идентификатор, присвоенный экземпляру сервера. Трафик по этому домену защищен с помощью SSL и маршрутизируется на внутренний порт приложения.
Структура файлов и каталогов¶
Развертывание использует следующую структуру каталогов для конфигурации, данных и сертификатов:
-
/root/nginx/: Содержит конфигурацию Docker Compose для прокси Nginx и Certbot. -
/root/nginx/compose.yml: Файл Docker Compose, определяющий службу Nginx. -
/data/nginx/nginx-certbot.env: Файл переменных окружения для конфигурации Nginx и Certbot. -
/data/nginx/user_conf.d/: Каталог, содержащий конфигурационные файлы Nginx для конкретных сайтов. -
/data/nginx/user_conf.d/qwen3-coder<Server ID>.hostkey.in.conf: Специфичный файл конфигурации Nginx для экземпляра Qwen3-Coder. -
/etc/systemd/system/ollama.service: Файл единицы Systemd для службы Ollama. -
/usr/share/ollama/.ollama/models/: Расположение постоянного тома для моделей Ollama. -
/var/lib/docker/volumes/open-webui/_data: Расположение постоянного тома для данных Open WebUI.
Процесс установки приложения¶
Стек приложения состоит из движка вывода ИИ Ollama и фронтенда Open WebUI.
-
Установка Ollama:
-
Пакет Ollama устанавливается с помощью официального скрипта установки:
curl -fsSL https://ollama.com/install.sh | sh. -
Создается системный пользователь с именем
ollama. -
Служба Ollama настроена на прослушивание всех сетевых интерфейсов (
0.0.0.0) и разрешает источники из любого местоположения. -
Модель
qwen3-coderзагружается (pull) и сохраняется локально.
-
-
Развертывание Open WebUI:
-
Приложение Open WebUI развертывается как контейнер Docker с использованием образа
ghcr.io/open-webui/open-webui:cuda. -
Имя контейнера —
open-webui. -
Контейнер настроен на подключение к локальному экземпляру Ollama по адресу
http://host.docker.internal:11434. -
Контейнер запускается с включенной поддержкой GPU (
--gpus all).
-
Права доступа и безопасность¶
Безопасность и контроль доступа управляются следующими механизмами:
-
Прокси Nginx: Обрабатывает внешние запросы и обеспечивает шифрование SSL/TLS.
-
Межсетевой экран (Firewall): Неявно (implicitly) управляется конфигурацией прокси Nginx, которая слушает стандартные порты; прямое открытие внутреннего порта приложения (
8080) для публичного интернета не требуется. -
Ограничения пользователей:
-
Служба
ollamaработает под выделенным системным пользователемollama. -
Тома Docker изолируют данные приложения от файловой системы хоста.
-
SSL-сертификаты: Управляются автоматически сервисом Certbot внутри контейнера Nginx, обеспечивая действительные HTTPS-соединения.
Базы данных¶
Приложение Open WebUI использует локальный постоянный том для хранения данных.
-
Расположение хранения: Данные хранятся в томе Docker с именем
open-webui, физически расположенном по пути/var/lib/docker/volumes/open-webui/_data. -
Способ подключения: Приложение получает доступ к этим данным через смонтированный том внутри контейнера Docker:
-v open-webui:/app/backend/data. -
Настройки: Соединительная строка внешней базы данных не требуется; приложение управляет своей внутренней базой данных SQLite внутри смонтированного тома.
Контейнеры Docker и их развертывание¶
Для запуска как фронтенда, так и обратного прокси используется Docker.
Контейнер Open WebUI¶
Контейнер Open WebUI запускается со следующими параметрами:
-
Образ:
ghcr.io/open-webui/open-webui:cuda -
Имя:
open-webui -
Картирование портов: Порт хоста
8080сопоставляется с портом контейнера8080. -
Переменные окружения:
-
ENV: Установлено значениеdev. -
OLLAMA_BASE_URLS: Установлено значениеhttp://host.docker.internal:11434. -
Тома: Монтирует именованный том
open-webuiв/app/backend/data. -
Оборудование: Использует все доступные GPU (
--gpus all). -
Политика перезапуска: Настроен на постоянный перезапуск (
--restart always). -
Разрешение имён хоста: Добавляет запись DNS
host.docker.internal, указывающую на шлюз хоста.
Контейнеры Nginx и Certbot¶
Прокси Nginx управляется через Docker Compose, расположенный по пути /root/nginx/compose.yml.
-
Образ:
jonasal/nginx-certbot:latest -
Имя службы:
nginx -
Режим сети: Хост (
network_mode: host). -
Тома:
-
nginx_secrets(внешний) сопоставлен с/etc/letsencrypt. -
Каталог хоста
/data/nginx/user_conf.dсопоставлен с/etc/nginx/user_conf.d. -
Окружение: Использует файл
/data/nginx/nginx-certbot.envдля конфигурации. -
Email: Настроен с использованием
CERTBOT_EMAIL=hkadm@hostkey.com.
Прокси-серверы¶
Обратный прокси Nginx настроен для обработки терминации SSL и маршрутизации трафика на внутреннюю службу Open WebUI.
-
Файл конфигурации прокси:
/data/nginx/user_conf.d/qwen3-coder<Server ID>.hostkey.in.conf -
Пересылка прокси (Proxy Pass): Конфигурация Nginx включает правило для пересылки запросов на внутреннее приложение:
proxy_pass http://127.0.0.1:8080; -
SSL/Certbot: SSL-сертификаты получают и обновляются автоматически контейнером
jonasal/nginx-certbotдля доменаqwen3-coder<Server ID>.hostkey.in. -
Домен: Прокси слушает конкретный поддомен и маршрутизирует трафик безопасно через порт
443.
Настройки прав доступа¶
Права доступа к файлам и каталогам установлены следующим образом для обеспечения корректной работы:
-
Каталог Nginx:
-
/root/nginx: Режим0755, владелецroot:root. -
Файл Docker Compose:
-
/root/nginx/compose.yml: Режим0644, владелецroot:root. -
Каталог конфигурации Nginx:
-
/data/nginx/user_conf.d: Управляется процессом контейнера Nginx, требующим соответствующего доступа на чтение/запись для контейнера. -
Служба Ollama:
-
Служба
ollamaработает с системными привилегиями и владеет файлами моделей в каталоге/usr/share/ollama/.ollama/models/. -
Тома Docker:
-
Docker автоматически управляет правами доступа для тома
open-webuiна основе внутренних требований пользователя контейнера.
Доступные порты для подключения¶
Следующие порты актуальны для развертывания:
-
Порт 443: Внешняя точка входа для HTTPS-трафика к домену
qwen3-coder<Server ID>.hostkey.in. -
Порт 8080: Внутренний порт, на котором слушает Open WebUI. Он перенаправляется через Nginx и не доступен напрямую из публичного интернета.
-
Порт 11434: Внутренний порт, на котором слушает служба Ollama, доступный только в контексте сети хоста.
Запуск, остановка и обновление¶
Управление службами развернутых компонентов осуществляется через Docker и systemd.
-
Прокси Nginx:
-
Для запуска или обновления стека прокси выполните команду
docker compose up -dиз каталога/root/nginx. -
Для остановки стека прокси выполните команду
docker compose downиз каталога/root/nginx. -
Контейнер Open WebUI:
-
Для остановки контейнера:
docker stop open-webui -
Для запуска контейнера:
docker start open-webui -
Для обновления образа: Загрузите новую версию образа и перезапустите контейнер.
-
Служба Ollama:
-
Для перезапуска службы:
systemctl restart ollama -
Для включения службы при загрузке:
systemctl enable ollama -
Для перезагрузки демона systemd после изменения конфигурации:
systemctl daemon-reload