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

Thank you for reading this post, don't forget to subscribe!

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

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

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

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

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

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

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

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

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

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

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

Теперь нам нуж­но уста­но­вить asterisk

Устанавливаем Jansson и pjsip

Установка Asterisk 16

Я буду уста­нав­ли­вать LTS вер­сию Asterisk 16. Сове­тую для дол­го­сроч­но­го исполь­зо­ва­ния все­гда исполь­зо­вать LTS вер­сии. Они в целом ста­биль­нее и доль­ше срок под­держ­ки. Идем на стра­ни­цу https://www.asterisk.org/downloads/asterisk/all-asterisk-versions и копи­ру­ем ссыл­ку на нуж­ную вер­сию. Загру­жа­ем ее на сервер.

Уста­нав­ли­ва­ем на centos 8 пакет libedit-devel.

Соби­ра­ем asterisk.

Выби­рай­те необ­хо­ди­мые моду­ли и зву­ки, в зави­си­мо­сти от того, что вам нуж­но. Я в общем слу­чае указываю:

  • Add-ons: format_mp3, res_config_mysql.
  • Core Sound Packages: рус­ские зву­ки RU-WAV.
  • Music On Hold File Packages: звук WAV.
  • Extras Sound Packages: англий­ский EN-WAV, рус­ско­го к сожа­ле­нию нет.

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

Про­дол­жа­ем установку:

Создание пользователя asterisk и запуск

По-умол­ча­нию, asterisk уста­нов­лен от root и будет запус­кать­ся от него же. Я пред­ла­гаю для это­го создать отдель­но­го поль­зо­ва­те­ля и запус­кать асте­риск от него. Для это­го созда­ем поль­зо­ва­те­ля и добав­ля­ем его в неко­то­рые группы.

Настра­и­ва­ем Asterisk на запуск под этим поль­зо­ва­те­лем. Для это­го добав­ля­ем в кон­фиг /etc/sysconfig/asterisk параметры:

Теперь доба­вим при­мер­но то же самое в сам кон­фиг асте­ра /etc/asterisk/asterisk.conf.

Про­бу­ем запу­стить asterisk:

Если нет сооб­ще­ний об ошиб­ке, ско­рее все­го все в поряд­ке. Про­ве­ря­ем ста­тус службы.

Asterisk запу­стил­ся, но есть неболь­шие ошибки.

Свя­за­ны с тем, что в кон­фи­гах невер­но ука­зан путь к radiusclient. Сей­час испра­вим это.

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

Доба­вим его теперь в автозагрузку.

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

Для рабо­ты пане­ли FreePBX нужен web сер­вер с php. Я буду исполь­зо­вать вер­сию php 7.2 из базо­во­го рпозитория.

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

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

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

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

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

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

Теперь нам нуж­но изме­нить неко­то­рые пара­мет­ры httpd — запу­стить его от поль­зо­ва­те­ля asterisk и вклю­чить опцию AllowOverride. Это мож­но сде­лать рука­ми в фай­ле /etc/httpd/conf/httpd.conf, либо авто­ма­ти­че­ски с помо­щью sed.

Мы про­сто выста­ви­ли сле­ду­ю­щие параметры:

  • User asterisk
  • Group asterisk
  • AllowOverride All

И так же в php-fpm меня­ем поль­зо­ва­те­ля на asterisk в кон­фи­гу­ра­ции пула /etc/php-fpm.d/www.conf

Запус­ка­ем httpd и php-fpm.

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

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

Установка NodeJS

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

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

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

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

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

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

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

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

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

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

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

Не забудь­те после это­го пере­за­пу­стить 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-й версии.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 командой:

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

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

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

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