Установка Asterisk + FreePBX на Rocky Linux
Обновлено:
Опубликовано:
Используемые термины: Asterisk, FreePBX, Rocky Linux, NGINX.
Самый быстрый способ установить Asterisk + FreePBX — использовать ISO-образ FreePBX Distro. Но мы рассмотрим установку данной сборки на Linux Rocky «с нуля».
Данная инструкция написана на примере установки Asterisk 20 LTS и FreePBX 17. Она протестирована для Rocky Linux версий 8 и 9. В качестве веб-сервера для FreePBX мы будем использовать NGINX.
Готовим систему
Настраиваем компоненты веб-сервера
СУБД MariaDB
NGINX
PHP
Настройка связки PHP с NGINX
NodeJS
Устанавливаем сервер телефонии
Запускаем портал FreePBX
Настройка CDR
Возможные ошибки
Читайте также
Подготовка системы
Для корректной работы сервера необходимо настроить системное время, открыть порты в брандмауэре и отключить 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.
- 10000-20000 — диапазон для динамических портов.
В Rocky для управления брандмауэром может использоваться firewalld или iptables. Рассмотрим настройку и того, и другого.
Firewalld
Разрешаем порты для работы asterisk:
firewall-cmd --permanent --add-port={5060,5061}/{tcp,udp}
firewall-cmd --permanent --add-port=10000-20000/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
iptables -I INPUT -p udp --dport 10000:20000 -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
Настройка веб-сервера
Для работы FreePBX нам необходим веб-сервер и СУБД. В нашем примере мы установим связку NGINX + PHP + MariaDB + NodeJS.
Сервер баз данных
Устанавливаем сервер mariadb:
dnf install mariadb-server mariadb-connector-odbc
Стартуем сервис и разрешаем его автозапуск:
systemctl enable mariadb --now
Сразу создадим базы и пользователя. Входим в оболучку SQL:
mysql
Создаем базы asterisk и asteriskcdrdb:
> CREATE DATABASE asterisk DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
> CREATE DATABASE asteriskcdrdb DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
Создаем пользователя и даем права на базы:
> CREATE USER 'asterisk'@'localhost' IDENTIFIED BY 'asterisk_123';
> GRANT ALL PRIVILEGES ON asterisk.* TO 'asterisk'@'localhost';
> GRANT ALL PRIVILEGES ON asteriskcdrdb.* TO 'asterisk'@'localhost';
Готово, можно выходить из SQL:
> QUIT
NGINX
Для установки веб-сервера вводим команду:
dnf install nginx
Открываем конфигурационный файл:
vi /etc/nginx/nginx.conf
В секции http добавим опцию:
client_max_body_size 128M;
* данный параметр разрешает загрузку файлов размером 128 Мб.
Стартуем nginx:
systemctl enable nginx --now
Открываем браузер и заходим по адресу http:<IP-адрес сервера> — должна открыться страница приветствия NGINX:

* страница может иметь другой вид. Это зависит от сборки Linux и версии.
Веб-сервер установлен.
PHP и компоненты
Прежде чем начать установку, необходимо изучить документацию к устанавливаемой версии FreePBX в части требований версии PHP. Например, для 17-й версии это можно сделать на странице с инструкцией по развертыванию.
Чтобы правильно выбрать нужную версию FreePBX и подходящую к ней версию Asterisk, воспользуемся таблицей с сайта разработчика.
Также имейте ввиду, что для каждой версии дистрибутива Ubuntu характерна установка своей версии PHP. Иногда, для установки определенной версии нам потребуется подключить дополнительный репозиторий.
Смотрим, какую версию PHP предлагают установить встроенные репозитории:
dnf list --showduplicates php
Если версия не соответствует требованию, то подключаем дополнительный репозиторий и настраиваем нужную версию PHP. Для этого используем инструкцию Установка PHP разных версий на CentOS или Rocky.
Установим интерпретатор php и компоненты, необходимые для работы FreePBX:
dnf install php php-fpm php-bcmath php-gd php-json php-mbstring php-mysqlnd php-pear php-snmp php-zip
В процессе установки php на Rocky устанавливается 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/asterisk.conf
[asterisk]
user = asterisk
group = asterisk
listen = /run/php-fpm/asterisk.sock
listen.acl_users = asterisk,apache,nginx
pm = dynamic
pm.max_children = 10
pm.start_servers = 4
pm.min_spare_servers = 2
pm.max_spare_servers = 6
* 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/asterisk.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:
nginx -t && nginx -s reload
Создадим файл php в домашней директории nginx:
vi /usr/share/nginx/html/index.php
<?php phpinfo(); ?>
Открываем браузер и заходим по адресу http:<IP-адрес сервера> — должна открываться страница с информацией об установленной версии php и всех компонентах:

NodeJS
Последний компонент для нашего веб-сервера — NodeJS. Согласно системным требованиям, нам нужна версия 18:
dnf module enable nodejs:18
Выполняем команду:
dnf install nodejs
Убедиться в установке можно командой просмотра версии:
node --version
Наш веб-сервер готов к работе.
Установка Asterisk
Мы будем устанавливать 20-ю версию Asterisk. На странице загрузки мы можем посмотреть все версии АТС и ссылки на них.
Сначала установим пакеты, необходимые для сборки:
dnf install libedit-devel
dnf --enablerepo=devel install jansson-devel unixODBC-devel
После скачиваем Asterisk:
wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20-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 -j$(nproc)
Мы должны увидеть сообщение об успешной сборке:
+--------- 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 samples
cp contrib/systemd/asterisk.service /etc/systemd/system/asterisk.service
Ранее мы создали пользователя asterisk, от которого должен запуститься наш сервер телефонии. Для этого откроем файл:
vi /etc/asterisk/asterisk.conf
Снимаем комментарий с опций:
runuser = asterisk
rungroup = asterisk
... и снимем комментарий с последующим редактированием:
defaultlanguage = ru
documentation_language = ru_RU
Задаем владельца для следующих каталогов:
chown -R asterisk:asterisk /var/run/asterisk /etc/asterisk /var/{lib,log,spool}/asterisk /var/log/asterisk
и проверяем настройки:
asterisk -c
Мы должны увидеть Asterisk Ready:

... значит наш сервер готов к запуску. Все ошибки и предупреждения нам не помешают, однако их можно устранить разными способами, как правило, отключив неиспользуемые модули.
После успешной проверки, можно запустить Asterisk в качестве демона:
systemctl enable asterisk
systemctl start asterisk
Установка FreePBX
Возвращаемся в домашнюю папку пользователя:
cd ~
Установим пакеты:
yum install sox mpg123
* где:
- sox — консольная утилита для преобразования аудиофайлов из одного формата в другой.
- mpg123 — аудиопроигрыватель/декодер реального времени.
Скачиваем портал для управления астериском:
wget http://mirror.freepbx.org/modules/packages/freepbx/freepbx-17.0-latest.tgz
Распаковываем скачанный архив:
tar -zxf freepbx-*.tgz
Переходим в распакованный каталог:
cd freepbx
Запускаем скрипт проверки работы Asterisk:
./start_asterisk start
Если видим:
STARTING ASTERISK
Asterisk is already running
... запускаем установку:
./install -n --dbuser=asterisk --dbpass=asterisk_123 --webroot=/var/www/freepbx
* в данном примере мы указали учетные данные для подключения к СУБД (логин asterisk и пароль asterisk_123, которые мы создали вместе с базой); также мы указываем путь /var/www/freepbx.
Начнется установка — в конце мы должны увидеть:
You have successfully installed FreePBX
Установим компонент pm2:
fwconsole ma install pm2
Обновим все компоненты:
fwconsole ma updateall
Перезапустим конфигурацию:
fwconsole reload --verbose
Открываем браузер и заходим по адресу http:<IP-адрес сервера> — должна открываться страница конфигурирования FreePBX. Задаем настройки:

* достаточно указать логин и пароль для пользователя, под которым мы будем заходить в панель управления FreePBX и email адрес.
После входим в панель администратора под созданной учетной записью. Система нас запросит региональные настройки:

Теперь открываем конфигурационный файл:
vi /etc/asterisk/manager.conf
Находим строки:
#include manager_additional.conf
#include manager_custom.conf
... и меняем их на:
;include manager_additional.conf
;include manager_custom.conf
Перезапускаем сервис Asterisk:
systemctl restart asterisk
Asterisk + FreePBX настроен.
CDR и подключение к базе данных
В моем случае, не работало ведение CDR, а при вводе в консоли asterisk:
asterisk -rx "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
... я получил ошибку:
[01000][unixODBC][Driver Manager]Can't open lib '/usr/lib64/libmyodbc5.so' : file not found
То есть, проблема в отсутствии необходимой бибилиотеки при подключении к базе данных.
Нам необходимо выполнить 2 действия:
- Установить коннектор ODBC.
- Изменить драйвер для подключения к СУБД в odbc.ini.
Так как в данной инструкции мы используем в качестве севера баз данных MariaDB, нам необходим соответствующий коннектор. Для его установки воспользуемся инструкцией Настройка в Linux подключения к MariaDB из PHP с помощью ODBC.
После открываем файл:
vi /etc/odbc.ini
Задаем новое значение для параметра driver:
driver=MariaDB
* список доступных драйвером можно посмотреть в файле /etc/odbcinst.ini.
Перезапускаем asterisk:
systemctl restart asterisk
После можно проверить, что Asterisk подключился к базе:
asterisk -rx "odbc show"
Мы должны увидеть:
ODBC DSN Settings
-----------------
Name: asteriskcdrdb
DSN: MySQL-asteriskcdrdb
Number of active connections: 1 (out of 5)
Logging: Disabled
Возможные проблемы
Рассмотрим решение некоторых проблем, с которыми мы можем столкнуться в процессе настройки.
1. Can't open PID file /var/run/asterisk/asterisk.pid (yet?) after start: No such file or directory
Ошибка отображается при просмотре статуса сервиса, сразу после его запуска:
systemctl status asterisk
...
... systemd[1]: asterisk.service: Can't open PID file /var/run/asterisk/asterisk.pid (yet?) after start: No such file or directory
...
Данное сообщение не является ошибкой. Скорее, это сообщение от системы при запуске.
Убедиться в наличие данного файла можно командой:
ls -l /var/run/asterisk/asterisk.pid
Мы должны увидеть:
-rw-r--r--. 1 asterisk asterisk 6 Nov 5 09:45 /var/run/asterisk/asterisk.pid
* где видно, что файл существует. Его владелец — пользователь asterisk.
Читайте также
Вам могут быть полезны следующие инструкции: