Моя цель на сегодня: Развернуть 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
заявлен как стабильный в данной связке.
ekzorchik@srv-bionic:~$ cd /tmp/
На заметку: Из документации к FreeBPX
, под систему Ubuntu 18.04 Server
нужен пакет FreePBX 14.0
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
Смотрю логи 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
отобразился:
Заполняю поля:
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 Administration"
– запрашиваются данные авторизации, указываю те что обозначил выше:
Username: ekzorchik
Password: 712mbddr@
и нажимаю Continue
, и вот
Оставляю по на Английском и нажимаю 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
Пока на этом заметку сделаю завершенной, а продолжу в последующих. На этом у меня все, с уважением автор блога Олло Александр aka ekzorchik.