Установка Asterisk + FreePBX на CentOS 8

Обновлено и опубликовано Опубликовано:

Используемые термины: Asterisk, FreePBX, CentOS, NGINX.

Самый быстрый способ установить Asterisk + FreePBX — использовать ISO-образ FreePBX Distro. Но мы рассмотрим установку данной сборки на Linux CentOS 8 «с нуля».

Данная инструкция написана на примере установки Asterisk 16 LTS и FreePBX 15 — хоть на момент написания этих строк, последняя версия астериска была 18-я, FreePBX 15 поддерживает, максимум, Asterisk 17. В качестве веб-сервера для FreePBX мы будем использовать NGINX.

Подготовка системы

Для корректной работы сервера необходимо настроить системное время, открыть порты в брандмауэре и отключить SELinux. Также мы установим несколько пакетов и создадим учетную запись, от которой будет работать Asterisk.

1. Время

Задаем часовой пояс:

timedatectl set-timezone Europe/Moscow

* в данном примере московское время. Список всех зон можно посмотреть командой timedatectl list-timezones.

Устанавливаем сервис для синхронизации времени:

yum install chrony

И запускаем его с разрешением автозапуска:

systemctl enable chronyd --now

2. Настройка firewall

Разрешаем порты для работы asterisk:

firewall-cmd --permanent --add-port=5060/{tcp,udp}

firewall-cmd --permanent --add-port=5061/{tcp,udp}

* порт 5060 для SIP, 5061 — SIP over TLS.

... и веб-сервера NGINX:

firewall-cmd --permanent --add-service={http,https}

Для применения настроек перезапускаем правила:

firewall-cmd --reload

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

Стартуем сервис и разрешаем его автозапуск:

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:

Стартовая страница 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 и всех компонентах:

Информационная страница phpinfo

NodeJS

Последний компонент для нашего веб-сервера — NodeJS. Для его установки выполняем команду:

dnf install nodejs

Убедиться в установке можно командой просмотра версии:

node --version

Наш веб-сервер готов к работе.

Установка 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

... значит наш сервер готов к запуску. Все ошибки и предупреждения нам не помешают, однако их можно устранить разными способами, как правило, отключив неиспользуемые модули.

После успешной проверки, можно запустить Asterisk в качестве демона:

systemctl enable asterisk

systemctl start asterisk

Установка FreePBX

Возвращаемся в домашнюю папку пользователя:

cd ~

Скачиваем портал для управления астериском:

wget http://mirror.freepbx.org/modules/packages/freepbx/freepbx-15.0-latest.tgz

* мы скачаем freepbx версии 15. Для CentOS 8 это оптимальная версия. Если необходимо установить freepbx 14, то устанавливаемая по умолчанию версия php выдаст ошибку.

Распаковываем скачанный архив:

tar zxvf freepbx-*.tgz

Переходим в распакованный каталог:

cd freepbx

Запускаем скрипт проверки работы Asterisk:

./start_asterisk start

Если видим:

STARTING ASTERISK
Asterisk is already running

... запускаем установку:

./install -n --dbuser root --dbpass password --webroot=/usr/share/nginx/html

* в данном примере мы указали учетные данные для подключения к СУБД (логин root и пароль, который мы создали после установки MariaDB); также мы указываем путь /usr/share/nginx/html, который является домашней директорией веб-сервера NGINX.

Начнется установка — в конце мы должны увидеть:

You have successfully installed FreePBX

Открываем браузер и заходим по адресу http:<IP-адрес сервера> — должна открываться страница конфигурирования FreePBX. Задаем настройки:

Задаем стартовые настройки 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 настроен.

Возможные проблемы

Рассмотрим решение некоторых проблем, с которыми мы можем столкнуться в процессе настройки.

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.

2. Ошибка 500 при попытке установить FreePBX 14 на CentOS 8

Ошибка появляется при попытке открыть страницу FreePBX в браузере.

Причина: официально, FreePBX 14 поддерживает php 5, которая по умолчанию уже не устанавливается в CentOS 8. В php версии 7 один из методов класса gui_hidden считается устаревшим и система возвращает ошибку 500.

Решение: есть 2 варианта решения проблемы.

1) установить на CentOS 8 php версии 5.6. Для этого подключаем репозиторий remi:

dnf install http://rpms.remirepo.net/enterprise/remi-release-8.rpm

После чего можно устанавливать необходимые компоненты:

dnf install php56 php56-php-fpm php56-php-bcmath php56-php-gd php56-php-json php56-php-mbstring php56-php-mysqlnd php56-php-pear php56-php-snmp php56-php-zip

Открываем настройки для php:

vi /etc/opt/remi/php56/php.ini

Правим значения для следующих опций:

upload_max_filesize = 128M
...
post_max_size = 128M
...
date.timezone = "Europe/Moscow"
...
memory_limit = 512M

Открываем настройки php-fpm:

vi /etc/opt/remi/php56/php-fpm.d/www.conf

Задаем значения для следующих опций:

user = asterisk
...
group = asterisk
...
listen.acl_users = asterisk,apache

Запускаем php-fpm:

systemctl enable php56-php-fpm --now

Откроем настройки nginx:

vi /etc/nginx/nginx.conf

Для опции fastcgi_pass задаем значение:

        ...
        location ~ \.php$ {
            ...
            fastcgi_pass unix:/var/opt/remi/php56/run/php-fpm/www.sock;
            ...

А также:

vi /etc/nginx/conf.d/php-fpm.conf

upstream php-fpm {
        server unix:/var/opt/remi/php56/run/php-fpm/www.sock;
}

Перезапускаем nginx:

systemctl restart nginx

Также потребовалось установить следующий модуль для FreePBX:

fwconsole ma downloadinstall soundlang

2) отключить отображение ошибки. Для этого открываем файл:

vi /etc/freepbx.conf

И добавляем строку:

...
$bootstrap_settings['freepbx_error_handler'] = false;
...

Однако, у меня данный способ не дал положительного результата. Страница FreePBX открылась, но с ошибкой «Can Not Connect to Asterisk», а сервис fwconsole при запуске выдавал ошибку. В итоге, самый правильный вариант — использовать официально поддерживаемую версию PHP.

Читайте также

Вам могут быть полезны следующие инструкции:

1. Установка Asterisk LTS на CentOS 7

2. Установка и базовая настройка сервера Asterisk на Ubuntu

# Телефония # Серверы # CentOS
Дмитрий Моск — частный мастер
Была ли полезна вам эта инструкция?

Да            Нет