Home » Asterisk » Установка Freepbx на Centos 8

Установка Freepbx на Centos 8

Сейчас практически вся современная телефонная связь в офисах сферы малого и среднего бизнеса осуществляется по протоколу ip. Установка asterisk и панели управления freepbx на сервер под управлением CentOS 8 тема моего очередного повествования. Мы последовательно выполним все шаги по конфигурированию и сборке исходных текстов устанавливаемых продуктов.

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом «DevOps практики и инструменты» в OTUS. Курс не для новичков, для поступления нужно пройти .

Цели статьи

  1. Кратко рассказать о том, что такое asterisk и freepbx.
  2. Собрать asterisk из исходников.
  3. Установить панель управления Freepbx.
  4. Проверить, что все работает.

Данная статья является частью единого цикла статьей про сервер Centos.

Введение

Asterisk — бесплатное решение для организации voip телефонии. Он обладает всеми возможностями обычных АТС, но предоставляет более богатый функционал по управлению звонками. За относительную простоту настройки, по сравнению с цифровыми АТС, бесплатность и широкие возможности он и снискал такую популярность.

Freepbx — бесплатный веб интерфейс для управления астериском. Он существенно упрощает работу с конфигурациями, позволяет выполнять некоторые функции людям, вообще далеким от астериска. Например, с его помощью практически любого можно научить управлять учетными записями пользователей.

Лично я больше люблю настраивать asterisk вручную, нежели с помощью готовой панели. Да, конфигов астериск очень много, они объемные, работать с ними не удобно. Тем не менее, чистый астериск предоставляет практически неограниченную возможность по конфигурированию. С готовой панелью вы будете ограничены ее возможностями. Но если они вас полностью удовлетворяют, то лучше использовать ее.

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

  1. Подготовка системы.
  2. Настройка Web сервера.
  3. Установка NodeJS.
  4. Сборка Asterisk из исходников.
  5. Установка Freepbx.

Сразу важное замечание. Официально Freepbx еще не поддерживает Centos 8. После установки панели, она будет показывать в статусе, что версию системы, на которую она установлена, не может определить. Учитывайте этот нюанс. С таким раскладом для прода она еще не готова. Но в целом, если поставить, попробовать и убедиться, что она работает, можно использовать. По сути, эта панель привязана не к системе, а к версиям софта (php, nodejs, asterisk).

Следующая проблема в том, что стабильной считается 14-я версия, но она работает нормально только на php 5.6, для которого уже кончилась поддержка и ставить ее как-то не с руки. Есть 15-я версия, которая нормально работает на php 7, но она все еще в статусе бета, хоть и работает достаточно стабильно. Что ставить себе, решайте сами. Если непременно нужна Centos 8, то в закрытый контур я бы поставил 14-ю версию на php 5.6. Если версия с доступом из инета, то я бы ставил 15-ю на php 7.

Таким образом, если вам нужна максимальная стабильность, то разумнее всего сейчас использовать Centos 7, php 5.6 и Freepbx 14 (моя статья по теме). Пример одного из многочисленных вопросов на официальном сайте по поводу php 7.

Я покажу 3 примера установки Freepbx:

  • 15-я версия на php 7.2
  • 14-я версия на php 7.2
  • 14-я версия на php 5.6

Переходите по меню сразу к нужному разделу.

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

Я рекомендую ознакомиться с моим материалом на тему установки и первоначальной настройки centos 8. Многие вопросы там рассмотрены подробнее, здесь же я не буду на них задерживаться, просто выполню необходимые команды.

Прежде чем мы начнем устанавливать asterisk, нам надо выполнить целый ряд подготовительных действий. Первым делом отключаем selinux. Для этого открываем файл:

# mcedit /etc/sysconfig/selinux

и устанавливаем значение SELINUX=disabled. После этого применяем настройку без перезагрузки сервера:

# setenforce 0

Рекомендация по отключению selinux дается в официальной инструкции по установке freepbx, так как это может привести к нарушению процесса инсталляции.

Дальше обновляем систему и ставим пакеты Development Tools:

# dnf update
# dnf groupinstall core base "Development Tools"

И еще некоторые зависимости, которые будут нужны.

# dnf install tftp-server ncurses-devel sendmail sendmail-cf newt-devel libxml2-devel libtiff-devel gtk2-devel subversion kernel-devel git crontabs cronie cronie-anacron wget sqlite-devel net-tools gnutls-devel unixODBC

В своей работе FreePBX использует базу данных Mysql. В качестве mysql сервера будем использовать mariadb. Для Freepbx версия не критична, так что будем ставить 10.3 из базового репозитория.

# dnf module install mariadb

Установка Mariadb на Centos 8

Запускаем mysql сервер.

# systemctl start mariadb
# systemctl enable mariadb

Теперь нам нужно установить asterisk. Я решил не добавлять информацию об этом в эту статью, так как она один в один дублирует содержание указанной. Пройдите по ссылке и установите asterisk. Начинать надо сразу с установки jansson и pjsip, так как подготовка сервера там такая же, и мы ее уже выполнили.

Настройка Web сервера

Для работы панели FreePBX нужен web сервер с php. Я буду использовать версию php 7.2 из базового рпозитория. Более подробно про настройку web срвера на Centos вы можете прочитать отдельно. Сейчас же коротко пройдем по шагам весь процесс.

Устанавливаем веб сервер apache:

# dnf install @httpd

Удаляем стартовую страницу.

# rm -f /var/www/html/index.html

Запускаем httpd и добавляем в автозагрузку.

# systemctl enable --now httpd

Открываем порты на firewalld, если вы ранее не настраивали iptables.

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

Если вы хотите использовать php 5.6, то сразу переходите в самый конец статьи, в соответствующий раздел. Ниже будем ставить дефолтную версию php 7.2 из базового репозитория Centos 8. Устанавливаем необходимые php расширения.

# 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

Изменяем максимально допустимый размер файла для загрузки и лимит по памяти для скриптов.

# 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.

# 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

# 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.

# systemctl enable --now php-fpm httpd
# systemctl restart php-fpm httpd

Поверяем статус запущенных служб.

# systemctl status php-fpm httpd

Запуск php-fpm и httpd

Все в порядке, движемся дальше.

Установка NodeJS

Для работы Freepbx требуется сервер NodeJS. Установим его на Centos 8. Нам нужна будет 10-я версия, и она есть в базовом репозитории. Так что ставится все очень просто.

# dnf module install nodejs:10

Установка NodeJS на Centos 8

После завершения установки проверяем версию.

# node --version
v10.16.3

Установка Freepbx 15 на Centos 8

Начнем с самого простого 15-я версия на php 7. Качаем архив с официального сайта.

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

Распаковываем архив.

# tar xfz freepbx-15.0-latest.tgz

Устанавливаем Freepbx 15 на Centos 8.

# cd freepbx
# ./start_asterisk start
# ./install -n

Если на mysql установили пароль root, то запускать установку следует с указанием пароля.

# ./install -n --dbuser root --dbpass password

Установка Freepbx на Centos 8

Перезапустите httpd.

# systemctl restart httpd

На этом установка freepbx закончена. Можно идти в веб интерфейс и проверять. Сначала создадите учетную запись администратора freepbx, потом зайдете под ней в панель управления asterisk. Рекомендую выбрать английский язык. Перевод на русский так себе, с ним иногда бывает сложно понять суть настроек.

Я заметил небольшую проблему. Во время входа панель обращается к какому-то внешнему ресурсу, который с моего сервера плохо доступен. Из-за этого очень долго выполняется вход, потом вылетает ошибка бэкенда и загружается dashboard. В логах apache при этом была ошибка:

[proxy_fcgi:error] [pid 12015:tid 140317076465408] (70007)The timeout specified has expired: [client 10.20.1.1:51742] AH01075: Error dispatching request to : (polling), referer: http://10.20.1.23/admin/config.php

Не хватает дефолтного времени в параметре RequestReadTimeout. Ошибка пропала и вход стал выполняться нормально после того, как я увеличил таймауты, добавив в /etc/httpd/conf/httpd.conf.

RequestReadTimeout header=20-600,MinRate=500 body=20,MinRate=500

Не забудьте после этого перезапустить httpd.

Так же у меня была ошибка с отображением системной информации в виджете System Overview. Вместо полезной информации там была ошибка:

There was an error asking for Overview. Check the error logs for more information.

Как ее исправить, я так и не разобрался.

Установка Freepbx 14 на Centos 8

Теперь покажу, как установить Freepbx 14 на php 7.2, которая в базовом репозитории Centos 8. Делаем все то же самое, что и выше, только для 14-й версии.

Качаем архив с официального сайта.

# cd ~
# wget http://mirror.freepbx.org/modules/packages/freepbx/freepbx-14.0-latest.tgz

Распаковываем архив.

# tar xfz freepbx-14.0-latest.tgz

Устанавливаем Freepbx 14 на Centos 8.

# cd freepbx
# ./start_asterisk start
# ./install -n

Если на mysql установили пароль root, то запускать установку следует с указанием пароля.

# ./install -n --dbuser root --dbpass password

Перезапустите httpd.

# systemctl restart httpd

На этом установка freepbx 14 закончена. Можно идти в веб интерфейс и проверять.

Доступ в web интерфейс Freepbx

Переходим в браузере по ip адресу или доменному имени сервера и создаем учетную запись администратора Freepbx. При первом заходе в 14-ю версию я увидел ошибку.

Ошибка в Freepbx 14

Текст ошибки.

Whoops \ Exception \ ErrorException (E_DEPRECATED)
Methods with the same name as their class will not be constructors in a future version of PHP; gui_hidden has a deprecated constructor in /var/www/html/admin/libraries/components.class.php on line 571

Насколько я понял, это сообщение о том, что используется какая-то конструкция, которая объявлена Deprecated и скоро не будет работать. Что с этим делать сейчас, я не понял. Нашел баг репорт с этой ошибкой — https://issues.freepbx.org/browse/FREEPBX-19941 Он почему-то отклонен, помещен как дублирующий, но найти эту же ошибку в трекере я не смог.

Если взять версию php 5.6, то там этой ошибки не будет. Freepbx 14 официально поддерживает только 5.6, но откатываться на нее совсем не хочется.

Я решил просто отключить обработчик ошибок bootstrap. Для этого открываем конфиг freepbx и добавляем туда новое значение.

# mcedit /etc/freepbx.conf
$bootstrap_settings['freepbx_error_handler'] = false;

Заходим в web интерфейс freepbx еще раз и создаем администратора.

Учетная запись администратора Freepbx

Потом, используя созданную учетку, логинимся в панель и указываем начальные настройки. Рекомендую выбрать английский язык. Как я уже говорил, перевод на русский так себе, с ним иногда бывает сложно понять суть настроек.

Выбор языка web интерфейса

После этого оказываетесь в веб панели Freepbx. Нажмите сверху на Dashboard и увидите сводную информацию по системе. Теперь можно начинать ее настройку, но это тема отдельной статьи. Возможно, до нее у меня когда-нибудь дойдут руки.

Установка Freepbx 14 с php 5.6 на Centos 8

В целом, Freepbx 14 на php 7 работает. Я читал в буржунете, что вроде как работает нормально и особых проблем быть не должно. Но сразу предупреждаю, что сам я не проверял. Самый надежный вариант, как я написал выше, будет установить 14-ю версию на php 5.6. Давайте сделаем и это.

Для этого подключаем репозиторий remi и epel.

# dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
# dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm

Устанавливаем php 5.6

# dnf install php56 php56-php-fpm php56-php-pear php56-php-cgi php56-php-common php56-php-curl php56-php-mbstring php56-php-gd php56-php-mysqlnd php56-php-gettext php56-php-bcmath php56-php-zip php56-php-xml php56-php-json php56-php-process php56-php-snmp --skip-broken

Php 5.6 в Centos 8 устанавливается в /opt. Конфиг php.ini лежит по адресу /etc/opt/remi/php56/php.ini, конфиг пула /etc/opt/remi/php56/php-fpm.d/www.conf. Их нам надо так же отредактировать, как и для 7-й версии. Увеличить лимиты и заменить пользователя на asterisk. Читайте об этом в разделе про настройку web сервера.

Запускается php 5.6 командой:

# systemctl enable --now php56-php-fpm

Добавьте path с php5.6 в окружение.

# source /opt/remi/php56/enable

Чтобы после перезагрузки они снова применились, добавьте их в профиль.

# cat /opt/remi/php56/enable >> ~/.bash_profile

Установите права на директорию с сессиями php для пользователя asterisk.

# chown -R asterisk. /var/opt/remi/php56/lib/php/session

Дальше устанавливается точно так же Freepbx 14 и настраивается.

Заключение

Не понравилась статья и хочешь научить меня администрировать? Пожалуйста, я люблю учиться. Комментарии в твоем распоряжении. Расскажи, как сделать правильно!

Долго я возился с этой статьей. В итоге перепробовал кучу всяких вариантов и настроек, но у меня так и не получилось добиться того, чтобы Freepbx без ошибок работала на Centos 8. Я для себя сделал вывод, что панель просто не готова к работе на этой системе. Статью я решил все же оформить и опубликовать, потому что было жаль потраченного времени, плюс может это будет кому-то полезно, если необходимо настраивать только на Centos 8.

При настройке и отладке различных версий, рекомендую использовать виртуальную машину и снепшоты. Я сначала настроил систему, сделал снепшот, потом собрал астериск, сделал еще снепшот, а потом уже пробовал различные версии панели. Это позволило оперативно проверить много вариантов настроек и версий php. Загружался из снепшотов раз 20.

Все статьи в буржунете, что видел, поверхностны и рассказывают обычную установку на дефолтную систему с php 7.2 из базовых реп. Как это потом работает, никто не проверяет. Реально полезной и законченной информации по Centos 8 b Freepbx я не нашел.

Если у кого-то есть информация, как все это корректно настроить и использовать, буду рад подробностям в комментариях.

Напоминаю, что данная статья является частью единого цикла статьей про сервер Centos.

Онлайн курс "DevOps практики и инструменты"

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, научиться непрерывной поставке ПО, мониторингу и логированию web приложений, рекомендую познакомиться с онлайн-курсом «DevOps практики и инструменты» в OTUS. Курс не для новичков, для поступления нужны базовые знания по сетям и установке Linux на виртуалку. Обучение длится 5 месяцев, после чего успешные выпускники курса смогут пройти собеседования у партнеров. Проверьте себя на вступительном тесте и смотрите программу детальнее по .

Помогла статья? Есть возможность отблагодарить автора

Автор Zerox

Zerox
Владимир, системный администратор, автор сайта. Люблю настраивать сервера, изучать что-то новое, делиться знаниями, писать интересные и полезные статьи. Открыт к диалогу и сотрудничеству.

7 комментариев

  1. Аватар

    Добрый.
    Спасибо за статью.

    Дальнейшая настройка wiki.pro-voip.ru/category/freepbx

    • Zerox

      Посмотрел там статью про установку freepbx на centos 8 — полный порожняк. Я даже знаю, с какой англоязычной статьи это перевели. Поставили 14-ю версию на дефолтный php 7.2, где она без напильника работать не будет. А в комментариях сказали, что надо проверить пользователя, от которого работает apache.

  2. Аватар

    А кроме академических целей в чем смысл использовать именно такую связку?
    Ведь есть готовый freepbx правда на 7 центосе. Скоро думаю и на 8 будет.
    А в целом как эксперимент выглядит неплохо.

    • Zerox

      Смысла нет. Меня просто много раз просили написать такую статью, вот я и сделал это. Да и самому было интересно проверить. Сейчас если делать новые установки, хочется уже на Centos 8 сразу, вот и проверяю работу различных сервисов на этой системе.

  3. Аватар
    Алексей

    а я вот на днях столкнулся с тем, что нет monit-а в 8-м

    [root@centos-8 etc]# dnf repository-packages epel list | grep -i monit
    gnome-shell-extension-system-monitor-applet.noarch 1:38-4.20191019gitf00e248.el8 epel
    ipmctl-monitor.x86_64 01.00.00.3469-1.el8 epel
    monitorix.noarch 3.11.0-1.el8 epel
    nordugrid-arc-monitor.noarch 6.3.0-1.el8 epel
    perl-Monitoring-Plugin.noarch

Добавить комментарий

Ваш e-mail не будет опубликован.

Нажимая кнопку "Отправить комментарий" Я даю согласие на обработку персональных данных.