Asterisk — это мощная бесплатная АТС, предоставляющая решения VoIP и телефонии, отвечающие потребностям как корпоративных, так и автономных систем.
В статье ниже мы продемонстрируем создание масштабируемого облачного сервера Asterisk с помощью Docker, который требует минимального обслуживания и администрирования.
- Самостоятельно установить Asterisk в Docker например на основе образа Debian;
- Подготовить Dockerfile и собрать образ Docker c Asterisk;
- Наш вариант. Использовать готовый неофициальный образ 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