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

Обзор развертывания 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.

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

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

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

    • Служба Ollama настроена на прослушивание всех сетевых интерфейсов (0.0.0.0) и разрешает источники из любого местоположения.

    • Модель qwen3-coder загружается (pull) и сохраняется локально.

  2. Развертывание 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

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