Подготовка к установке MikoPBX в Docker-контейнер
Перед началом работы с Docker, необходимо установить сам Docker и Docker Compose. Вот как это можно сделать:
Перед созданием контейнера на хостовой машине необходимо создать пользователя и группу с ограничеными правами, а также папку для хранения настроек конфигурации и записей разговоров.
Команда для подключения к консоли АТС:
Команда для подключения к консольному меню АТС:
Подключение к shgrep для анализа SIP
Варианты установки MikoPBX в Docker контейнере
«Host система» должна быть запущена на базе Linux 5+. Тестировалось на Debian 11 и Ubuntu-21.04, Ubuntu Server 22.04 LTS
MikoPBX можно запустить в Docker, используя два основных способа. Первый способ включает в себя запуск контейнера напрямую через команду Docker с указанием необходимых параметров. Второй способ предусматривает использование Docker Compose, что упрощает управление многоконтейнерными приложениями и позволяет описать всю конфигурацию в yaml-файле, что делает развертывание и обслуживание системы более удобным.
Установка MikoPBX с помощью Docker
Для работы с MikoPBX в контейнере необходимо установить docker и docker compose, а также создать пользователя и папки для хранения настроек конфигурации и записей разговоров по инструкции
Для запуска контейнера с вашим приложением воспользуйтесь следующими командами:
Чтобы убедиться, что ваше приложение MikoPBX запостилось и работает в Docker-контейнере, можно выполнить следующие шаги после его запуска. Эти шаги помогут проверить состояние контейнера и просмотреть его логи.
Сначала нужно удостовериться, что контейнер успешно запущен и работает. Для этого используем команду docker ps
, которая покажет список запущенных контейнеров и их статус.
Эта команда выведет информацию о всех активных контейнерах. Убедитесь, что контейнер mikopbx
присутствует в списке и его статус указывает на то, что он запущен и работает (например, статус up).
После подтверждения того, что контейнер запущен, следующим шагом будет просмотр логов для проверки, что приложение загрузилось без ошибок и функционирует нормально. Команда docker logs
позволит вам увидеть вывод, который генерирует ваше приложение.
Просмотрите вывод команды на наличие сообщения, подобного указанному ниже. Это сообщение свидетельствует о том, что MikoPBX успешно загружена и готова к использованию:
Если отображается процесс запуска MikoPBX то необходимо подождать и повторить команду sudo docker logs mikopbx
При старте контенер не имеет информации об адресе хостовой системы, потому необходимо открыть внешний адрес хостовой системы, в данном случае Ubuntu в браузере. https://<IP адрес хост системы>
Войдите в веб-интерфейс, используя логин admin
и пароль admin
, чтобы убедиться, что веб-интерфейс доступен и функционирует корректно.
Флаг NET_ADMIN необходим для возможности работы системы проактивной защиты fail2ban и фаервола iptables внутри контейнера. При срабатывании блокировки доступа, например при вводе неверного пароля, доступ с IP адреса злоумышленника будет заблокирован.
Если необходимо использовать «Модуль резервного копирования», то контейнер следует запускать с флагом –privileged. Когда MikoPBX запускается в контейнере, резервное копирование можно также выполнять архивированием каталогов cf и storage вручную . В этом случае привелегированный режим можно не использовать, но в момент копирования контейнер должен быть остановлен.
Флаг –net=host указывает на то, что NAT между хостом и контейнером не будет использоваться. MikoPBX будет подключена напрямую к сети хостовой машины. Все порты, которые должен занять контейнер будут заняты и на хост машине. Если на хост машине, какой-то из портов недоступн, то при загрузке MikoPBX возникнут ошибки. Подробнее в документации к Docker...
При необходимости можно скорректировать стандартный набор портов, которые использует MikoPBX. Это можно сделать объявляя переменные окружения при запуске контейнера.
Помимо использования нашего официального реестра, вам может понадобиться вариант создания контейнера из образа, например для бета версии. В составе опубликованных релизов и предрелизов поставляется tar архив, который мы используем для создания контейнера.
Пример кода, для его использования:
Ниже перечислены некоторые переменные окружения, которые позволят скорректировать используемые MikoPBX порты и настройки.
SSH_PORT - порт для SSH (22)
WEB_PORT - порт для работы web интерфейса по протоколу HTTP (80)
WEB_HTTPS_PORT - порт для работы web интерфейса по протоколу HTTPS (443)
SIP_PORT - порт для подключения SIP клиента (5060)
TLS_PORT - порт для подключения SIP клиента с шифрованием (5061)
RTP_PORT_FROM - начало диапазона RTP портов, передача голоса (10000)
RTP_PORT_TO - конец диапазона RTP портов, передача голоса (10800)
IAX_PORT - порт для подключения IAX клиентов (4569)
AMI_PORT - порт AMI (5038)
AJAM_PORT - порт AJAM используется для подключения панели телефонии для 1С (8088)
AJAM_PORT_TLS - порт AJAM используется для подключения панели телефонии для 1С (8089)
BEANSTALK_PORT - порт для сервера очередей Beanstalkd (4229)
REDIS_PORT - порт для сервера Redis (6379)
GNATS_PORT - порт для сервера gnatsd (4223)
ID_WWW_USER - идентификатор пользователя www-user (можно задать выражением $(id -u www-user)
, где www-user имя НЕ root пользователя)
ID_WWW_GROUP - идентификатор группы www-user (можно задать выражением $(id -g www-user)
, где www-user имя НЕ root группы)
WEB_ADMIN_LOGIN - логин для доступа в Web интерфейс
WEB_ADMIN_PASSWORD - пароль для доступа в Web интерфейс
Полный список всех возможных параметров настроек доступен в исходном коде по ссылке.
Установка MikoPBX с помощью docker compose
Для работы с MikoPBX в контейнере необходимо установить docker и docker compose, а также создать пользователя и папки для хранения настроек конфигурации и записей разговоров по инструкции
Вот пример файла docker-compose.yml
, который может быть использован для управления вашим контейнером MikoPBX через Docker Compose:
Сохраните содержимое в файл docker-compose.yml, выполните необходимые корректировки и запускайте MikoPBX коммандой:
Также можно оганизовать запуск нескольких контенеров MikoPBX на одном хосте, но здесь надо учитывать особенности работы Docker с портами, если не использовать режим –net=host то это приведет к высокой нагрузке на процессор хостовой системы, т.к. Docker создает для каждого выделенного порта отдельное правило в Iptables.
С включенным режимом –net=host вам необходимо вручную следить за распределением доступных портов между запускаемыми контейнерами и встроенными приложениями. Например, для запуска двух контейнеров с MikoPBX на одном хосте, можно использовать следующий конфигурационный файл:
Сохраните содержимое в файл docker-compose.yml, выполните необходимые корректировки и запускайте MikoPBX коммандой:
Существует вариант запуска контейнеров с MikoPBX в режиме –net=bridge, но как описано выше для использования этого режима необходимо или существенно ограничить диапазон RTP портов, или открывать к ним доступ на хостовой машине не используя возможности Docker.
Для этого вам необходимо написать небольшой скрипт, для определения имени текущего мостового интерфейса и IP адреса каждого контейнера, и после запуска docker compose добавить необходимые правила iptables для диапазона RTP портов следующим образом:
Опишем несколько контейнеров в файле docker-compose.yaml, определим разные порты для веб интерфейса, SIP портов и диапазоны RTP портов, чтобы они не пересекались.
Создаем папку для скриптов
Сохраняем файлы start-multiple-mikopbx.sh и docker-compose.yaml в эту папку.
Устанавливаем необходимые зависимости для работы скрипта.
Переходим в нашу папку, добавляем права на выполнение и запускаем наш скрипт.
Пока ожидаем запуск контейнеров, проверяем настройки брендмауера на хосте, при необходимости открваем те порты, которые указаны в нашем docker-compose.yaml файле, а именно:
TCP/UDP порты 5060 и 6060 для SIP
UDP диапазоны 10000-10800 и 20000-20800 для передачи звука по RTP
TCP порты 8443 и 9443 для HTTPS протокола, для работы Web интерфейса.
Входим по очереди на каждую из станций по адресам:
https://<IP хостовой машины>:8443
https://<IP хостовой машины>:9443
Для входа в веб-интерфейс первой АТС MikoPBX используйте логин admin
и пароль mikopbx-first-password
Для входа в веб-интерфейс второй АТС MikoPBX используйте логин admin
и пароль mikopbx-second-password
В каждой машине должен быть включен режим NAT, указывая что контейнер находится за маршрутизатором в настройках сетевого интерфейса. Если станции будут использоваться внутри локальной сети, то в поле внешнего IP прописваем локальный IP адрес хостовой машины, в противном случе ее публичный IP адрес.
Важное замечание! Один из наших контейнеров использует проброс с SIP порта с изменением его значения 5060 -> 6060. В данном случае, для корректной работы системы, необходимо добавить внешнее значение SIP порта в настройках NAT в разделе сетевых интерфейсов MikoPBX. Эту настройку также можно сделать задав соответвующее значение переменной окружения EXTERNAL_SIP_PORT=6060 в файле docker-compose.
На этом настройка завершена, можно настраивать учетные записи и выполнять звонки.
Ниже перечислены некоторые переменные окружения, которые позволят скорректировать используемые MikoPBX порты и настройки.
SSH_PORT - порт для SSH (22)
WEB_PORT - порт для работы web интерфейса по протоколу HTTP (80)
WEB_HTTPS_PORT - порт для работы web интерфейса по протоколу HTTPS (443)
SIP_PORT - порт для подключения SIP клиента (5060)
TLS_PORT - порт для подключения SIP клиента с шифрованием (5061)
RTP_PORT_FROM - начало диапазона RTP портов, передача голоса (10000)
RTP_PORT_TO - конец диапазона RTP портов, передача голоса (10800)
IAX_PORT - порт для подключения IAX клиентов (4569)
AMI_PORT - порт AMI (5038)
AJAM_PORT - порт AJAM используется для подключения панели телефонии для 1С (8088)
AJAM_PORT_TLS - порт AJAM используется для подключения панели телефонии для 1С (8089)
BEANSTALK_PORT - порт для сервера очередей Beanstalkd (4229)
REDIS_PORT - порт для сервера Redis (6379)
GNATS_PORT - порт для сервера gnatsd (4223)
ID_WWW_USER - идентификатор пользователя www-user (можно задать выражением $(id -u www-user)
, где www-user имя НЕ root пользователя)
ID_WWW_GROUP - идентификатор группы www-user (можно задать выражением $(id -g www-user)
, где www-user имя НЕ root группы)
WEB_ADMIN_LOGIN - логин для доступа в Web интерфейс
WEB_ADMIN_PASSWORD - пароль для доступа в Web интерфейс
Полный список всех возможных параметров настроек доступен в исходном коде .