Перейти к содержимому
Главная страница » Запуск Asterisk (PBX) в Docker

Запуск Asterisk (PBX) в Docker

Asterisk — это мощная бесплатная АТС, предоставляющая решения VoIP и телефонии, отвечающие потребностям как корпоративных, так и автономных систем. 
В статье ниже мы продемонстрируем создание масштабируемого облачного сервера Asterisk с помощью Docker, который требует минимального обслуживания и администрирования.

На данный момент в Docker Hub нет официального образа Asterisk в связи с этим мы можем:
  1. Самостоятельно установить Asterisk в Docker например на основе образа Debian;
  2. Подготовить Dockerfile и собрать образ Docker c Asterisk;
  3. Наш вариант. Использовать готовый неофициальный образ Asterisk.

На просторах интернета множество инструкций по деплою Asterisk в Docker на основе образа dougbtv/asterisk, образ давно не обновляется, потому я стал искать дальше и нашел постоянно обновляемый образ mlan/asterisk. Страница проекта на git.

Docker Compose Asterisk

При настройке Asterisk и его компонентов необходимо учитывать множество факторов. Некоторые основы мы обсуждаем здесь и в отдельной документации по дополнениям.

Давайте сразу запустим образ, для этого проще всего клонировать репозиторий github и запустить демонстрационную версию.

git clone https://github.com/mlan/docker-asterisk.git

В репозитории в каталоге Demo находится файл docker-compose.xml со следующим содержимым:

name: demo

services:
 tele:
 image: mlan/asterisk
    network_mode: bridge # Only here to help testing
    cap_add:
 - sys_ptrace # Only here to help testing
 - net_admin # Allow NFT, used by AutoBan
 - net_raw # Allow NFT, used by AutoBan
    ports:
 - "${SMS_PORT-8080}:${WEBSMSD_PORT:-80}" # WEBSMSD port mapping
 - "5060:5060/udp"                     # SIP UDP port
 - "5060:5060"                         # SIP TCP port
 - "5061:5061"                         # SIP TLS port
 - "10000-10099:10000-10099/udp"       # RTP ports
    environment:
 - SYSLOG_LEVEL=${SYSLOG_LEVEL-4} # Logging
 - HOSTNAME=${TELE_SRV-tele}.${DOMAIN-docker.localhost}
 - PULSE_SERVER=unix:/run/pulse/socket # Use host audio
 - PULSE_COOKIE=/run/pulse/cookie # Use host audio
 - WEBSMSD_PORT=${WEBSMSD_PORT-80} # WEBSMSD internal port
    volumes:
 - tele-conf:/srv # Persistent storage
 - ./pulse:/run/pulse:rshared # Use host audio
 - /etc/localtime:/etc/localtime:ro # Use host timezone

volumes:
 tele-conf: # Persistent storage

Также важно обратить внимание на Makefile который может пригодиться. 
Из demo каталога вы можете запустить контейнер, просто введя:

make up

Вы можете подключиться к интерфейсу командной строки (CLI) Asterisk, работающему внутри контейнера, введя

make cli

В командной строке Asterisk вы можете ввести

pjsip show endpoints

чтобы увидеть конечные точки (программные телефоны), которые настроены в/etc/asterisk/pjsip_endpoint.confфайле конфигурации, поставляемом с образом по умолчанию.

Когда вы закончите тестирование, вы можете уничтожить тестовый контейнер, набрав

make destroy

Почитать о других настройках можно тут. Также в корне репозитория есть dockerfile, который позволит вам пересобрать образ под себя.

Запуск Asterisk в Docker

Есть еще один интересный образ andrius/asterisk на DockerHub имеет более 100 тысяч загрузок. Как утверждает автор, что это самый маленький образ Docker с АТС Asterisk.

Этот образ основан на образе Alpine Linux, размер которого составляет всего 5 МБ, и содержит Asterisk PBX.

По умолчанию Asterisk будет работать от имени пользователя по умолчанию (asterisk) с UID и GID, назначенными Alpine Linux, но их можно указать с помощью переменных среды:

  • ASTERISK_UID
  • ASTERISK_GID (обратите внимание, GID не поддерживается в выпусках debian)

Пользователь по умолчанию со звездочкой будет воссоздан с новыми UID и GID

В данном примере для запуска будут использоваться идентификаторы текущего пользователя хоста, что позволит устранить проблемы с разрешениями на томе журналов:

docker run -ti --rm \
  -e ASTERISK_UID=`id -u` \
  -e ASTERISK_GID=`id -g` \
  -v ${PWD}/logs:/var/log/asterisk \
  andrius/asterisk

Альтернативный пользователь

Можно указать другого пользователя, отличного от звездочки, для запуска с помощью переменной окружения ASTERISK_USER:

docker run -ti --rm -e ASTERISK_USER=root andrius/asterisk

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *