Asterisk — это бесплатный инструмент с открытым исходным кодом для создания/разработки коммуникационных приложений. Он был разработан Марком Спенсером из Digium в 1999 году . С 2018 года Asterisk является подразделением Sangoma Technologies Corporation. Первоначально он был создан для систем Linux, но в настоящее время работает на различных устройствах, таких как NetBSD, OpenBSD, FreeBSD, macOS и Solaris, а также может быть встроен в системы на основе OpenWrt.
Программное обеспечение Asterisk включает в себя множество функций и преимуществ, доступных для корпоративных и частных систем АТС. Он обеспечивает голосовую почту, конференц-связь, интерактивный голосовой ответ (меню телефона) и автоматическое распределение вызовов.
Поскольку Asterisk имеет открытый исходный код, пользователи могут получить доступ к коду и создать новые функции, написав сценарии плана нумерации на нескольких собственных языках расширений Asterisk, добавив пользовательские модули на C и PHP или внедрив программы Asterisk Gateway Interface (AGI) с использованием любого программирования. язык с возможностью общения с использованием потоков stdin и stdout.
В этом руководстве мы запустим Asterisk в контейнере Docker. Это связано с множеством функций и преимуществ, таких как:
- PrivateDial, настраиваемая конфигурация Asterisk
- AutoBan, встроенная система обнаружения и предотвращения вторжений
- Asterisk поддерживает системы IP-АТС и шлюзы VoIP
- Небольшой размер образа на основе Alpine Linux
- Кроме того, предоставьте аудиокодеки G.729 и G.723.1.
- Автоматическая интеграция сертификатов Let’s Encrypt LTS с использованием обратного прокси-сервера Traefik
- Контейнер аудио с использованием импульсного сокета хоста
- Журнал, направляемый демону докеров с настраиваемым уровнем
- Небольшой размер образа на основе Alpine Linux
- WebSMS, отправка и получение сообщений, SMS, через HTTP
- Постоянное хранилище благодаря консолидации данных конфигурации и запуска в /srv
Предварительные требования для установки
В этом руководстве есть ряд необходимых приложений. Установите их с помощью команд:
## On RHEL/CentOS/RockyLinux 8
sudo yum update
sudo yum install curl git vim make
## On Debian/Ubuntu
sudo apt update && sudo apt upgrade -y
sudo apt install curl git vim make
## On Fedora
sudo dnf update
sudo dnf -y install curl git vim make
Вам также необходимо установить Docker в вашей системе. Для этого вы можете воспользоваться помощью, предоставленной в руководстве ниже:
Команды используются для установки Docker Compose:
curl -s https://api.github.com/repos/docker/compose/releases/latest | grep browser_download_url | grep docker-compose-linux-x86_64 | cut -d '"' -f 4 | wget -qi -
chmod +x docker-compose-linux-x86_64
sudo mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose
Подтвердите установку:
$ docker-compose version
Docker Compose version v2.14.2
Добавьте своего пользователя в группу Docker:
sudo usermod -aG docker $USER
newgrp docker
Запустите и включите службу:
sudo systemctl start docker && sudo systemctl enable docker
Вам также необходимо установить Docker-compose:
№1. Настроить контейнер Asterisk
Прежде чем мы запустим контейнер, нам нужно загрузить необходимые файлы и внести необходимые изменения. Мы будем использовать git для клонирования репозитория, содержащего эти файлы:
git clone https://github.com/mlan/docker-asterisk.git
Перейдите в каталог:
cd docker-asterisk
Теперь у нас есть все необходимые файлы для этого развертывания. В этом руководстве мы будем использовать примеры конфигураций в демонстрационном каталоге.
mv demo deploy
cd deploy
Здесь у нас есть файл docker-compose.yml , который можно использовать для запуска примера SIP-сервера VoIP. В файле есть различные конфиги и переменные окружения. Вы можете открыть этот файл для редактирования:
vim docker-compose.yml
В файле вы можете иметь следующие переменные окружения:
Переменная | Значение по умолчанию | Описание |
---|---|---|
SYSLOG_LEVEL | 4 | Уровень ведения журнала, от 0 до 8. 0 — наименьший, а 8 — максимальный вывод журнала. |
WEBSMSD_PORT | 80 | Это порт веб-сервера PHP, используемый WebSMS. Неопределенный или нечисловой, отключит веб-сервер PHP. |
ACME_FILE | /acme/acme.json | Файл, содержащий сертификаты TLS, предоставлен Let’s encrypt с использованием Traefik . |
ИМЯ ХОСТА | $(имя хоста) | Он используется для идентификации соответствующих сертификатов TLS в ACME_FILE. |
TLS_CERTDAYS | 30 | Срок действия самоподписанного сертификата TLS в днях. |
TLS_KEYBITS | 2048 | Длина самоподписанного ключа TLS в битах. |
SYSLOG_OPTIONS | -SDt | S: меньший вывод, D: удаление дубликатов, t: удаление временных меток, созданных клиентом. |
№ 2. Создайте постоянное хранилище для Asterisk
Постоянное хранилище используется для хранения данных для контейнера. В этом руководстве мы создадим хранилище с именем asterisk-conf для сохранения данных в каталоге /srv .
Мы создадим каталог с помощью команды:
sudo mkdir -p /data/asterisk-conf
Назначьте правильные разрешения:
sudo chmod 775 -R /data/asterisk-conf
sudo chown -R $USER:docker /data/asterisk-conf
Для систем на основе Rhel настройте SELinux:
sudo setenforce 0
sudo sed -i 's/^SELINUX=.*/SELINUX=permissive/g' /etc/selinux/config
Теперь e создаст том докера, используя указанный выше путь:
docker volume create --driver local \
--opt type=none \
--opt device=/data/asterisk-conf \
--opt o=bind asterisk-conf
После создания вы можете проверить его с помощью команды:
$ docker volume list
DRIVER VOLUME NAME
local asterisk-conf
Теперь мы изменим YAML-файл docker-compose и добавим external: true
$ vim docker-compose.yml
volumes:
asterisk-conf: # Persistent storage
external: true
№3. Запустите контейнер Asterisk
Теперь вы настроены на запуск контейнера с помощью файла YAML для создания докеров. В каталоге demo у нас также есть Makefile , который так важен в этом развертывании.
Установите инструменты сборки:
sudo apt install build-essential
Это упрощает управление контейнером и выполнение других команд. Для запуска контейнера воспользуемся командой:
make up
Пример вывода:
docker-compose up -d
[+] Running 13/13
⠿ tele Pulled 13.2s
⠿ c158987b0551 Pull complete 1.5s
⠿ 390edeb6309b Pull complete 2.1s
⠿ f9c34e7c3c9b Pull complete 3.8s
⠿ 84dbb9a70c8b Pull complete 4.4s
⠿ d507ed88ccf8 Pull complete 4.7s
⠿ 947c68adf1a6 Pull complete 5.0s
⠿ ebad4628becc Pull complete 5.3s
⠿ d2548a783261 Pull complete 5.6s
⠿ b7d2cd86d6d3 Pull complete 7.9s
⠿ 74e1e4e2b334 Pull complete 8.9s
⠿ 608c86894759 Pull complete 9.3s
⠿ aeb618e023a5 Pull complete 11.3s
[+] Running 1/1
⠿ Container demo-tele-1 Started 8.8s
Чтобы проверить, запущен ли контейнер, используйте команду:
$ make ps
docker-compose ps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
demo-tele-1 mlan/asterisk "docker-entrypoint.s…" tele About a minute ago Up About a minute (healthy) 0.0.0.0:5060->5060/udp, :::5060->5060/udp, 0.0.0.0:5060-5061->5060-5061/tcp, 0.0.0.0:10000-10099->10000-10099/udp, :::5060-5061->5060-5061/tcp, :::10000-10099->10000-10099/udp, 0.0.0.0:8080->80/tcp, :::8080->80/tcp
Вы также можете использовать обычную команду:
docker ps
Теперь у вас есть все файлы конфигурации Asterisk, хранящиеся по вашему пути:
$ ls /data/asterisk-conf/etc/
asterisk nftables.d ssl
Теперь мы можем разрешить эти порты через брандмауэр:
##For UFW
sudo ufw allow proto tcp from any to any port 5060,5061
##For Firewalld
sudo firewall-cmd --add-port=5060/tcp --permanent
sudo firewall-cmd --add-port=5061/tcp --permanent
sudo firewall-cmd --reload
Теперь мы настроены на использование Asterisk по желанию. Чтобы подключиться к интерфейсу командной строки (CLI) asterisk, работающему в контейнере, мы выполним:
make cli
##OR
docker-compose exec tele asterisk -rvvvddd
Пример вывода:
docker-compose exec tele asterisk -rvvvddd
Seeding global EID '02:42:ac:11:00:02' from 'eth0' using 'siocgifhwaddr'
Parsing /etc/asterisk/asterisk.conf
Asterisk 18.15.0, Copyright (C) 1999 - 2022, Sangoma Technologies Corporation and others.
Created by Mark Spencer <markster@digium.com>
Asterisk comes with ABSOLUTELY NO WARRANTY; type 'core show warranty' for details.
This is free software, with components licensed under the GNU General Public
License version 2 and other licenses; you are welcome to redistribute it under
certain conditions. Type 'core show license' for details.
=========================================================================
Connected to Asterisk 18.15.0 currently running on ec74230892b0 (pid = 252)
Parsing /etc/asterisk/logger.conf
Core debug was OFF and is now 3.
ec74230892b0*CLI>
Теперь мы можем запускать обычные команды Asterisk. Например:
ec74230892b0*CLI> pjsip show auths
I/OAuth: <AuthId/UserName.............................................................>
==========================================================================================
Auth: itsp:mydoe-oauth/username
Auth: jane.doe-iauth/jane.doe
Auth: john.doe-iauth/john.doe
Objects found: 3
ec74230892b0*CLI>
Есть еще несколько команд, для их просмотра используйте команду:
ec74230892b0*CLI> help
! -- Execute a shell command
acl show -- Show a named ACL or list all named ACLs
aeap show client -- Show AEAP client configuration by id
aeap show clients -- Show all AEAP client configurations
agi dump html -- Dumps a list of AGI commands in HTML format
agi exec -- Add AGI command to a channel in Async AGI
agi set debug [on|off] -- Enable/Disable AGI debugging
agi show commands [topic] -- List AGI commands or specific help
aoc set debug -- enable cli debugging of AOC messages
bridge kick -- Kick a channel from a bridge
......
Для выхода введите:
c99cd82ef92f*CLI> exit
Asterisk cleanly ending (0).
Executing last minute cleanups
Asterisk ending (0).
№ 4. Управление контейнером Asterisk
Здесь мы можем управлять контейнером с помощью набора команд.
Чтобы запустить контейнер, используйте:
make start
##OR
docker-compose start
Чтобы остановить контейнер:
make stop
##OR
docker-compose stop
Чтобы увидеть конфигурацию:
make config
##OR
docker-compose config
Чтобы включить и отключить звук:
make sound_enable
make sound_disable
Для удаления контейнера используйте команду:
make down
##OR
docker-compose down
Заключение.
Теперь мы успешно развернули контейнер Asterisk с помощью Docker. Вы можете сделать желаемые конфигурации в соответствии с вашими потребностями. Надеюсь, это было информативно.
Еще статьи:
Свежие комментарии