Docker-обработчик (Linux)
Docker-обработчик для ИИ Супервайзера: установка на Linux-сервер с нуля, видеокарта NVIDIA, подключение к MikoPBX, проверка работы, обновление и удаление.
Docker-обработчик - контейнер для локального ИИ-анализа звонков на вашем Linux-сервере. Он берет задания из очереди модуля Локальный ИИ Супервайзер, анализирует расшифровку локальной языковой моделью, определяет эмоции по записи разговора и отправляет результат на станцию. Расшифровки и записи не покидают вашу сеть.
Docker-обработчик - альтернатива приложению AI Supervisor Worker для macOS. Логика анализа у них общая: промпты, схема результата, привязка выводов к репликам расшифровки и критерии качества одинаковые, поэтому результат не зависит от того, какой обработчик взял задание.
Образ опубликован в Docker Hub: excla1m/mikopbx-ai-supervisor-worker. Тег latest всегда указывает на последнюю стабильную версию.
Как устроен
Обработчик запускается двумя контейнерами из одного файла compose.yaml:
ai-supervisor-worker
excla1m/mikopbx-ai-supervisor-worker
Связь с MikoPBX, очередь заданий, подготовка промптов, проверка ответа модели, анализ эмоций по голосу (SenseVoice, на процессоре)
ai-supervisor-ollama
ollama/ollama
Локальная языковая модель. Если на сервере есть видеокарта NVIDIA, модель работает на ней
Обработчик не выбирает звонки и не хранит серверную очередь: какие звонки анализировать, какой моделью и с какими компонентами, решает модуль в MikoPBX.
Требования
ОС
64-битный Linux (x86_64 или arm64)
Ubuntu Server 24.04 LTS или Debian 12
Процессор
4 ядра с поддержкой AVX2
6-8 ядер
Память
8 ГБ
16 ГБ
Видеокарта
не обязательна
NVIDIA с 8 ГБ видеопамяти и больше, архитектура Turing или новее
Диск
40 ГБ
60 ГБ
Docker
Docker Engine с плагином Compose 2.24 или новее
последняя стабильная версия
MikoPBX
модуль Локальный ИИ Супервайзер с поддержкой worker API v2
последняя версия модуля
Сеть
исходящий HTTPS до MikoPBX, Docker Hub, registry.ollama.ai и huggingface.co
то же
Модели
Модель выбирается в MikoPBX: Настройки → ИИ-анализ. Каждое задание приходит со своим профилем модели, и обработчик сам скачивает модель в Ollama, если ее еще нет.
Qwen3.5 4B Q4 (рекомендуется)
qwen3.5:4b
3,3 ГБ
4-6 ГБ
Повседневный анализ звонков, быстрая работа
Qwen3.5 9B Q4 (повышенное качество)
qwen3.5:9b
6,6 ГБ
8-12 ГБ
Сложные и длинные разговоры, нужна видеокарта от 12 ГБ
Для анализа эмоций по голосу обработчик при первом таком задании скачивает модель SenseVoice Small (ONNX, около 240 МБ) в том models и проверяет контрольную сумму каждого файла.
Шаг 1. Подготовка сервера
Установите Docker Engine и плагин Compose:
Проверьте установку и процессор:
Проверьте доступ к MikoPBX и Docker Hub:
Шаг 2. Видеокарта NVIDIA (необязательно)
Пропустите этот шаг, если видеокарты нет: модель будет работать на процессоре.
Установите драйвер NVIDIA 550 или новее. В Ubuntu:
Проверьте, что драйвер видит карту:
Установите NVIDIA Container Toolkit, чтобы Docker мог передавать видеокарту контейнерам:
Проверьте видеокарту внутри контейнера:
Команда должна показать вашу видеокарту, например:
Шаг 3. Подготовка MikoPBX
Откройте Модули → Локальный ИИ Супервайзер → Настройки → Обработчики.
Нажмите Создать ключ доступа.
Скопируйте ключ: он показывается один раз и после обновления страницы больше не будет доступен.
В разделе Настройки → ИИ-анализ проверьте выбранную модель (см. раздел Модели).
Если модуль устанавливается впервые, ключ можно создать в мастере настройки на шаге Локальный воркер: нажмите Создать ключ доступа, а приложение для macOS скачивать не нужно.
Шаг 4. Файл compose.yaml
Создайте каталог обработчика и файл compose.yaml:
name: ai-supervisor-worker
Фиксирует имена томов (ai-supervisor-worker_data и другие) независимо от имени каталога.
restart: unless-stopped
Обработчик и Ollama запускаются вместе с Docker после перезагрузки сервера.
volumes
data - настройки, UID и статус обработчика; models - модель SenseVoice; ollama - языковые модели.
read_only, cap_drop, no-new-privileges
Обработчик не может писать никуда, кроме томов и /tmp, и работает без привилегий от пользователя с uid 10001.
stop_grace_period: 90s
Время, за которое текущее задание успевает завершиться или вернуться в очередь при остановке.
OLLAMA_NUM_PARALLEL: "1"
Обработчик анализирует по одному звонку, Ollama не делит память между запросами.
OLLAMA_KEEP_ALIVE: "30m"
Модель остается загруженной между заданиями и не перечитывается с диска для каждого звонка.
deploy.resources... (сервис ollama)
Передает видеокарту NVIDIA контейнеру Ollama. Обработчику видеокарта не нужна.
Порт Ollama наружу не публикуется: к ней обращается только обработчик по внутренней сети Docker.
Шаг 5. Получение образов
Docker сам выберет архитектуру сервера (x86_64 или arm64). Образ обработчика занимает около 1 ГБ на диске, образ Ollama - около 9 ГБ.
Шаг 6. Подключение к MikoPBX (setup)
Запустите мастер настройки:
Мастер спросит:
Адрес MikoPBX -
https://<адрес-mikopbx>без пути.Проверять ли сертификат MikoPBX - по умолчанию нет (см. раздел TLS).
Ключ обработчика - ключ из шага 3, ввод скрыт.
Имя обработчика - как он будет показан в разделе Обработчики.
Адрес локальной модели - оставьте
http://ollama:11434/v1.Модель для подготовки - модель, которую обработчик скачает до первого задания. Укажите модель профиля, выбранного в MikoPBX:
qwen3.5:4bилиqwen3.5:9b.
Затем мастер проверит подключение и сохранит настройки в томе data (/data/config.json, права 600). Пример:
При первой установке модели в Ollama еще нет, и вместо последней проверки будет строка Reachable: Local runtime is reachable, but model "qwen3.5:4b" is not installed yet. - это нормально: модель скачается после запуска.
Шаг 7. Запуск
При первом запуске обработчик регистрируется в MikoPBX и скачивает модель в Ollama (qwen3.5:4b - 3,3 ГБ, несколько минут), после чего начинает брать задания:
Проверка работы
В MikoPBX в разделе Настройки → Обработчики появился обработчик со статусом Онлайн и его IP-адресом.
Команда
statusпоказывает состояние и счетчик заданий:Команда
checkпроверяет ключ, модель и среду анализа голоса без запуска заданий:Если используется видеокарта, проверьте, что модель загружена в нее целиком:
Значение вида
13%/87% CPU/GPUозначает, что модель не поместилась в видеопамять и часть работы выполняет процессор. Выберите профиль модели меньше или уменьшите размер контекста в MikoPBX.В журнале видны задания анализа звонка и анализа эмоций по голосу. При первом задании по голосу обработчик скачивает модель SenseVoice:
В карточке звонка появились сводка, оценки и, если компонент включен, эмоции по голосу.
На видеокарте анализ звонка моделью qwen3.5:4b обычно занимает 30-60 секунд, анализ эмоций по голосу - 5-20 секунд.
Управление
Состояние
docker compose exec worker ai-supervisor-worker status
Проверить подключение, ключ и модель
docker compose exec worker ai-supervisor-worker check
Журнал обработчика
docker compose logs -f --tail 100 worker
Загруженные модели
docker compose exec ollama ollama ps
Остановить
docker compose stop
Запустить
docker compose start
Перезапустить
docker compose restart
Изменить настройки
docker compose run --rm worker setup, затем docker compose up -d
Версия
docker compose exec worker ai-supervisor-worker version
Все команды выполняются в каталоге /opt/mikopbx-ai-supervisor-worker. При остановке текущее задание завершается или возвращается в очередь MikoPBX, новые звонки ждут в очереди.
Обновление
Скачайте новые версии образов и пересоздайте контейнеры. Модели и настройки хранятся в томах и сохраняются.
Чтобы закрепить конкретную версию, укажите в строке image тег вида excla1m/mikopbx-ai-supervisor-worker:<версия>-cpu, например 0.1.7-cpu. Список версий есть на вкладке Tags в Docker Hub.
Удаление
Затем в MikoPBX в разделе Обработчики удалите ключ доступа этого обработчика. Без -v тома сохраняются, и при повторной установке модели не придется скачивать заново.
Настройка через .env
Вместо setup параметры можно задать в файле .env рядом с compose.yaml. Непустая переменная окружения всегда важнее значения, сохраненного мастером.
PBX_URL
-
Адрес MikoPBX: https://host[:port], без пути
WORKER_TOKEN / WORKER_TOKEN_FILE
-
Ключ обработчика строкой или путь к файлу внутри контейнера
WORKER_NAME
Docker AI worker
Имя в разделе Обработчики
WORKER_UID
создается автоматически
Постоянный идентификатор; ключ привязывается к одному UID
PBX_TLS_VERIFY
false
true - отклонять недоверенный сертификат MikoPBX
PBX_CA_FILE
-
Дополнительный CA (PEM или DER) при включенной проверке TLS
AI_BASE_URL
http://ollama:11434/v1
Адрес локальной модели: Ollama или OpenAI-совместимый сервер
AI_MODEL
qwen3.5:4b
Модель, которую обработчик скачивает до первого задания. Модель для анализа выбирается в MikoPBX
AI_TIMEOUT
300
Ограничение одного запроса к модели, секунд (профиль в MikoPBX может его изменить)
POLL_INTERVAL
15
Пауза между опросами очереди в простое, секунд
HEARTBEAT_INTERVAL
60
Интервал продления аренды задания, секунд
API_TIMEOUT
30
Ограничение одного запроса к MikoPBX, секунд
ACOUSTIC_TIMEOUT
60
Ограничение анализа эмоций по голосу для одного звонка, секунд
ONNX_THREADS
0
Потоки процессора для анализа голоса, 0 - все ядра
LOG_LEVEL
INFO
DEBUG, INFO, WARNING, ERROR
Другой сервер с моделью
Если языковая модель уже работает на другом сервере (Ollama, vLLM, LM Studio или другой OpenAI-совместимый сервер), контейнер Ollama можно не запускать:
Удалите из
compose.yamlсервисollama, строкуdepends_onи томollama.Укажите адрес сервера в
.env:AI_BASE_URL=http://<адрес-сервера>:11434/v1.Перезапустите обработчик:
docker compose up -d.
Модель для каждого задания по-прежнему выбирается в MikoPBX, поэтому она должна быть доступна на этом сервере.
TLS
Проверка сертификата по умолчанию выключена: обработчик принимает любой сертификат MikoPBX (самоподписанный, выпущенный на другое имя, при обращении по IP), трафик при этом все равно шифруется. Это поведение совпадает с AI Supervisor Worker для macOS.
Чтобы отклонять недоверенные сертификаты, включите проверку в setup или задайте PBX_TLS_VERIFY=true. Используется системное хранилище CA; для собственного центра сертификации передайте файл через PBX_CA_FILE и подключите его в контейнер томом.
Диагностика проблем
status: update required (module or worker)
Версия модуля и обработчика не совместимы. Обновите Локальный ИИ Супервайзер или образ обработчика. Обработчик повторяет проверку каждые 15 минут.
status: the PBX rejected the worker key
Ключ удален, введен с ошибкой или уже привязан к другому обработчику. Создайте новый ключ в разделе Обработчики и запустите setup еще раз.
status: PBX unreachable, waiting to retry
Нет связи с MikoPBX. Проверьте curl -skI https://<адрес-mikopbx> с сервера. Обработчик сам повторяет подключение с растущим интервалом до 30 минут.
could not select device driver "nvidia" при запуске
Не установлен NVIDIA Container Toolkit или Docker не перезапущен после его настройки. Повторите шаг 2.
ollama ps показывает 100% CPU при наличии видеокарты
Контейнер Ollama не получил видеокарту: проверьте блок deploy в compose.yaml и команду docker run --rm --gpus all ubuntu nvidia-smi.
ollama ps показывает CPU/GPU, анализ медленный
Модель не помещается в видеопамять. Выберите профиль Qwen3.5 4B Q4 или уменьшите размер контекста в MikoPBX.
Задания завершаются по тайм-ауту
Модель работает слишком медленно, обычно на процессоре без видеокарты. Используйте видеокарту или сервер с более быстрым процессором.
Модель не скачивается
Нет доступа к registry.ollama.ai. Откройте исходящий HTTPS для сервера или прокси.
Не скачивается модель SenseVoice
Нет доступа к huggingface.co. Откройте исходящий HTTPS для сервера или прокси.
docker pull завершается ошибкой connection reset или по тайм-ауту
Нет доступа к Docker Hub. Откройте исходящий HTTPS до registry-1.docker.io и production.cloudfront.docker.com или настройте зеркало реестра.
Ошибка TLS при подключении
Включена проверка сертификата, а сертификат MikoPBX недоверенный. Выключите проверку или передайте свой CA.
Контейнер unhealthy
Цикл обработчика не отчитывался 10 минут. Посмотрите docker compose logs --tail 200 worker.
Данные и безопасность
Языковые модели
том ai-supervisor-worker_ollama
Модель SenseVoice
том ai-supervisor-worker_models (/models)
Настройки и ключ
том ai-supervisor-worker_data, файл /data/config.json с правами 600
UID обработчика
том ai-supervisor-worker_data, файл /data/worker_uid
Журналы
журнал Docker и файл в /data/logs
Временные записи
том ai-supervisor-worker_data, удаляются после задания
Обработчик подключается к MikoPBX только исходящими HTTPS-запросами, получает расшифровки и записи только назначенных ему заданий и не хранит их после обработки. Языковая модель работает внутри вашей сети и не отправляет данные во внешние сервисы. Ключ обработчика дает доступ только к API модуля ИИ Супервайзера.
Last updated
Was this helpful?

