Моя цель на сегодня: Развернуть Webинтерфейс для системы телефонизации базирующейся на связке Ubuntu 18.04 Server + FreePBX + Asterisk 16

FreePBX – это Web-оснастка управления Вашей программной АТС на базе Asterisk, т.е. не консольное управление. Я когда-то совсем давным-давно в одной конторе начинал работать через нее и про то что можно использовать консоль даже не знал, но познакомился, когда читал различную литературу для изучения. Если администрируешь телефонию сам и никто к ней не будет иметь доступа, то лучше консоль, если настроил и передал заказчику, то FreePBX.

Не хочу использовать образ от Sangoma на базе связки Asterisk + FreePBX да еще на CentOS

Хочу унифицированного использования везде и всюду дистрибутива Ubuntu.

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

Характеристики тестовой системы под Debian 10 + Proxmox 6.4-13

  • OS: Ubuntu 18.04 Server
  • IP: 172.35.35.9
  • CPU: 1 (2 cores)
  • SSD: 60Gb
  • RAM: 2Gb

Шаг №1: Обновляем систему в рамках текущего релиза:

ekzorchik@srv-bionic:~$ sudo nano /etc/update-manager/release-upgrades

[DEFAULT]

#Prompt=lts

Prompt=never

ekzorchik@srv-bionic:~$ sudo rm -Rf /var/lib/apt/lists

ekzorchik@srv-bionic:~$ sudo apt-get update && sudo apt-get upgrade -y && sudo apt-get dist-upgrade -y

ekzorchik@srv-bionic:~$ sudo reboot

ekzorchik@srv-bionic:~$ uname -a && lsb_release -a

Linux srv-bionic 4.15.0-204-generic #215-Ubuntu SMP Fri Jan 20 18:24:59 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux

No LSB modules are available.

Distributor ID: Ubuntu

Description:    Ubuntu 18.04.6 LTS

Release:        18.04

Codename:       bionic

ekzorchik@srv-bionic:~$

Шаг №2: Опираясь на заметку "Установка Asterisk 16.15.1 на Ubuntu 18.04 Server" производим установку Asterisk в текущую систему.

sudo apt-get install -y build-essential wget libssl-dev libncurses5-dev libnewt-dev libxml2-dev linux-headers-$(uname -r) libsqlite3-dev uuid-dev dh-autoreconf

На заметку: В целях безопасности можно удалить все конфигурационный файлы примеров, ну это когда у Вас уже будет все свое и отработанное к примеру вот так:

sudo rm -rf /etc/asterisk/ext* /etc/asterisk/sip* /etc/asterisk/pj* /etc/asterisk/iax* /etc/asterisk/manager*

Шаг №3: Устанавливаю в систему Webсервис Apache2:

ekzorchik@srv-bionic:~$ sudo apt-get install -y apache2

ekzorchik@srv-bionic:~$ sudo systemctl enable apache2

Synchronizing state of apache2.service with SysV service script with /lib/systemd/systemd-sysv-install.

Executing: /lib/systemd/systemd-sysv-install enable apache2

ekzorchik@srv-bionic:~$

ekzorchik@srv-bionic:~$ sudo a2enmod rewrite

ekzorchik@srv-bionic:~$ sudo rm -f /var/www/html/index.html

ekzorchik@srv-bionic:~$ echo "ServerName localhost" | sudo tee -a /etc/apache2/apache2.conf

Шаг №4: Устанавливаю сервис mysql, затем изменяю пароль на системную учетную запись root сервиса mysql:

ekzorchik@srv-bionic:~$ sudo apt install -y mariadb-server mariadb-client

ekzorchik@srv-bionic:~$ sudo mysql_secure_installation

Enter current password for root (enter for none): нажимаю клавишу Enter

Set root password? [Y/n] нажимаю клавишу Y

New password: указываю пароль, к примеру 712mbddr@, затем нажимаю клавишу Enter

Re-enter new password: указываю пароль, к примеру 712mbddr@, затем нажимаю клавишу Enter

Remove anonymous users? [Y/n] нажимаю клавишу Y

Disallow root login remotely? [Y/n] нажимаю клавишу Y

Remove test database and access to it? [Y/n] нажимаю клавишу Y

Reload privilege tables now? [Y/n] нажимаю клавишу Y

... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB

installation should now be secure.

Thanks for using MariaDB!

ekzorchik@srv-bionic:~$

ekzorchik@srv-bionic:~$ sudo mysql -u root -p712mbddr@ -e "use mysql;UPDATE mysql.user SET plugin = 'mysql_native_password' WHERE User = 'root';"

ekzorchik@srv-bionic:~$ sudo mysql -u root -p712mbddr@ -e "flush privileges;"

Проверяю, что, обратившись к сервису с пустым паролем получу ошибку подключения, а с назначенным паролем подключение будет успешным:

ekzorchik@srv-bionic:~$ sudo mysql -u root

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

ekzorchik@srv-bionic:~$ sudo mysql -u root -p712mbddr@ -e "quit

Шаг №5: Устанавливаю PHP (буду использовать версию php7.2 из дефолтных репозитариев):

ekzorchik@srv-bionic:~$ sudo apt install php7.2 libapache2-mod-php7.2 php7.2-common php7.2-gmp php7.2-curl php7.2-intl php7.2-mbstring php7.2-xmlrpc php7.2-mysql php7.2-gd php7.2-imap php7.2-ldap php-cas php7.2-bcmath php7.2-xml php7.2-cli php7.2-zip php7.2-sqlite3 -y

ekzorchik@srv-bionic:~$ sudo nano /etc/php/7.2/apache2/php.ini

file_uploads = On

allow_url_fopen = On

short_open_tag = On

memory_limit = 256M

upload_max_filesize = 100M

max_execution_time = 360

max_input_vars = 1500

date.timezone = Europe/Moscow

Это список включенных модулей:

ekzorchik@srv-bionic:~$ ls /etc/apache2/mods-enabled/

access_compat.load  authz_core.load  deflate.load  mime.load         php7.2.load      status.load

alias.conf          authz_host.load  dir.conf      mpm_prefork.conf  reqtimeout.conf

alias.load          authz_user.load  dir.load      mpm_prefork.load  reqtimeout.load

auth_basic.load     autoindex.conf   env.load      negotiation.conf  setenvif.conf

authn_core.load     autoindex.load   filter.load   negotiation.load  setenvif.load

authn_file.load     deflate.conf     mime.conf     php7.2.conf       status.conf

ekzorchik@srv-bionic:~$

Чтобы включить модуль:

sudo a2enmod php7.2

Чтобы выключить модуль:

sudo a2dismon php8.2

Текущая версия php в системе:

ekzorchik@srv-bionic:~$ php -v

PHP 7.2.24-0ubuntu0.18.04.16 (cli) (built: Jan 10 2023 15:47:23) ( NTS )

Copyright (c) 1997-2018 The PHP Group

Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies

with Zend OPcache v7.2.24-0ubuntu0.18.04.16, Copyright (c) 1999-2018, by Zend Technologies

ekzorchik@srv-bionic:~$

ekzorchik@srv-bionic:~$ sudo systemctl restart apache2

На заметку: Текущая версия php в системе может быть отличной от той которая используется Web-сервисом Apache2, делается это после установки репозитария:

ekzorchik@srv-bionic:~$ sudo apt-get install software-properties-common

ekzorchik@srv-bionic:~$ sudo add-apt-repository ppa:ondrej/php

ekzorchik@srv-bionic:~$ sudo apt-get install -y php8.2

ekzorchik@srv-bionic:~$ sudo a2enmod php8.2

Шаг №6: Устанавливаю NodeJS:

ekzorchik@srv-bionic:~$ sudo apt install -y curl dirmngr apt-transport-https lsb-release ca-certificates gcc g++ make nodejs wget

ekzorchik@srv-bionic:~$ curl -sL https://deb.nodesource.com/setup_10.x | sudo bash

Шаг №7: Устанавливаю FreePBX version 14.0:

Почему FreePBX 14, а потому что Asterisk 16 заявлен как стабильный в данной связке.

Таблица поддержки версий FreeBPX и Asterisk

 

ekzorchik@srv-bionic:~$ cd /tmp/

На заметку: Из документации к FreeBPX, под систему Ubuntu 18.04 Server нужен пакет FreePBX 14.0

Устанавливать FreePBX будет Ubuntu 18.04

 

 

 

 

 

 

 

 

 

ekzorchik@srv-bionic:/tmp$ sudo wget http://mirror.freepbx.org/modules/packages/freepbx/freepbx-14.0-latest.tgz

ekzorchik@srv-bionic:/tmp$ sudo tar zxf freepbx-14.0-latest.tgz

ekzorchik@srv-bionic:/tmp$ cd  freepbx/

ekzorchik@srv-bionic:/tmp/freepbx$ sudo ./start_asterisk start

STARTING ASTERISK

Asterisk is already running

ekzorchik@srv-bionic:/tmp/freepbx$

ekzorchik@srv-bionic:/tmp/freepbx$ sudo ./install -n --dbuser root --dbpass 712mbddr@

PHP Warning:  Declaration of FreePBX\Install\FreePBXHelpCommand::setCommand(FreePBX\Install\FreePBXInstallCommand $command) should be compatible with Symfony\Component\Console\Command\HelpCommand::setCommand(Symfony\Component\Console\Command\Command $command) in /tmp/freepbx/installlib/installhelpcommand.class.php on line 15

PEAR must be installed (requires Console/Getopt.php)

ekzorchik@srv-bionic:/tmp/freepbx$

ekzorchik@srv-bionic:/tmp/freepbx$ sudo apt-get install -y php-pear

ekzorchik@srv-bionic:/tmp/freepbx$ sudo ./install -n --dbuser root --dbpass 712mbddr@

на этот раз ошибок нет.

ekzorchik@srv-bionic:/tmp/freepbx$ cd ~

ekzorchik@srv-bionic:~$ sudo usermod -aG www-data asterisk

ekzorchik@srv-bionic:~$ sudo systemctl restart apache2

Шаг №8: Открываю в браузере (к примеру Google Chrome) вкладку где в качестве URL адреса указываю http://IP&DNS (http://172.35.35.9) системы Ubuntu 18.04 Server на которой разворачиваю выше связку Asterisk 16 + FreePBX 14.0, но увы опять все работает не с первого раза:

как видно URL трансформировался в http://172.35.35.9/admin/config.php

При обращении к URL FreePBX получаю ошибку HTTP Error 500

Смотрю логи Web-сервиса Apache2:

ekzorchik@srv-bionic:~$ sudo tail -f /var/log/apache2/error.log

[Fri Feb 17 10:59:56.222219 2023] [php7:warn] [pid 17665] [client 172.35.35.28:52768] PHP Warning:  session_regenerate_id(): Cannot regenerate session id - session is not active in /var/www/html/admin/config.php on line 72

[Fri Feb 17 10:59:56.222254 2023] [php7:warn] [pid 17665] [client 172.35.35.28:52768] PHP Warning:  session_start(): open(/var/lib/php/sessions/sess_tjqfoceq1q60u4qab3t17mvsmc, O_RDWR) failed: Permission denied (13) in /var/www/html/admin/config.php on line 73

[Fri Feb 17 10:59:56.222264 2023] [php7:warn] [pid 17665] [client 172.35.35.28:52768] PHP Warning:  session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/html/admin/config.php on line 73

[Fri Feb 17 10:59:56.222297 2023] [php7:warn] [pid 17665] [client 172.35.35.28:52768] PHP Warning:  include_once(/etc/freepbx.conf): failed to open stream: Permission denied in /var/www/html/admin/config.php on line 127

[Fri Feb 17 10:59:56.222310 2023] [php7:warn] [pid 17665] [client 172.35.35.28:52768] PHP Warning:  include_once(): Failed opening '/etc/freepbx.conf' for inclusion (include_path='.:/usr/share/php') in /var/www/html/admin/config.php on line 127

[Fri Feb 17 10:59:56.222348 2023] [php7:error] [pid 17665] [client 172.35.35.28:52768] PHP Fatal error:  Uncaught Error: Class 'FreePBX' not found in /var/www/html/admin/config.php:137\nStack trace:\n#0 {main}\n  thrown in /var/www/html/admin/config.php on line 137

Проверяю права

ekzorchik@srv-bionic:~$ sudo fwconsole chown

Taking too long? Customize the chown command, See http://wiki.freepbx.org/display/FOP/FreePBX+Chown+Conf

Setting Permissions...

Setting base permissions...Done in 1 seconds

Setting specific permissions...

23710 [============================]

Finished setting permissions

ekzorchik@srv-bionic:~$

Выявил, что нет доступа к файлам сессии, нужно смотреть права на каталог /var/lib/php/sessions кто владелец и от кого пишется и читается этот каталог. И с какими правами создаются файлы сессий. Тут больше проблема Web чем Asterisk

ekzorchik@srv-bionic:~$ sudo sed -i 's/www-data/asterisk/' /etc/apache2/envvars

ekzorchik@srv-bionic:~$ sudo systemctl restart apache2

После на странице с ошибкой HTTP ERROR 500 нажал клавишу F5 и Web-интерфейс FreePBX отобразился:

Поправив права доступа Web-страница настройки FreePBX отобразилась

Заполняю поля:

  • Username: ekzorchik
  • Password: 712mbddr@
  • Confirm Password: 712mbddr@
  • Notifications Email address: support@ekzorchik.com
  • System Identifier: VoIP Server
  • Automatic Module Updates: Disabled
  • Automatic Module Security Updates: Enabled
  • Send Security Emails For Unsigned Modules: Enabled
  • Check for Updates every: Sunday (Between 8pm and Midnight)

и нажимаю Setup System, после вижу страницу (http://172.35.35.9/admin/config.php)

Так выглядит страница при обращении к FreePBX

Нажимаю на "FreePBX Administration" – запрашиваются данные авторизации, указываю те что обозначил выше:

  • Username: ekzorchik
  • Password: 712mbddr@

и нажимаю Continue, и вот

Зайдя в FreePBX Administration и нажав Apply Config для применения настроек - ничего не происходит

Оставляю по на Английском и нажимаю Submit - Apply Config, но и еще раз как всегда:

exit: 1

Unable to continue. The each() function is deprecated. This message will be suppressed on further calls in /usr/share/php/Console/Getopt.php on line 135

#0 [internal function]: Whoops\Run->handleError(8192, 'The each() func...', '/usr/share/php/...', 135, Array)

#1 /usr/share/php/Console/Getopt.php(135): each(Array)

#2 /usr/share/php/Console/Getopt.php(91): Console_Getopt::doGetopt(1, Array, 'h?u:p:', Array, false)

#3 /var/lib/asterisk/bin/retrieve_conf(453): Console_Getopt::getopt(Array, 'h?u:p:', Array)

#4 {main}

ekzorchik@srv-bionic:~$ sudo nano +135 /usr/share/php/Console/Getopt.php

/*reset($args);

while (list($i, $arg) = each($args)) {

*/

for ($i = 0; $i < count($args); $i++) {

$arg = $args[$i];

ekzorchik@srv-bionic:~$ sudo systemctl restart apache2

А после на странице снова нажимаю Apply Config и изменения применяются.

и вот теперь у меня успешно установленная Web-оснастка FreePBX 14.0 на Asterisk 16: http://IP&DNS - user&pass - Dashboard

Все ошибки поправлены, так выглядит панель FreePBX

Пока на этом заметку сделаю завершенной, а продолжу в последующих. На этом у меня все, с уважением автор блога Олло Александр aka ekzorchik.

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