Установка и настройка FreePBX
Осуществим некоторые модификации в Apache
sed -i 's/\(^upload_max_filesize = \).*/\120M/' /etc/php.ini && sed -i 's/^\(User\|Group\).*/\1 asterisk/' /etc/httpd/conf/httpd.conf && sed -i 's/AllowOverride None/AllowOverride All/' /etc/httpd/conf/httpd.conf && systemctl restart httpd.service
Скачивание и установка FreePBX
cd /usr/src && wget http://mirror.freepbx.org/modules/packages/freepbx/freepbx-14.0-latest.tgz && tar xfz freepbx-14.0-latest.tgz && rm -f freepbx-14.0-latest.tgz && cd freepbx && ./start_asterisk start
-
Запустим установочный скрипт
если пропустить ключ «-n» установка пройдет в интерактивном режиме, это может пригодиться, например, если задан пароль mysql.
./install -n
Если после выполнения последней команды консоль выдаст ошибку типа:
Reading /etc/asterisk/asterisk.conf...Error! Unable to read /etc/asterisk/asterisk.conf or it was missing a directories section
Добавить в конец конфига /etc/asterisk/asterisk.conf строки:
astetcdir => /etc/asterisk astmoddir => /usr/lib/asterisk/modules astvarlibdir => /var/lib/asterisk astdbdir => /var/lib/asterisk astkeydir => /var/lib/asterisk astdatadir => /var/lib/asterisk astagidir => /var/lib/asterisk/agi-bin astspooldir => /var/spool/asterisk astrundir => /var/run/asterisk astlogdir => /var/log/asterisk astsbindir => /usr/sbin
Выключение фаервола и запуск и автозагрузка http сервера
Выключаем фаервол и убираем из автозагрузки:
systemctl stop firewalld && systemctl disable firewalld
Запускаем сервер http и ставим в автозагрузку:
systemctl start httpd && systemctl enable httpd
Готово!
Проблемы с отображением кириллицы в CDR
сносим старый коннектор:
rpm -e mysql-connector-odbc --nodeps
Установим CMAKE
wget https://cmake.org/files/v3.12/cmake-3.12.3.tar.gz
tar zxvf cmake-3.* cd cmake-3.* ./bootstrap && make && make install
Компилируем новый коннектор:
cd /usr/src git clone https://github.com/MariaDB/mariadb-connector-odbc.git cd mariadb-connector-odbc git checkout 3.0.7 git submodule init git submodule update cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCONC_WITH_UNIT_TESTS=Off -DWITH_OPENSSL=true -DCMAKE_INSTALL_PREFIX=/usr/local make make install
Правим /etc/odbcinst.ini , добавляем новый драйвер:
Description=ODBC for MariaDB Driver=/usr/local/lib64/libmaodbc.so Setup=/usr/lib64/libodbcmyS.so UsageCount=1
Убедитесь что libmaodbc там где указано:
# find / -name "libmaodbc.so" /usr/local/lib64/libmaodbc.so /usr/src/mariadb-connector-odbc/libmaodbc.so
И измените имя драйвера в odbc.ini на , ну или на то что вы укажете в odbcinst.ini
Description=MySQL connection to 'asteriskcdrdb' database driver=MariaDB server=localhost database=asteriskcdrdb Port=3306 Socket=/var/lib/mysql/mysql.sock option=3 Charset=utf-8
Такие дела…
Подготовка системы
Я рекомендую ознакомиться с моим материалом на тему первоначальной настройки centos 7. Многие вопросы там рассмотрены подробнее, здесь же я не буду на них задерживаться, просто выполню необходимые команды.
Прежде чем мы начнем устанавливать asterisk, нам надо выполнить целый ряд подготовительных действий. Первым делом отключаем selinux. Для этого открываем файл:
# mcedit /etc/sysconfig/selinux
и устанавливаем значение SELINUX=disabled. После этого применяем настройку без перезагрузки сервера:
# setenforce 0
Рекомендация по отключению selinux дается в официальной инструкции по установке freepbx, так как это может привести к нарушению процесса инсталляции.
Дальше обновляем систему:
# yum update # yum groupinstall core base "Development Tools"
Устанавливаем необходимые пакеты для работы сервера voip:
# yum install lynx mariadb-server mariadb php php-mysql php-mbstring tftp-server httpd ncurses-devel sendmail sendmail-cf sox newt-devel libxml2-devel libtiff-devel audiofile-devel gtk2-devel subversion kernel-devel git php-process crontabs cronie cronie-anacron wget vim php-xml uuid-devel sqlite-devel net-tools gnutls-devel php-pear
Устанавливаем компонент pear:
# pear install Console_Getopt
Теперь надо настроить iptabes. Подробно вопрос настройки firewall я рассмотрел отдельно. Там можно узнать все нюансы. Здесь же я прото скажу, что для начала нам нужно открыть 80-й порт, чтобы мы смогли работать с веб интерфейсом:
iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
Для полноценной работы астериск, нужно открыть следующие порты:
iptables -A INPUT -p udp -m udp --dport 5060 -j ACCEPT iptables -A INPUT -p udp -m udp --dport 5061 -j ACCEPT iptables -A INPUT -p tcp -m tcp --dport 5060 -j ACCEPT iptables -A INPUT -p tcp -m tcp --dport 5061 -j ACCEPT iptables -A INPUT -p udp -m udp --dport 4569 -j ACCEPT iptables -A INPUT -p tcp -m tcp --dport 5038 -j ACCEPT iptables -A INPUT -p udp -m udp --dport 5038 -j ACCEPT iptables -A INPUT -p udp -m udp --dport 10000:20000 -j ACCEPT
Для работы freepbx необходима mariadb. Это популярный форк mysql, который по-умолчанию предлагается в качестве mysql сервера в CentOS 7. Оба эти сервера имеют полную совместимость и могут в любой момент заменять друг друга. Запустим базу и добавим в автозагрузку:
# systemctl enable mariadb.service # systemctl start mariadb
При первоначальной конфигурации mariadb рекомендуется запустить скрипт mysql_secure_installation. Сделаем это:
# /usr/bin/mysql_secure_installation
Подробнее о работе этого скрипта и вообще настройке mariadb можно прочитать в материале на тему web-сервера на centos 7.
Важное замечание. На этапе настройки mariadb не указывайте пароль root
Он должен быть пустым. Если его задать, то стандартная установка freepbx закончится ошибкой и сообщением: Error! Invalid Database Permissions. The error was: SQLSTATE Access denied for user ‘root’@’localhost’ (using password: NO)
Мы же двигаемся дальше. Для работы freepbx необходим веб сервер. В этом качестве у нас будет выступать httpd. Запускаем его:
# systemctl start httpd
И добавляем в автозагрузку:
# systemctl enable httpd
Теперь добавим пользователя, под которым будет работать астериск:
# adduser asterisk -M -c "User for voip"
Подготовка
Обновите систему:
sudo dnf -y update
Установите зависимости:
sudo dnf -y groupinstall "Development Tools" sudo dnf install -y @php tftp-server ncurses-devel sendmail sendmail-cf newt-devel libxml2-devel libtiff-devel gtk2-devel subversion kernel-devel git crontabs cronie cronie-anacron wget vim php-xml sqlite-devel net-tools gnutls-devel unixODBC
Установка и настройка сервера базы данных MariaDB
Установите MariaDB:
sudo dnf module install mariadb
Проверьте версию MariaDB:
rpm -qi mariadb-server
sudo systemctl enable --now mariadb
Настройте параметры безопасности командой:
mysql_secure_installation
Убедитесь, что вы:
- Установили пароль пользователя базы данных root
- Удалили анонимных пользователей
- Запретили удаленный доступ пользователю root
- Удалили тестовую базу данных и доступ к ней
Затем проверьте доступ для пользователя root:
mysql -u root -p
Установка Node.js 10 LTS
Проверьте доступные версии Node.js:
sudo dnf module list | grep nodejs
Установите версию по умолчанию (если необходимо можно вручную указать другую версию):
sudo dnf module install nodejs:10
Проверьте установленную версию:
node --version
Установка и настройка Apache Web Server
Установите httpd:
sudo dnf -y install @httpd
Удалите страницу по умолчанию index.html:
sudo rm -f /var/www/html/index.html
sudo systemctl enable --now httpd
Если у вас есть активная служба межсетевого экрана firewalld, откройте порты http и https:
sudo firewall-cmd --add-service={http,https} --permanent sudo firewall-cmd --reload
Установка и настройка PHP
Установите PHP и необходимые расширения:
sudo dnf -y install wget @php php-pear php-cgi php-common php-curl php-mbstring php-gd php-mysqlnd php-gettext php-bcmath php-zip php-xml php-json php-process php-snmp
Скорректируйте настройки httpd
sed -i 's/^\(User\|Group\).*/\1 asterisk/' /etc/httpd/conf/httpd.conf sed -i 's/AllowOverride None/AllowOverride All/' /etc/httpd/conf/httpd.conf sed -i 's/\(^upload_max_filesize = \).*/\120M/' /etc/php.ini
В /etc/php-fpm.d/www.conf пропишите:
listen.acl_users = asterisk
Запустите php-fpm и httpd:
sudo systemctl enable --now php-fpm httpd sudo systemctl restart php-fpm httpd
Проверьте статус обоих служб:
sudo systemctl status php-fpm httpd
Устанавливаем Jansson и pjsip
YAML
# cd ~
# git clone https://github.com/akheron/jansson.git
# cd jansson
# autoreconf -i
# ./configure —prefix=/usr/
# make && make install
1 |
# cd ~ # git clone https://github.com/akheron/jansson.git # cd jansson # autoreconf -i # ./configure —prefix=/usr/ # make && make install |
YAML
# cd ~
# git clone https://github.com/pjsip/pjproject.git
# cd pjproject
# ./configure CFLAGS=»-DNDEBUG -DPJ_HAS_IPV6=1″ —prefix=/usr —libdir=/usr/lib64 —enable-shared —disable-video —disable-sound —disable-opencore-amr
# make dep && make && make install
# ldconfig
1 |
# cd ~ # git clone https://github.com/pjsip/pjproject.git # cd pjproject # ./configure CFLAGS=»-DNDEBUG -DPJ_HAS_IPV6=1″ —prefix=/usr —libdir=/usr/lib64 —enable-shared —disable-video —disable-sound —disable-opencore-amr # make dep && make && make install # ldconfig |
Установка DAHDI, libPRI и Asterisk
-
# cd dahdi-linux-complete-2.11.1+2.11.1 # make all # make install # make config # cp tools/dahdi.init /etc/init.d/dahdi
-
# cd ../libpri-1.6.0 # make # make install
-
# cd ../asterisk-16.5.1 # ./configure --prefix=/usr --exec-prefix=/usr --with-crypto --with-dahdi --with-iconv -with-libcurl --with-gmime --with-iksemel --with-mysqlclient --disable-xmldoc --with-pri --with-spandsp --with-ldap --with-libcurl --with-popt --with-resample --with-speex --with-unixodbc --with-jansson-bundled
# make menuselect # ./contrib/scripts/get_mp3_source.sh # make # make install # make samples
-
# ln -s /usr/lib/libpri.so.1.4 /usr/lib64/libpri.so.1.4 # cat contrib/init.d/rc.redhat.asterisk | sed 's/__ASTERISK_SBIN_DIR__/\/usr\/sbin/' > /etc/init.d/asterisk # chmod 755 /etc/rc.d/init.d/asterisk # systemctl enable asterisk.service
-
# groupadd asterisk # useradd -c "asterisk PBX" -d /var/lib/asterisk -s /sbin/nologin -g asterisk asterisk
-
# systemctl enable dahdi # cat /etc/dahdi/system.conf.sample > /etc/dahdi/system.conf # systemctl start dahdi # chown -R asterisk:asterisk /var/{lib,log,spool,run}/asterisk /etc/asterisk # systemctl start asterisk
- Включаем fail2ban:
# vi /etc/fail2ban/jail.local # cat /etc/fail2ban/jail.local enabled = true enabled = true filter = asterisk logpath = /var/log/asterisk/messages tail bantime = 86400 # cd /etc/fail2ban/filter.d/ # mv asterisk.conf asterisk.conf.orig # wget http://www.adminhelp.pro/wp-content/uploads/fail2ban/asterisk.conf # systemctl enable fail2ban.service # systemctl restart fail2ban.service
Установка Asterisk
Загрузите Asterisk:
cd /usr/src/ wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-16-current.tar.gz tar xvfz asterisk-16-current.tar.gz rm -f asterisk-16-current.tar.gz cd asterisk-16*/
Конфигурация:
./configure --libdir=/usr/lib64
При успешной конфигурации Вы должны получить следующий вывод:
При успешной конфигурации Вы должны получить следующий вывод:
configure: Menuselect build configuration successfully completed .$$$$$$$$$$$$$$$=.. .$7$7.. .7$$7:. .$$:. ,$7.7 .$7. 7$$$$ .$$77 ..$$. $$$$$ .$$$7 ..7$ .?. $$$$$ .?. 7$$$. $.$. .$$$7. $$$$7 .7$$$. .$$$. .777. .$$$$$$77$$$77$$$$$7. $$$, $$$~ .7$$$$$$$$$$$$$7. .$$$. .$$7 .7$$$$$$$7: ?$$$. $$$ ?7$$$$$$$$$$I .$$$7 $$$ .7$$$$$$$$$$$$$$$$ :$$$. $$$ $$$$$$7$$$$$$$$$$$$ .$$$. $$$ $$$ 7$$$7 .$$$ .$$$. $$$$ $$$$7 .$$$. 7$$$7 7$$$$ 7$$$ $$$$$ $$$ $$$$7. $$ (TM) $$$$$$$. .7$$$$$$ $$ $$$$$$$$$$$$7$$$$$$$$$.$$$$$$ $$$$$$$$$$$$$$$$. configure: Package configured for: configure: OS type : linux-gnu configure: Host CPU : x86_64 configure: build-cpu:vendor:os: x86_64 : pc : linux-gnu : configure: host-cpu:vendor:os: x86_64 : pc : linux-gnu :
Если каких-то зависимостей нехватает то можно запустить скрипт install_prereq для их установки:
contrib/scripts/install_prereq
Запустите меню настройки:
make menuselect
В разделе «Add-ons» выберите «chan_ooh323» и «format_mp3»
В разделе «Core Sound Packages» выберите необходимые аудиопакеты (опционально)
В разделе «Music On Hold» выберите нужные форматы музыки на удержании (опционально)
В разделе «Extra Sound Packages» выберите дополнительные аудиопакеты (опционально)
В разделе «Applications» выберите «app_macro» (в — Deprecated —)
Затем нажмите save and exit
Сборка и установка:
Загрузите библиотеку mp3-декодера:
sudo contrib/scripts/get_mp3_source.sh
Соберите и установите Asterisk:
make make install make samples make config make install-logrotate ;Если требуется установка logrotate для ротации лог-файлов ldconfig
Настройка и запуск
Создайте отдельного пользователя и группу для запуска asterisk, а так же настройке права:
sudo groupadd asterisk sudo useradd -r -d /var/lib/asterisk -g asterisk asterisk sudo usermod -aG audio,dialout asterisk sudo chown -R asterisk.asterisk /etc/asterisk /var/{lib,log,spool}/asterisk /usr/lib64/asterisk
Настройте запуск asterisk из под соответствующего пользователя:
Откройте файл /etc/sysconfig/asterisk и раскоментируйте следующие строки:
AST_USER="asterisk" AST_GROUP="asterisk"
Откройте файл /etc/asterisk/asterisk.conf и раскоментируйте следующие строки:
runuser = asterisk ; The user to run as. rungroup = asterisk ; The group to run as.
Перезапустите службу asterisk:
sudo systemctl restart asterisk
sudo systemctl enable asterisk
Проверьте статус asterisk:
systemctl status asterisk
Проверьте соединение с astierisk:
asterisk -vvvr
На этом установка asterisk закончена.
Настройка папки со звонками
Записи разговоров будут складываться в папку из примера выше.
Есть два варианта хранения файлов записей:
- Все записи разговоров хранятся в одной папке.
- Записи разговоров должны распределяться по папкам в соответствии с датой.
Также есть возможность настройки «отложенной конвертации записей разговоров».
Когда днем выполняется запись в формат WAV, а ночью необходимо по CRON запустить скрипт для преобразования файлов из WAV в MP3.
«Отложенную конвертацию записей разговоров» и распределение по папкам в соответствии с датой можно использовать вместе, а можно что-то одно.
За распределение файлов записей по папкам, преобразование файлов из WAV в MP3 отвечает скрипт из папки docs.
Для 2 варианта
Каждый день в 00.01 часов записи из папки по CRON должны распределяться по дате в соответствующие папки.
Для распределения файлов по папкам в соответствии с датой нужно использовать скрипт из папки docs.
Формат хранения записей (пример):
- /home/calls/2014/2014-09/2014-09-29
- /home/calls/2014/09/29
Настройки скрипта для соответствующего формата:
Настройки скрипта для преобразования файлов из WAV в MP3:
За включение преобразования файлов из WAV в MP3 в скрипте отвечает переменная . Необходимо установить ее значение в true или false.
Можно настроить МИНИМАЛЬНЫЙ РАЗМЕР ФАЙЛА для преобразования файлов из WAV в MP3, задается в переменной , размер указывается в КилоБайтах.
Если размер файла меньше , то этот файл будет удален, и не будет преобразован из WAV в MP3.
Также можно настроить уровень вложенности поиска WAV файлов для их преобразования в переменной «DEPTH».
Примеры значений для переменной
Для вариантов, когда Asterisk сам распределяет записи по папкам в соответствии с датой.
Если у вас Asterisk сам распределяет записи звонков по папкам в соответствии с датой, тогда необходимости запуска скрипта по CRON нет.
Если только у вас не настроена «отложенная конвертация записей разговоров»
Возможные форматы хранения записей:
- /home/calls/2014/2014-09/2014-09-29
- /home/calls/2014/09/29
Полный/Частичный путь к файлам звонков хранится в базе данных
Если у вас полный или частичный путь к файлам звонков хранится в базе данных, допустим в столбце «column_name».
Например: , , .
В этом случае можно использовать как полный путь к файлу, так и относительный. Также в пути можно использовать имя файла как с расширением, так и без расширения файла.
Если у вас используется полный путь к файлу (от корня диска), то в конфиг-файле необходимо задать: .
Если у вас используется частичный путь к файлу, допустим , то в конфиг-файле необходимо задать первую часть пути, например: .
БЕЗ слеша на конце. Таким образом получим полный путь: .
Если у вас используется относительный путь к файлу, допустим , то в конфиг-файле необходимо задать первую часть пути, например: .
БЕЗ слеша на конце. Таким образом получим полный путь: .
Аналогично для файлов без расширения.
Примеры путей к файлам при их хранении в базе данных (содержимое колонки «filename»):
- /home/calls/2015/2015-01/2015-01-01/in/filename.mp3
- ./calls/2015/2015-01/2015-01-01/in/filename.mp3
- 2015/2015-01/2015-01-01/in/filename.mp3
- /home/calls/2015/2015-01/2015-01-01/in/filename
- ./calls/2015/2015-01/2015-01-01/in/filename
- 2015/2015-01/2015-01-01/in/filename
Настройка Web сервера
Для работы панели FreePBX нужен web сервер с php. Я буду использовать версию php 7.2 из базового рпозитория.
Устанавливаем веб сервер apache:
YAML
# dnf install @httpd
1 | # dnf install @httpd |
Удаляем стартовую страницу.
YAML
# rm -f /var/www/html/index.html
1 | # rm -f /var/www/html/index.html |
Запускаем httpd и добавляем в автозагрузку.
YAML
# systemctl enable —now httpd
1 | # systemctl enable —now httpd |
Открываем порты на firewalld, если вы ранее не настраивали iptables.
YAML
# firewall-cmd —add-service={http,https} —permanent
# firewall-cmd —reload
1 |
# firewall-cmd —add-service={http,https} —permanent # firewall-cmd —reload |
Если вы хотите использовать php 5.6, то сразу переходите в самый конец статьи, в соответствующий раздел. Ниже будем ставить дефолтную версию php 7.2 из базового репозитория Centos 8. Устанавливаем необходимые php расширения.
YAML
# dnf install wget @php php-pear php-cgi php-common php-curl php-mbstring php-gd php-mysqlnd php-gettext php-bcmath php-zip php-xml php-json php-process php-snmp
1 | # dnf install wget @php php-pear php-cgi php-common php-curl php-mbstring php-gd php-mysqlnd php-gettext php-bcmath php-zip php-xml php-json php-process php-snmp |
Изменяем максимально допустимый размер файла для загрузки и лимит по памяти для скриптов.
YAML
# sed -i ‘s/\(^upload_max_filesize = \).*/\100M/’ /etc/php.ini
# sed -i ‘s/\(^memory_limit = \).*/\512M/’ /etc/php.ini
1 |
# sed -i ‘s/\(^upload_max_filesize = \).*/\100M/’ /etc/php.ini # sed -i ‘s/\(^memory_limit = \).*/\512M/’ /etc/php.ini |
Теперь нам нужно изменить некоторые параметры httpd — запустить его от пользователя asterisk и включить опцию AllowOverride. Это можно сделать руками в файле /etc/httpd/conf/httpd.conf, либо автоматически с помощью sed.
YAML
# sed -i ‘s/^\(User\|Group\).*/\1 asterisk/’ /etc/httpd/conf/httpd.conf
# sed -i ‘s/AllowOverride None/AllowOverride All/’ /etc/httpd/conf/httpd.conf
1 |
# sed -i ‘s/^\(User\|Group\).*/\1 asterisk/’ /etc/httpd/conf/httpd.conf # sed -i ‘s/AllowOverride None/AllowOverride All/’ /etc/httpd/conf/httpd.conf |
Мы просто выставили следующие параметры:
- User asterisk
- Group asterisk
- AllowOverride All
И так же в php-fpm меняем пользователя на asterisk в конфигурации пула /etc/php-fpm.d/www.conf
YAML
# sed -i ‘s/^\(user\|group\).*/\1 = asterisk/’ /etc/php-fpm.d/www.conf
# sed -i ‘s/^\(listen.acl_users\).*/\1 = asterisk/’ /etc/php-fpm.d/www.conf
1 |
# sed -i ‘s/^\(user\|group\).*/\1 = asterisk/’ /etc/php-fpm.d/www.conf # sed -i ‘s/^\(listen.acl_users\).*/\1 = asterisk/’ /etc/php-fpm.d/www.conf |
Запускаем httpd и php-fpm.
YAML
# systemctl enable —now php-fpm httpd
# systemctl restart php-fpm httpd
1 |
# systemctl enable —now php-fpm httpd # systemctl restart php-fpm httpd |
Поверяем статус запущенных служб.
YAML
# systemctl status php-fpm httpd
1 | # systemctl status php-fpm httpd |
Все в порядке, движемся дальше.
Установка Asterisk
Мы будем устанавливать 16-ю версию Asterisk. На странице загрузки мы можем посмотреть все версии АТС и ссылки на них.
Сначала установим пакеты, необходимые для сборки:
dnf —enablerepo=powertools install libedit-devel
После скачиваем Asterisk:
wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-16-current.tar.gz
Распаковываем архив и переходим в него:
tar -xvf asterisk-*.tar.gz
cd asterisk-*/
Устанавливаем зависимости для астериска:
./contrib/scripts/install_prereq install
Мы должны увидеть:
Complete!
#############################################
## install completed successfully
#############################################
Чистим временные файлы, которые появились после установки зависимостей:
make distclean
Добавляем библиотеку для работы с mp3:
./contrib/scripts/get_mp3_source.sh
Конфигурируем исходник:
./configure
* в данном примере мы конфигурируем исходник без дополнительных опций. Полный перечень опций и что они означают можно посмотреть командой ./configure -h.
Мы должны увидеть:
…
configure: Menuselect build configuration successfully completed
.$$$$$$$$$$$$$$$=..
.$7$7.. .7$$7:.
.$$:. ,$7.7
.$7. 7$$$$ .$$77
..$$. $$$$$ .$$$7
..7$ .?. $$$$$ .?. 7$$$.
$.$. .$$$7. $$$$7 .7$$$. .$$$.
.777. .$$$$$$77$$$77$$$$$7. $$$,
$$$~ .7$$$$$$$$$$$$$7. .$$$.
.$$7 .7$$$$$$$7: ?$$$.
$$$ ?7$$$$$$$$$$I .$$$7
$$$ .7$$$$$$$$$$$$$$$$ :$$$.
$$$ $$$$$$7$$$$$$$$$$$$ .$$$.
$$$ $$$ 7$$$7 .$$$ .$$$.
$$$$ $$$$7 .$$$.
7$$$7 7$$$$ 7$$$
$$$$$ $$$
$$$$7. $$ (TM)
$$$$$$$. .7$$$$$$ $$
$$$$$$$$$$$$7$$$$$$$$$.$$$$$$
$$$$$$$$$$$$$$$$.
configure: Package configured for:
configure: OS type : linux-gnu
configure: Host CPU : x86_64
configure: build-cpu:vendor:os: x86_64 : pc : linux-gnu :
configure: host-cpu:vendor:os: x86_64 : pc : linux-gnu :
Продолжаем настройку — запускаем меню для выбора параметров:
make menuselect
Можно оставить значения по умолчанию и сохранить настройки.
Теперь можно запустить сборку астериска:
make
Мы должны увидеть сообщение об успешной сборке:
+——— Asterisk Build Complete ———+
+ Asterisk has successfully been built, and +
+ can be installed by running: +
+ +
+ make install +
+——————————————-+
После выполняем установку:
make install
Мы увидим:
+—- Asterisk Installation Complete ——-+
+ +
+ YOU MUST READ THE SECURITY DOCUMENT +
+ +
…
Устанавливаем скрипты для автозапуска АТС и готовые конфигурационные файлы:
make config
make samples
Ранее мы создали пользователя asterisk, от которого должен запуститься наш сервер телефонии. Для этого откроем файл:
vi /etc/asterisk/asterisk.conf
Снимаем комментарий с опций:
runuser = asterisk
rungroup = asterisk
… и снимем комментарий с последующим редактированием:
defaultlanguage = ru
documentation_language = ru_RU
Задаем владельца для следующих каталогов:
chown -R asterisk:asterisk /var/run/asterisk
chown -R asterisk:asterisk /etc/asterisk
chown -R asterisk:asterisk /var/{lib,log,spool}/asterisk
chown -R asterisk:asterisk /var/log/asterisk
и проверяем настройки:
asterisk -c
Мы должны увидеть Asterisk Ready:
… значит наш сервер готов к запуску. Все ошибки и предупреждения нам не помешают, однако их можно устранить разными способами, как правило, отключив неиспользуемые модули.
После успешной проверки, можно запустить Asterisk в качестве демона:
systemctl enable asterisk
systemctl start asterisk
Платформа IT инфраструктуры
Обстановка в подавляющем большинстве компаний нашей с вами родины сложилась следующим образом: Везде Windows. На компьютерах Windows. На серверах Windows. Ноутбуки продаются с предустановленной Windows. Современные недорогие планшеты и те — на Windows. Все полезные и необходимые программы для бизнеса написаны для работы в Windows.
Хорошо это или плохо? Речь сейчас не об этом.
Нужно работать. Выполнять поставленные задачи. Бизнес должен развиваться и зарабатывать деньги. А в крестовый поход против Microsoft мы сегодня не пойдем.
Сегодня я расскажу Вам что нужно сделать чтобы развернуть телефонию в компании без погружения в мир Linux и черных экранов с множеством непонятных команд.
Настройка Asterisk
Для того, чтобы Asterisk смог взаимодействовать с новыми столбцами в таблице, необходимо в файле создать их алиасы.
Добавим в конец этого файла ( секция ) строчки:
Вместо «название_столбца» вставьте название столбца, в котором хранится название записи звонка, например «filename».
Алиас «remoteip» нужен для записи IP адреса клиента Asterisk. Это НЕОБЯЗАТЕЛЬНО.
Создание алиаса и наличие в базе колонки «calldate» обязательно для правильной работы CDR Viewer.
Все изменения производим в , либо в . В зависимости от того, в какой файле у нас написан диалплан.
Если название столбца, в котором хранится название записи звонка у вас отличается от «filename», то необходимо внести соответствующие изменения в диалплан.
Необходимо изменить строку на
В «globals» добавим пару переменных:
Добавим макрос.
Сразу уточним, что в этом макросе, если RECORDING=1 запись прямо во время разговора конвертируется в MP3. т.е. существует некоторая нагрузка на сервер.
Если же RECORDING=2, то нагрузка на сервер минимальная, т.к. запись выполняется в родной формат Asterisk — WAV. Конвертирование в MP3 должно быть выполнено
с помощью скрипта , который можно найти в папке docs. В скрипте написаны подробные комментарии по его настройке
Пример вызова макроса:
Пример вызова макроса:
Дополнительно (необязательно). Если НЕ использовали файл импорта в базу «cdr_mysql.sql»
В Asterisk если используется макрос, то звонок совершается с экстеншеном s.
Чтобы Номер назначения был действительным, а не s или s, то сделаем следующее:
- Теперь нужно добавить триггер на таблицу.
Для этого зайдем в Триггеры — Добавить триггер. Назначаем имя триггеру, остальное оставляем без изменений. В поле «Определение» вставляем текст ниже:
Для того, чтобы в поле записывался правильный Номер назначения, нужно отредактировать диалплан. Макрос выше в редактировании не нуждается.
В используемом у вас макросе необходимо добавить строчку, это только пример. Задайте правильные имена параметров (${number}, ${ARG1}).
Настройка CDR Viewer
Пример конфиг файла находится в .
Перед началом использования этот файл нужно переименовать в .
Все настройки находятся в файле с подробными комментариями, тут не должно возникнуть сложностей.
Можно использовать «пользовательский» конфиг. Это значит, что будет использоваться альтернативный конфиг файл с настройками.
Для этого нужно создать еще один файл с конфигом, например: .
Формат имени файла конфига:
Для имени можно использовать латинские буквы, цифры, тире и нижнее подчеркивание.
Кратко:
- Скачать ZIP архив с GitHub или выполнить
- Распаковать или Перенести файлы в нужную папку на сервере
- Переименовать файл в . Т.е. будет файл
- Настроить параметры в
- Почти готово. Если необходим доступ только для определенных пользователей, то необходимо создать файл .
Установка Asterisk
Когда подготовка сервера завершена, начнем установку самого Asterisk. Скачайте самый свежий пакет с сайта разработчика в разделе Download, или воспользуйтесь командой wget.
root@centos-7 ~# wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-13.5.0.tar.gz |
Распакуйте архив, перейдите в созданную папку и сконфигурируйте пакет перед сборкой:
root@centos-7 ~# tar -zxvf asterisk-13.5.0.tar.gz root@centos-7 ~# cd asterisk-13.5.0 root@centos-7 asterisk-13.5.0# ./configure --libdir=/usr/lib64 |
Если все прошло успешно, вы увидите такой логотип в стиле ASCII Art:
Sox — микширование аудиофайлов
Для записи по отдельности звонящего и отвечающего абонентов в правый и левый канал стереофайла можно записать два отдельных файла
и смикшировать их командой sox.
Для микширования файлов сначала надо установить sox:
Параметры для команды MixMonitor для дополнительной записи файлов с каналами только звонящего и только отвечающего абонентов:
r(имя_файла_с записью_звонящего) t(имя_файла_с записью_отвечающего)
Чтобы не записывать файл с обоими каналами, в команде MixMonitor нужно не указывать filename, т.е. сразу после скобки ставить запятую.
Чтобы после записи файлов смиксовать их в один файл, после второй запятой в параметрах команды MixMonitor указать команду,
которую нужно выполнить после завершения работы команды MixMonitor:
Пример:
MixMonitor(,r(${fname}_r.wav)t(${fname}_t.wav),sox -M ${fname}_r.wav ${fname}_t.wav ${fname}.wav)
Пример фрагмента диалплана, выполняющий запись файла mp3 с разнесением звонящего и отвечающего в разные каналы,
файлы раскладываются по папкам год-месяц-день:
same => n,Set(__RecDir=/var/spool/asterisk/monitor) same => n,Set(fname=${RecDir}/${STRFTIME(${EPOCH},,%Y)}/${STRFTIME(${EPOCH},,%m)}/${STRFTIME(${EPOCH},,%d)}/${STRFTIME(${EPOCH},,%Y%m%d_%H%M%S)}_${CALLERID(num)}) same => n,MixMonitor(,bW(2)r(${fname}_r.wav)t(${fname}_t.wav),sox -M ${fname}_r.wav ${fname}_t.wav ${fname}.wav && lame -b 32 -m d ${fname}.wav ${fname}.mp3 && rm ${fname}*.wav)
В примере в параметрах lame указывается:
— режим кодирования каналов: dual channels. В этом режиме стереоканалы кодируются совершенно независимо,
каждому каналу выделяется ровно половина битрейта. Поэтому:
— целевой битрейт, указываем в два раза больше чем обычный 16 для телефонии
Следующая команда после lame (после &&) удаляет все больше не нужные wav-файлы.
Исправление ошибок
Рассмотрим процесс устранения предупреждений и ошибок во время запуска Asterisk.
Из-за неиспользуемых модулей
Для устранения данных проблем необходимо просто отключить данные модули.
Открываем файл:
vi /etc/asterisk/modules.conf
И в зависимости от ошибок, добавляем нижеперечисленные исправления…
Отключаем res_phoneprov:
noload => res_phoneprov.so
Отключаем res_config_ldap:
noload => res_config_ldap.so
Отключаем res_config_pgsql:
noload => res_config_pgsql.so
Отключаем cel_pgsql:
noload => cel_pgsql.so
Отключаем cel_tds:
noload => cel_tds.so
Другие ошибки
ari/config … No configured users for ARI
ARI предоставляет API для Asterisk REST Interface. В данном примере, отключаем поддержку:
vi /etc/asterisk/ari.conf
Находим параметр enabled и меняем его значение на no:
enabled = no
CDR и подключение к базе данных
В моем случае, не работало ведение CDR, а при вводе в консоли asterisk команды:
> odbc show
… я увидел:
ODBC DSN Settings
——————
Name: asteriskcdrdb
DSN: MySQL-asteriskcdrdb
Last fail connection attempt: 2021-05-08 10:25:52
Number of active connections: 0 (out of 5)
Logging: Disabled
То есть, нет подключения к базе данных asteriskcdrdb. А при попытке подключиться к нужному DSN из командной строки:
isql -v MySQL-asteriskcdrdb
… я получил ошибку:
Can’t open lib ‘/usr/lib64/libmyodbc5.so’ : file not found
То есть, проблема в отсутствии необходимой бибилиотеки при подключении к базе данных.
Нам необходимо выполнить 2 действия:
- Установить коннектор ODBC.
- Изменить драйвер для подключения к СУБД в odbc.ini.
Так как в данной инструкции мы используем в качестве севера баз данных MariaDB, нам необходим соответствующий коннектор. Для его установки воспользуемся инструкцией .
После открываем файл:
vi /etc/odbc.ini
Задаем новое значение для параметра driver:
driver=MariaDB
* список доступных драйвером можно посмотреть в файле /etc/odbcinst.ini.
Перезапускаем asterisk:
systemctl restart asterisk
После можно проверить, что Asterisk подключился к базе:
> odbc show
Мы должны увидеть:
ODBC DSN Settings
——————
Name: asteriskcdrdb
DSN: MySQL-asteriskcdrdb
Number of active connections: 1 (out of 5)
Logging: Disabled
Заключение
Долго я возился с этой статьей. В итоге перепробовал кучу всяких вариантов и настроек, но у меня так и не получилось добиться того, чтобы Freepbx без ошибок работала на Centos 8. Я для себя сделал вывод, что панель просто не готова к работе на этой системе. Статью я решил все же оформить и опубликовать, потому что было жаль потраченного времени, плюс может это будет кому-то полезно, если необходимо настраивать только на Centos 8.
При настройке и отладке различных версий, рекомендую использовать виртуальную машину и снепшоты. Я сначала настроил систему, сделал снепшот, потом собрал астериск, сделал еще снепшот, а потом уже пробовал различные версии панели. Это позволило оперативно проверить много вариантов настроек и версий php. Загружался из снепшотов раз 20.
Все статьи в буржунете, что видел, поверхностны и рассказывают обычную установку на дефолтную систему с php 7.2 из базовых реп. Как это потом работает, никто не проверяет. Реально полезной и законченной информации по Centos 8 b Freepbx я не нашел.
Напоминаю, что данная статья является частью единого цикла статьей про сервер Centos.
Онлайн курс Infrastructure as a code
Если у вас есть желание научиться автоматизировать свою работу, избавить себя и команду от рутины, рекомендую пройти онлайн курс Infrastructure as a code. в OTUS. Обучение длится 4 месяца.
Что даст вам этот курс:
- Познакомитесь с Terraform.
- Изучите систему управления конфигурацией Ansible.
- Познакомитесь с другими системами управления конфигурацией — Chef, Puppet, SaltStack.
- Узнаете, чем отличается изменяемая инфраструктура от неизменяемой, а также научитесь выбирать и управлять ей.
- В заключительном модуле изучите инструменты CI/CD: это GitLab и Jenkins
Смотрите подробнее программу по .