Loading
Обновлено: 14.01.2023
Опубликовано: 05.11.2020
Используемые термины: Asterisk, FreePBX, CentOS, NGINX.
Самый быстрый способ установить Asterisk + FreePBX — использовать ISO-образ FreePBX Distro. Но мы рассмотрим установку данной сборки на Linux CentOS 8 «с нуля».
Данная инструкция написана на примере установки Asterisk 16 LTS и FreePBX 15 — хоть на момент написания этих строк, последняя версия астериска была 18-я, FreePBX 15 поддерживает, максимум, Asterisk 17. В качестве веб-сервера для FreePBX мы будем использовать NGINX.
Готовим систему
Настраиваем компоненты веб-сервера
СУБД MariaDB
NGINX
PHP
Настройка связки PHP с NGINX
NodeJS
Устанавливаем сервер телефонии
Запускаем портал FreePBX
Настройка CDR
Возможные ошибки
Читайте также
Подготовка системы
Для корректной работы сервера необходимо настроить системное время, открыть порты в брандмауэре и отключить SELinux. Также мы установим несколько пакетов и создадим учетную запись, от которой будет работать Asterisk.
1. Время
Задаем часовой пояс:
timedatectl set-timezone Europe/Moscow
* в данном примере московское время. Список всех зон можно посмотреть командой timedatectl list-timezones.
Устанавливаем сервис для синхронизации времени:
yum install chrony
И запускаем его с разрешением автозапуска:
systemctl enable chronyd —now
2. Настройка firewall
Мы должны открыть порты:
- 5060 — SIP.
- 5061 — SIP over TLS.
- 80 — http.
- 443 — https.
- 10000-20000 — диапазон для динамических портов.
В CentOS для управления брандмауэром может использоваться firewalld или iptables. Рассмотрим настройку и того, и другого.
Firewalld
Разрешаем порты для работы asterisk:
firewall-cmd —permanent —add-port={5060,5061}/{tcp,udp}
firewall-cmd —permanent —service=asterisk —add-port=10000-20000/udp
… и веб-сервера NGINX:
firewall-cmd —permanent —add-service={http,https}
Для применения настроек перезапускаем правила:
firewall-cmd —reload
Iptables
Открываем порты для астериска и веб-сервера:
iptables -I INPUT -p tcp —match multiport —dports 5060,5061 -j ACCEPT
iptables -I INPUT -p udp —match multiport —dports 5060,5061 -j ACCEPT
iptables -I INPUT -p tcp —match multiport —dports 80,443 -j ACCEPT
iptables -I INPUT -p udp —match multiport —dports 80,443 -j ACCEPT
iptables -I INPUT -p udp —dport 10000:20000 -j ACCEPT
Для сохранения правил установим:
yum install iptables-services
И разрешим автозапуск сервиса:
systemctl enable iptables
Теперь сохраняем сами правила:
service iptables save
* правила будут сохранены в файл /etc/sysconfig/iptables.
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:
Веб-сервер установлен.
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 и всех компонентах:
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 в качестве демона:
systemctl enable asterisk
systemctl start asterisk
Установка FreePBX
Возвращаемся в домашнюю папку пользователя:
cd ~
Установим пакеты:
yum install sox mpg123
* где:
- sox — консольная утилита для преобразования аудиофайлов из одного формата в другой.
- mpg123 — аудиопроигрыватель/декодер реального времени.
Скачиваем портал для управления астериском:
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 и 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 настроен.
CDR и подключение к базе данных
В моем случае, не работало ведение CDR, а при вводе в консоли asterisk команды:
> odbc show
… я увидел:
ODBC DSN Settings
——————
Name: asteriskcdrdb
DSN: MySQL-asteriskcdrdb
Last fail connection attempt: 2021-05-08 10:25:52
Number of active connections: 0 (out of 5)
Logging: Disabled
То есть, нет подключения к базе данных asteriskcdrdb. А при попытке подключиться к нужному DSN из командной строки:
isql -v MySQL-asteriskcdrdb
… я получил ошибку:
[01000][unixODBC][Driver Manager]Can’t open lib ‘/usr/lib64/libmyodbc5.so’ : file not found
То есть, проблема в отсутствии необходимой бибилиотеки при подключении к базе данных.
Нам необходимо выполнить 2 действия:
- Установить коннектор ODBC.
- Изменить драйвер для подключения к СУБД в odbc.ini.
Так как в данной инструкции мы используем в качестве севера баз данных MariaDB, нам необходим соответствующий коннектор. Для его установки воспользуемся инструкцией Настройка в Linux подключения к MariaDB из PHP с помощью ODBC.
После открываем файл:
vi /etc/odbc.ini
Задаем новое значение для параметра driver:
driver=MariaDB
* список доступных драйвером можно посмотреть в файле /etc/odbcinst.ini.
Перезапускаем asterisk:
systemctl restart asterisk
После можно проверить, что Asterisk подключился к базе:
> odbc show
Мы должны увидеть:
ODBC DSN Settings
——————
Name: asteriskcdrdb
DSN: MySQL-asteriskcdrdb
Number of active connections: 1 (out of 5)
Logging: Disabled
Возможные проблемы
Рассмотрим решение некоторых проблем, с которыми мы можем столкнуться в процессе настройки.
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
Всем доброго времени суток! Установил все по мануалу, на стадии компиляции ни каких проблем не возникло. Но авторизоваться http://мой-ip/admin я не смог. Сервер отдает 500 ошибку.
Судя по логам, проблема в сессии.
PHP Fatal error: Class 'FreePBX' not found in /var/www/html/admin/config.php on line 126
126 строка —
$sessionTimeOut = FreePBX::Config()→get('SESSION_TIMEOUT');
Что говорят логи:
[pid 1171] [client 172.16.12.26:55847] PHP Warning: Unknown: open(/var/lib/php/sessions/sess_h1behae5j0jdcar1uv1p9grbt6, O_RDWR) failed: Permission denied (13) in Unknown on line 0
[pid 1171] [client 172.16.12.26:55847] PHP Warning: Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/var/lib/php/sessions$
Проблема в делегации прав? Установил права на каталог sessions 777, но результата это не дало. (хотя, дело не в этом).
Подскажите, пожалуйста, от чего отталкиваться? Проблема с правами или в другом?
Всем за ранее благодарен за ответ!
Go to freepbx
500 Internal Server Error after update
My freebpx install indicated there were 21 updates where at least one was a security fix. Using module admin after downloading them then clicking «Return» I received the 500 internal server error.
This effectively puts administration out of reach.
UCP appears to work.
Any ideas on what caused it and how to overcome it?
<hr>
EDIT: This is a work around though I don’t know the impact of it. Prior to the update these entries did not exist. I also checked my home setup and the same issue cropped up.
I edited the /var/www/html/admin/.htaccess file and commented out the following lines.
RewriteEngine on
RewriteRule .git/ — [F]
RewriteRule libraries — [F]
RewriteRule views — [F]
RewriteRule helpers — [F]
RewriteRule i18n — [F]
RewriteRule node — [F]
Ответ на:
комментарий
от upcFrost 15.09.17 21:50:38 MSK
Ответ на:
комментарий
от upcFrost 15.09.17 21:50:38 MSK
В одной из строчек жалуется на:
PHP Fatal error: Class ‘FreePBX’ not found in /var/www/html/admin/config.php on line 110
Та самая строчка:
$d = FreePBX::View()->setAdminLocales();
А так же:
Failed opening ‘/etc/freepbx.conf’ for inclusion (include_path=’.:/usr/share/php:/usr/share/pear’) in /var/www/html/admin/config.php on line 100
Та самая строчка:
include_once '/etc/freepbx.conf';
Сам /etc/freepbx.conf:
<?php
$amp_conf['AMPDBUSER'] = 'freepbxuser';
$amp_conf['AMPDBPASS'] = '6242c4f0361ca4189b261f6b5b8bf93d';
$amp_conf['AMPDBHOST'] = 'xxx.xxx.xxx.xxx';
$amp_conf['AMPDBNAME'] = 'asterisk';
$amp_conf['AMPDBENGINE'] = 'mysql';
$amp_conf['datasource'] = ''; //for sqlite3
require_once('/var/www/html/admin/bootstrap.php');
?>
CryNet ★★★★★
(16.09.17 01:30:20 MSK)
- Показать ответ
- Ссылка
Ответ на:
комментарий
от CryNet 16.09.17 01:30:20 MSK
Там еще есть Operation not permitted. В любом случае — проверь пути и разрешения, сделай amportal Chown
upcFrost ★★★★★
(16.09.17 11:06:07 MSK)
- Показать ответ
- Ссылка
Ответ на:
комментарий
от upcFrost 16.09.17 11:06:07 MSK
root@debian:~# amportal Chown
Please wait...
PHP Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [2003] Can't connect to MySQL server on 'xxx.xxx.xxx.xxx' (4)' in /var/www/html/admin/libraries/BMO/Database.class.php:149
Stack trace:
#0 /var/www/html/admin/libraries/BMO/Database.class.php(149): PDO->__construct('mysql:host=94.8...', 'freepbxuser', '6242c4f0361ca41...', Array)
#1 /var/www/html/admin/libraries/BMO/FreePBX.class.php(69): FreePBXDatabase->__construct(Object(FreePBX))
#2 /var/www/html/admin/bootstrap.php(151): FreePBX->__construct(Array)
#3 /etc/freepbx.conf(9): require_once('/var/www/html/a...')
#4 Command line code(5): include_once('/etc/freepbx.co...')
#5 {main}
Next exception 'Exception' with message 'SQLSTATE[HY000] [2003] Can't connect to MySQL server on 'xxx.xxx.xxx.xxx' (4)::SQLSTATE[HY000] [2003] Can't connect to MySQL server on 'xxx.xxx.xxx.xxx' (4)' in /var/www/html/admin/libraries/utility.functions.php:204
Stack trace:
#0 /var/www/html/admin/libraries/BMO/Database.class.php(154): die_freepbx('SQLSTATE[HY000]...', Object(PDOEx in /var/www/html/admin/libraries/utility.functions.php on line 204
/usr/sbin/amportal: line 44: WhoopsExceptionErrorException:: command not found
/var/lib/asterisk/bin/freepbx_engine: line 119: Exception:: command not found
**** WARNING: ERROR IN CONFIGURATION ****
astrundir in '/etc/asterisk' is set to but the directory
does not exist. Attempting to create it with:
'mkdir -p '
mkdir: missing operand
Try 'mkdir --help' for more information.
**** ERROR: COULD NOT CREATE ****
Attempt to execute 'mkdir -p ' failed with an exit code of 1
You must create this directory and the try again.
CryNet ★★★★★
(16.09.17 15:32:20 MSK)
Последнее исправление: CryNet 16.09.17 15:34:57 MSK
(всего
исправлений: 2)
- Показать ответ
- Ссылка
Ответ на:
комментарий
от CryNet 16.09.17 15:32:20 MSK
Ответ на:
комментарий
от upcFrost 18.09.17 16:08:17 MSK
Ответ на:
комментарий
от CryNet 18.09.17 19:50:30 MSK
а по внешним признакам у тебя оно почти не поставилось. директория /etc/asterisk есть?
upcFrost ★★★★★
(19.09.17 12:54:44 MSK)
- Показать ответ
- Ссылка
Ответ на:
комментарий
от upcFrost 19.09.17 12:54:44 MSK
Есть. Ладно. Попробую еще раз установить все заново. Думаю, может freeswitch поставить, если не получится с астером.
CryNet ★★★★★
(20.09.17 19:51:00 MSK)
- Ссылка
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.