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

Обзор развертывания Qwen3-Coder на сервере

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

Для развертывания приложения Qwen3-Coder требуется сервер Linux с операционной системой Ubuntu. Перед началом процесса установки должны быть выполнены следующие условия:

  • Операционная система: Ubuntu (конкретная версия не указана, но должна быть совместима с менеджером пакетов apt).

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

  • Конфигурация домена: Сервер должен быть настроен для разрешения домена hostkey.in.

  • Порты:

  • Порт 8080: Внутренняя связь между прокси и приложением Open WebUI.

  • Порт 443: Внешний доступ по HTTPS для финальной панели управления.

  • Порт 11434: Внутренний порт службы Ollama (привязан к 0.0.0.0 для внутренней сети Docker).

FQDN финальной панели

Приложение доступно по следующему формату Полного Квалифицированного Доменного Имени (FQDN) в домене hostkey.in:

  • Формат: qwen3-coder<Server ID>.hostkey.in:443

  • Префикс qwen3-coder жестко задан в конфигурации.

  • Заполнитель <Server ID> должен быть заменен на фактический уникальный идентификатор экземпляра сервера.

  • Внешний порт 443 используется для защищенных соединений HTTPS.

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

Развертывание использует определенные директории для файлов конфигурации, хранения данных и сертификатов:

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

  • /root/nginx/compose.yml: Файл Docker Compose для службы прокси.

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

  • /data/nginx/user_conf.d/: Директория, содержащая специфичные конфигурации блоков сервера.

    • qwen3-coder<Server ID>.hostkey.in.conf: Файл конфигурации для конкретного экземпляра приложения.
  • /data/nginx/nginx-certbot.env: Файл переменных окружения для службы Nginx-Certbot.

  • /etc/systemd/system/ollama.service: Файл единицы службы Systemd для бэкенда Ollama.

  • /usr/share/ollama/.ollama/models/: Расположение по умолчанию для хранения модели qwen3-coder.

  • /var/lib/docker/volumes/open-webui/_data: Постоянный том (persistent volume) для данных бэкенда Open WebUI.

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

Стек приложения состоит из трех основных компонентов: Ollama (бэкенд), Open WebUI (фронтенд) и Nginx с Certbot (прокси).

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

  2. Служба Ollama устанавливается с использованием официального скрипта установки.

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

  4. Файл ollama.service модифицируется для включения следующих переменных окружения:

    • OLLAMA_HOST=0.0.0.0

    • OLLAMA_ORIGINS=*

    • LLAMA_FLASH_ATTENTION=1

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

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

  7. Приложение Open WebUI развертывается как контейнер Docker с использованием образа ghcr.io/open-webui/open-webui:cuda.

  8. Контейнеру присваивается имя open-webui.

  9. Внутренний порт 8080 маппится на порт хоста 8080.

  10. Ускорение GPU включено через флаг --gpus all.

  11. Контейнер подключается к службе Ollama по адресу http://host.docker.internal:11434.

  12. Конфигурация прокси и SSL:

  13. Прокси Nginx развертывается с использованием Docker Compose, расположенного в /root/nginx/compose.yml.

  14. Используется образ jonasal/nginx-certbot:latest.

  15. SSL-сертификаты управляются автоматически через Certbot с использованием электронной почты hkadm@hostkey.com.

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

  • Учетные записи пользователей: Для службы Ollama создается выделенный системный пользователь с именем ollama.

  • Межсетевой экран (Firewall): Конфигурация предполагает доступность портов 8080 (внутренний) и 443 (внешний). Порт 80 неявно требуется для валидации Let's Encrypt.

  • Сетевые ограничения: Служба Ollama привязана к 0.0.0.0 для разрешения соединений из сети Docker, в то время как внешний доступ ограничен прокси Nginx на порту 443.

  • Переменные окружения: Переменная OLLAMA_ORIGINS установлена в значение * для разрешения кросс-доменных запросов из контейнера Open WebUI.

Базы данных

  • Приложение Open WebUI использует локальный постоянный том для своих данных бэкенда.

  • Расположение хранения: /var/lib/docker/volumes/open-webui/_data.

  • Метод подключения: Приложение получает доступ к этим данным через монтирование тома Docker -v open-webui:/app/backend/data.

  • В предоставленном контексте не определены внешние серверы баз данных или специфичные файлы конфигурации баз данных.

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

Развертываются два основных компонента Docker:

  1. Контейнер Open WebUI:

  2. Команда:

    docker run -d -p 8080:8080 --gpus all \
      --add-host=host.docker.internal:host-gateway \
      -v open-webui:/app/backend/data \
      --name open-webui \
      -e ENV='dev' \
      -e OLLAMA_BASE_URLS='http://host.docker.internal:11434' \
      --restart always ghcr.io/open-webui/open-webui:cuda
    

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

  4. Том: open-webui (именованный том).

  5. Контейнер Nginx-Certbot:

  6. Метод развертывания: Docker Compose.

  7. Расположение: /root/nginx/compose.yml.

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

  9. Режим сети: host.

  10. Томы:

    • nginx_secrets (внешний) монтируется в /etc/letsencrypt.

    • /data/nginx/user_conf.d монтируется в /etc/nginx/user_conf.d.

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

Прокси Nginx обрабатывает завершение SSL-соединений и маршрутизацию для приложения.

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

  • Провайдер SSL: Let's Encrypt (Certbot).

  • Электронная почта для сертификатов: hkadm@hostkey.com.

  • Файл конфигурации: /data/nginx/user_conf.d/qwen3-coder<Server ID>.hostkey.in.conf.

  • Proxy Pass: Прокси пересылает запросы с корневого пути / на внутреннее приложение по адресу http://127.0.0.1:8080.

  • Файл окружения: /data/nginx/nginx-certbot.env.

Настройки прав доступа

  • Директория Nginx: /root/nginx принадлежит пользователю root:root с правами доступа 0755.

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

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

  • Томы Docker: Docker автоматически управляет правами доступа для тома open-webui на основе внутренней конфигурации пользователя контейнера.

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

Компонент Путь к файлу/директории Описание
Конфигурация прокси Nginx /root/nginx/compose.yml Определение Docker Compose для прокси.
Пользовательская конфигурация Nginx /data/nginx/user_conf.d/qwen3-coder<Server ID>.hostkey.in.conf Специфичная конфигурация блока сервера.
Переменные окружения Nginx /data/nginx/nginx-certbot.env Переменные окружения для прокси.
Служба Ollama /etc/systemd/system/ollama.service Файл единицы Systemd для Ollama.
Резервная копия Ollama /etc/systemd/system/ollama.service.bak Резервная копия исходного файла службы.
Хранилище модели /usr/share/ollama/.ollama/models/qwen3-coder Расположение загруженной модели.
Данные WebUI /var/lib/docker/volumes/open-webui/_data Постоянные данные для Open WebUI.

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

  • Порт 443: Внешний доступ по HTTPS к панели Qwen3-Coder.

  • Порт 8080: Внутренний доступ по HTTP для приложения Open WebUI (через прокси Nginx).

  • Порт 11434: Внутренний порт API Ollama (доступен внутри сети Docker).

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

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

  • Служба Ollama:

  • Запуск: systemctl start ollama

  • Остановка: systemctl stop ollama

  • Перезапуск: systemctl restart ollama

  • Включение при загрузке: systemctl enable ollama

  • Перезагрузка демона: systemctl daemon-reload

  • Контейнер Open WebUI:

  • Запуск: docker start open-webui

  • Остановка: docker stop open-webui

  • Перезапуск: docker restart open-webui

  • Обновление: Загрузите новый образ и пересоздайте контейнер, используя команду docker run с флагом --rm для старого контейнера (при необходимости), либо используйте docker pull, за которым следует docker update.

  • Прокси Nginx:

  • Запуск/Перезапуск: docker compose up -d, выполненная из директории /root/nginx.

  • Остановка: docker compose down, выполненная из директории /root/nginx.

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