Введение
Asterisk — бесплатное решение для организации voip телефонии. Он обладает всеми возможностями обычных АТС, но предоставляет более богатый функционал по управлению звонками. За относительную простоту настройки, по сравнению с цифровыми АТС, бесплатность и широкие возможности он и снискал такую популярность.
Freepbx — бесплатный веб интерфейс для управления астериском. Он существенно упрощает работу с конфигурациями, позволяет выполнять некоторые функции людям, вообще далеким от астериска. Например, с его помощью практически любого можно научить управлять учетными записями пользователей.
Лично я больше люблю настраивать asterisk вручную, нежели с помощью готовой панели. Да, конфигов астериск очень много, они объемные, работать с ними не удобно. Тем не менее, чистый астериск предоставляет практически неограниченную возможность по конфигурированию. С готовой панелью вы будете ограничены ее возможностями. Но если они вас полностью удовлетворяют, то лучше использовать ее.
Дальнейшая установка FreePBX будет проходить по следующей схеме:
- Подготовка системы.
- Установка MariaDB.
- Настройка Web сервера.
- Установка NodeJS.
- Установка Asterisk.
- Установка и настройка Freepbx.
Для отладки и тестирования работы voip я рекомендую сервис Zadarma. Плюс его в том, что после регистрации вы получите настройки пира для внутренней сети оператора. И внутри этой сети вы можете бесплатно звонить. Например, я одного пира регистрирую на sip клиенте смартфона и с него звоню на второй аккаунт, пир от которого настроен в астериске. Таким образом эмулирую внешний звонок. Удобно отлаживать различные конфигурации звонков, не требуя платного подключения.
Что такое Freepbx
FreePBX — это удобный GUI (графический интерфейс пользователя), который управляет Asterisk — самым популярным общедоступным программным обеспечением в области компьютерной телефонии. FreePBX является продуктом Open Source, он разработан тысячами добровольцев по всему миру.
На сегодня FreePBX загружен более чем 5 000 000 раз и обслуживает более чем 500 000 активных телефонных систем. Если Вы никогда не слышали про FreePBX, то, вероятно, будете удивлены ее возможностями для Вашего бизнеса.
FreePBX — это основанный на web интерфейс, который позволяет управлять самым популярным на сегодняшний день сервером ip телефонии asterisk. FreePBX выпускается под лицензией GNU и может свободно использоваться конечными пользователями без какого-либо ограничения. Данный продукт является компонентом FreePBX Distro и некоторых других дистрибутивов.
Первый релиз системы 0.2 (28 ноября 2004 года) был назван AMP (Asterisk Management Portal). Но имя пришлось изменить, так как Asterisk является зарегистрированной торговой маркой Digium corporation.
С тех пор вышло множество обновлений, поддерживающие новые версии Astersik, добавлены новые меню и поддержка голосовой почты, очереди звонков, факсов, различных языков, устройств DAHDI и папок пользователей.
Поддерживаемое оборудование включает в себя устройства компаний Aastra Technologies, Algo, AND, AudioCodes, Cisco Systems, Cyberdata, Digium, Grandstream, Mitel, Panasonic, Polycom, Sangoma, Snom, Xorcom, and Yealink.
Установка и настройка FreePBX
Скачайте и распакуйте FreePBX.
cd /usr/src && wget http://mirror.freepbx.org/freepbx-12.0.43.tgz && tar zxvf freepbx-*.tgz && cd /usr/src/freepbx
при установке из гит репозитория возникает ошибка:missing modgettext.class.php
при установке из гит репозитория возникает ошибка:missing modgettext.class.php
при установке из гит репозитория возникает ошибка:missing modgettext.class.php (incomplete application of changeset 12995?)
поэтому лучше скачивать архив.
export VER_FREEPBX=12.0 && cd /usr/src && git clone http://git.freepbx.org/scm/freepbx/framework.git freepbx && cd freepbx && git checkout release/${VER_FREEPBX}
Создайте пользователя Asterisk и задайте права пользователя.
useradd -m asterisk && chown asterisk. /var/run/asterisk && chown -R asterisk. /etc/asterisk && chown -R asterisk. /var/{lib,log,spool}/asterisk && chown -R asterisk. /usr/lib/asterisk
remove /var/www/html
remove /var/www/html
Далее в руководстве freepbx.org, предлагается удалить директорию веб сервера:
Удалять директорию /var/www/html может быть опасно для ваших данных.
rm -rf /var/www/html
Это делается, т.к. при установке FreePBX скриптом, если папка существует, появляется сообщение о ошибке, что может быть исправлено, просто, повторным запуском скрипта установки.
Настроим Apache
sed -i 's/\(^upload_max_filesize = \).*/\120M/' /etc/php5/apache2/php.ini && sed -ie 's/\;date\.timezone\ \=/date\.timezone\ \=\ "Europe\/Moscow"/g' /etc/php5/apache2/php.ini && cp /etc/apache2/apache2.conf /etc/apache2/apache2.conf_orig && sed -i 's/^\(User\|Group\).*/\1 asterisk/' /etc/apache2/apache2.conf && sed -i 's/AllowOverride None/AllowOverride All/' /etc/apache2/apache2.conf && service apache2 restart
AllowOverride All
AllowOverride All
root@aster:~# cat /etc/apache2/apache2.conf | grep AllowOverride AllowOverride None AllowOverride None AllowOverride None # AllowOverride None
root@aster:~# sed -i 's/AllowOverride None/AllowOverride All/' /etc/apache2/apache2.conf
root@aster:~# cat /etc/apache2/apache2.conf | grep AllowOverride AllowOverride All AllowOverride All AllowOverride All # AllowOverride All
# create the configuration file in the "available" section echo "ServerName localhost" | sudo tee /etc/apache2/conf-available/servername.conf # enable it by creating a symlink to it from the "enabled" section a2enconf servername # restart the server service apache2 restart
Подготовим MySQL
Требуется создать безопасный пароль для связи FreePBX и MySQL
export ASTERISK_DB_PW=`dd if=/dev/urandom bs=1 count=32 2>/dev/null | base64 - | cut -c2-18`
Эта команда сгенерирует 16-ти значный пароль и сохранит значение в переменной {ASTERISK_DB_PW}.
Подготовка базы данных Asterisk в MySQL.
Если вы задали ‘root’ пароль MySQL при установке, добавьте его после ключа -pyourpassword. (mysqladmin -u root -pYOURPASSWORD create asterisk)
mysqladmin -u root create asterisk mysqladmin -u root create asteriskcdrdb
Зададим права на использование БД MySQL
Замените asteriskuser на имя пользователя, которое вам нравится. Например: YOURUSER@localhost. Можно оставить как есть.
mysql -u root -e "GRANT ALL PRIVILEGES ON asterisk.* TO asteriskuser@localhost IDENTIFIED BY '${ASTERISK_DB_PW}';" mysql -u root -e "GRANT ALL PRIVILEGES ON asteriskcdrdb.* TO asteriskuser@localhost IDENTIFIED BY '${ASTERISK_DB_PW}';" mysql -u root -e "flush privileges;"
Graphical installation (and its variants)
Choose the output method to display the elements to complete the installation setup. All graphic installs will show similar screens, as below in the Graphic install screens section:
Output to VGA
Use this option if you are installing on a machine that only has a VGA, DVI or HDMI video output. Some appliances have a video port.
VNC-based install (Serial and VGA output)
This option will require the PBX to have a valid network connection, it will attempt to obtain an IP address, then it will start a VNC service to connect remotely, and finally it will show the instructions to connect using a VNC client.
You can connect using a VNC client such as UltraVNC or TightVNC using the IP and port mentioned in the screenshot above.
VNC installation has two variants:
Installation via VNC — Output to Serial Console
Use this option if you are installing on a machine that only has a Serial Console port such as Sangoma PBX 25, 40, 300, and 1000s. The window mentioned above will be displayed indicating the VNC settings to use to connect the client to the SNG7 installation.
Installation via VNC — Output to Serial and VGA
Use this option if you are installing on a machine that only has Serial Console port and display Port such as VGA, DVI or HDMI and you want the system to output to both video sources such as Sangoma PBX 40, 60, 100 and 400’s.
In this mode the video source will be output to both your Serial Console and Video port once the software has been installed but you will need to use VNC to complete the install process as it can not output to VGA, DVI or HDMI video source and serial port during install. It will only output to both once the software is installed.
Graphic install screens
- The installer will now start
- The installer will copy all required files in the background, but won’t finish until you set the root password. Click on the root password box to set your root password.
- Type in your root password and confirm it a second time and click on the Done option in the top left screen.
- During installation of FreePBX package itself can take 15 or more minutes to install and does requires access to the internet so depending on your internet speeds it can take awhile to install so be patient.
- Once the install has completed it will ask you to reboot. Click on reboot button as seen below, your system is now installed.
Final steps
Once the server reboots you will be able to log in using one of the following methods:
- Keyboard and Monitor (direct terminal on the server)
- Serial port, if server do not possess a display port
- SSH (you need to know the IP of the server to enter with a client like Putty)
- Via browser (you need to also know the IP of the server to access the FreePBX web interface).
Methods 1 to 3 will allow you to log in using the username «root» (without quotes), and the password you selected earlier. Depending on the installation option chosen above your password can be «SangomaDefaultPassword» (without quotes) or the one you set up yourself.
Use any of the methods above to activate your deployment. Note: you may require to at least update sysadmin module in order to be able to activate the deployment under certain conditions
Подготовка системы
Для корректной работы сервера необходимо настроить системное время, открыть порты в брандмауэре и отключить SELinux. Также мы установим несколько пакетов и создадим учетную запись, от которой будет работать Asterisk.
1. Время
Задаем часовой пояс:
timedatectl set-timezone Europe/Moscow
* в данном примере московское время. Список всех зон можно посмотреть командой timedatectl list-timezones.
Устанавливаем сервис для синхронизации времени:
yum install chrony
И запускаем его с разрешением автозапуска:
systemctl enable chronyd —now
2. Настройка firewall
Мы должны открыть порты:
- 5060 — SIP.
- 5061 — SIP over TLS.
- 80 — http.
- 443 — https.
В CentOS для управления брандмауэром может использоваться firewalld или iptables. Рассмотрим настройку и того, и другого.
Firewalld
Разрешаем порты для работы asterisk:
firewall-cmd —permanent —add-port={5060,5061}/{tcp,udp}
… и веб-сервера NGINX:
firewall-cmd —permanent —add-service={http,https}
Для применения настроек перезапускаем правила:
firewall-cmd —reload
Iptables
Открываем порты для астериска и веб-сервера:
iptables -I INPUT -p tcp —match multiport —dports 5060,5061 -j ACCEPT
iptables -I INPUT -p udp —match multiport —dports 5060,5061 -j ACCEPT
iptables -I INPUT -p tcp —match multiport —dports 80,443 -j ACCEPT
iptables -I INPUT -p udp —match multiport —dports 80,443 -j ACCEPT
Для сохранения правил установим:
yum install iptables-services
И разрешим автозапуск сервиса:
systemctl enable iptables
Теперь сохраняем сами правила:
service iptables save
* правила будут сохранены в файл /etc/sysconfig/iptables.
3. Отключение SELinux
Для отключения SELinux вводим две команды:
setenforce 0
sed -i ‘s/^SELINUX=.*/SELINUX=disabled/g’ /etc/selinux/config
4. Установка пакетов
Выполним установку пакетов:
dnf install wget tar glibc-langpack-ru
* где:
- wget — утилита для загрузки файлов по сети.
- tar — для распаковки архивов.
- glibc-langpack-ru — русская локаль. Она нужна, чтобы у нас была возможность выбрать русский интерфейс во FreePBX.
5. Создание пользователя
Нам нужен общий пользователь, от которого будет работать Asterisk и веб-сервер. Это необходимо, чтобы веб-сервер имел доступ к каталогам астериска.
Создаем пользователя командой:
useradd asterisk -m
Установка Mariadb
В своей работе FreePBX использует базу данных Mysql. В качестве mysql сервера будем использовать mariadb. Подключаем репозиторий со свежей версией MariaDB. Для этого создаем файл /etc/yum.repos.d/MariaDB.repo следующего содержания.
# MariaDB 10.3 CentOS repository list - created 2019-04-01 09:11 UTC # http://downloads.mariadb.org/mariadb/repositories/ name = MariaDB baseurl = http://yum.mariadb.org/10.3/centos7-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1
Устанавливаем MariaDB.
# yum install MariaDB-server MariaDB-client MariaDB-shared
Запускаем mariadb и добавляем в автозагрузку.
# systemctl start mariadb # systemctl enable mariadb
Настройка веб-сервера
Для работы FreePBX нам необходим веб-сервер и СУБД. В нашем примере мы установим связку NGINX + PHP + MariaDB + NodeJS.
Сервер баз данных
Устанавливаем сервер mariadb:
dnf install mariadb-server
Стартуем сервис и разрешаем его автозапуск:
systemctl enable mariadb —now
Задаем пароль для суперпользователя СУБД:
mysqladmin -u root password
NGINX
Для установки веб-сервера вводим команду:
dnf install nginx
Открываем конфигурационный файл:
vi /etc/nginx/nginx.conf
В секции http добавим опцию:
client_max_body_size 128M;
* данный параметр разрешает загрузку файлов размером 128 Мб.
Стартуем nginx:
systemctl enable nginx —now
Открываем браузер и заходим по адресу http:<IP-адрес сервера> — должна открыться страница приветствия NGINX:
Веб-сервер установлен.
PHP и компоненты
Установим интерпретатор php и компоненты, необходимые для работы FreePBX:
dnf install php php-fpm php-bcmath php-gd php-json php-mbstring php-mysqlnd php-pear php-snmp php-zip
В процессе установки php на CentOS устанавливается apache, но нам он не нужен — вводим команду для запрета его автозапуска:
systemctl disable httpd
Открываем настройки для php:
vi /etc/php.ini
Правим значения для следующих опций:
upload_max_filesize = 128M
…
post_max_size = 128M
…
date.timezone = «Europe/Moscow»
…
memory_limit = 512M
* где:
- upload_max_filesize — максимальный объем загружаемого файла.
- post_max_size — максимальный объем всех загружаемых файлов за один раз.
- date.timezone — временная зона.
- memory_limit — максимальный объем памяти, который может использовать интерпретатор.
Открываем настройки php-fpm:
vi /etc/php-fpm.d/www.conf
Задаем значения для следующих опций:
user = asterisk
…
group = asterisk
…
listen.acl_users = asterisk,apache,nginx
* FreePBX должен работать с файлами в каталоге /etc/asterisk. Владельцем этого каталога будет пользователь asterisk, поэтому обработка php должна выполняться тоже от данного пользователя, чтобы иметь соответствующие права на редактирование конфигурационных файлов.
Запускаем php-fpm:
systemctl enable php-fpm —now
NGINX + PHP
Свяжем наш веб-сервер с php. Для этого откроем конфигурационный файл:
vi /etc/nginx/nginx.conf
Добавим следующие строки в разделы http — server:
…
http {
…
server {
…
server_name 192.168.1.15;
…
location ~ \.php$ {
set $root_path /usr/share/nginx/html;
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_param SERVER_NAME $host;
}
…
* в данном примере мы задаем настройку для server_name — указываем имя хоста или IP-адрес, по которому мы будем подключаться к FreePBX. Также мы создаем секцию location для обработки php через php-fpm.
Перезапустим nginx:
systemctl reload nginx
Создадим файл php в домашней директории nginx:
vi /usr/share/nginx/html/index.php
<?php phpinfo(); ?>
Открываем браузер и заходим по адресу http:<IP-адрес сервера> — должна открываться страница с информацией об установленной версии php и всех компонентах:
NodeJS
Последний компонент для нашего веб-сервера — NodeJS. Для его установки выполняем команду:
dnf install nodejs
Убедиться в установке можно командой просмотра версии:
node —version
Наш веб-сервер готов к работе.