Установка и настройка Asterisk + FreePBX на CentOS 8
После установки на сервер CentOS 8 (Minimal) (x86_64) 4Gb RAM, 4 CPU, 20Gb SSD, приступаем к подготовке сервера.
Данная инструкция написана на примере установки Asterisk 16 LTS и FreePBX 15 — хоть на момент написания этих строк, последняя версия астериска была 18-я, FreePBX 15 поддерживает, максимум, Asterisk 17. В качестве веб-сервера для FreePBX мы будем использовать NGINX.
Подготовка сервера
Для корректной работы сервера необходимо настроить системное время, открыть порты в брандмауэре и отключить SELinux. Также мы установим несколько пакетов и создадим учетную запись, от которой будет работать Asterisk.
Настройка Времени
Задаем часовой пояс:
timedatectl set-timezone Europe/Moscow
* в данном примере московское время. Список всех зон можно посмотреть командой timedatectl list-timezones.
Устанавливаем сервис для синхронизации времени:
dnf install chronyd -y systemctl enable chronyd --now
Обновляем систему:
dnf update -y dnf upgrade -y
Настройка 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 --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.
Отключение SELinux.
setenforce 0 sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config
Установка пакетов
Выполним установку пакетов:
dnf install wget tar glibc-langpack-ru -y
* где:
wget — утилита для загрузки файлов по сети.
tar — для распаковки архивов.
glibc-langpack-ru — русская локаль. Она нужна, чтобы у нас была возможность выбрать русский интерфейс во FreePBX.
Создание пользователя
Нам нужен общий пользователь, от которого будет работать Asterisk и веб-сервер. Это необходимо, чтобы веб-сервер имел доступ к каталогам астериска.
Создаем пользователя командой:
useradd asterisk -m
Настройка веб-сервера
Для работы FreePBX нам необходим веб-сервер и СУБД. В нашем примере мы установим связку NGINX + PHP + MariaDB + NodeJS.
Установка MariaDB
Подключение актуального репозитория: В примерах выше мы установили СУБД из репозиториев операционных систем. А значит — нет гарантии, что будет установлена последняя версия MariaDB. Для решения задачи мы можем подключить официальный репозиторий самого разработчика.
Генерируем репозиторий mariadb.repo.
Скачиваем скрипт из оф.сайта для генерации репозитория mariadb.repo и даем ему право на выполнение.
cd ~ wget https://downloads.mariadb.com/MariaDB/mariadb_repo_setup chmod +x mariadb_repo_setup
После предоставления необходимых прав, нужно запустить этот скрипт и он уже сгенерирует репозиторий.
./mariadb_repo_setup
Итак, после выполнения скрипта файл mariadb.repo будет сгенерирован в директории /etc/yum.repos.d.
Заходим и смотрим, что он там намутил...
nano /etc/yum.repos.d/mariadb.repo
После генерации репозитория теперь запускаем установку самой MariaDB:
dnf install mariadb mariadb-server --allowerasing
- для установки mysql выполняем команду dnf install mysql
Чтобы, проверить какие пакеты установились нужно использовать команду:
yum list installed | grep mariadb
Разрешаем автозапуск и запускаем СУБД:
systemctl enable mariadb --now
- для работы с mysql меняем mariadb на mysql.
Проверьте состояние службы MariaDB, выполнив следующую команду.
systemctl status mariadb
Если у вас включен брандмауэр, тогда нужно добавить MariaDB в правило брандмауэра. Для этого выполните следующую команду.
firewall-cmd --zone=public --add-port=3306/tcp --permanent firewall-cmd --reload
Сразу создаем пароль для учетной записи root:
mysqladmin -u root password
Защита сервера MariaDB на CentOS 8
В качестве последнего шага нам нужно запустить безопасный сценарий установки MariaDB. Этот скрипт позаботится о пароле root, установки привилегий, удалении тестовых баз данных, запрете входа в систему с root правами.
mysql_secure_installation
Далее вводим пароль который создавали на предыдущем шаге и везде отвечаем: Y
[root@webserver ~]# mysql_secure_installation NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY! In order to log into MariaDB to secure it, we'll need the current password for the root user. If you've just installed MariaDB, and you haven't set the root password yet, the password will be blank, so you should just press enter here. Enter current password for root (enter for none): OK, successfully used password, moving on... Setting the root password ensures that nobody can log into the MariaDB root user without the proper authorisation. You already have a root password set, so you can safely answer 'n'. Change the root password? [Y/n] n ... skipping. By default, a MariaDB installation has an anonymous user, allowing anyone to log into MariaDB without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? [Y/n] Y ... Success! Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? [Y/n] Y ... Success! By default, MariaDB comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? [Y/n] Y - Dropping test database... ... Success! - Removing privileges on test database... ... Success! Reloading the privilege tables will ensure that all changes made so far will take effect immediately. 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!
Установка NGINX
Для установки самой свежей стабильной версии nginx создаем конфиг:
nano /etc/yum.repos.d/nginx.repo
Есть 2 версии nginx. Stable version (Стабильная) и Mainline version (Основная). Основная версия — это последняя версия nginx с новыми функционалом. Стабильная версия — это версия, которая нацелена на стабильность и безопасность. Новый функционал не добавляется.
[nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/centos/8/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true [nginx-mainline] name=nginx mainline repo baseurl=http://nginx.org/packages/mainline/centos/8/$basearch/ gpgcheck=1 enabled=0 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true
Можно прописать в файл все два репозитория. Если нужна стабильная версия, тогда ее нужно указать программе dnf, что бы она использовала репозиторий стабильной версии.
dnf config-manager --set-enabled nginx-stable
Устанавливаем NGINX:
dnf install nginx -y
Внесем небольшую корректировку в файл nginx.conf:
nano /etc/nginx/nginx.conf
http { ... server_names_hash_bucket_size 64; ... client_max_body_size 128M; (Добавляем эту строку. Данный параметр разрешает загрузку файлов размером 128 Мб.) .... }
* на практике, может встретиться ошибка could not build server_names_hash, you should increase server_names_hash_bucket_size: 32. Она возникает при большом количестве виртуальных серверов или если один из них будет иметь длинное название. Данная строка в конфиге исправит ситуацию.
Разрешаем автозапуск сервиса и запустим его:
systemctl enable nginx --now
Проверим, что веб-сервер работает. Для этого открываем браузер на другом компьютере, который находится в одной сети и вводим в адресной строке IP-адрес сервера. В итоге мы должны увидеть заголовок «Welcome to nginx!»:
- обратите внимание, что данное приветствие может иметь и другой вид.
PHP и компоненты
Добавляем репозиторий:
dnf -y install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
Теперь вы можете перечислить модули PHP и посмотреть, был ли добавлен PHP 8.2
dnf module list php
После этого теперь вы можете сбросить модуль и включить PHP 8.2:
dnf module reset php dnf module install php:remi-8.2 dnf module enable php:remi-8.2
И устанавливаем php и PHP-FPM версии 8.2:
dnf install php php-fpm -y
Проверяем:
php -r "phpinfo();" | grep "PHP Version"
Установим наиболее популярные модули, которые могут пригодится в процессе эксплуатации веб сервера.
dnf install php-{bcmath,gd,json,mbstring,mysqlnd,pear,snmp,zip} -y
В процессе установки php на CentOS устанавливается apache, но нам он не нужен — вводим команду для запрета его автозапуска:
systemctl disable httpd
Открываем настройки для php:
nano /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:
nano /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. Для этого откроем конфигурационный файл:
nano /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
Создаем index.php в каталоге сайта по умолчанию со следующим содержимым:
nano /usr/share/nginx/html/index.php
<?php phpinfo(); ?>
Открываем в браузере IP-адрес нашего сервера. Теперь мы должны увидеть сводную информацию по PHP и его настройкам, например:
NodeJS
Последний компонент для нашего веб-сервера — NodeJS. Для его установки выполняем команду:
dnf install nodejs npm -y
Убедиться в установке можно командой просмотра версии:
node --version
Наш веб-сервер готов к работе.
Установка Asterisk
Мы будем устанавливать 16-ю версию Asterisk. На странице загрузки мы можем посмотреть все версии АТС и ссылки на них: https://www.asterisk.org/downloads/asterisk/all-asterisk-versions/
Сначала установим пакеты, необходимые для сборки:
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, от которого должен запуститься наш сервер телефонии. Для этого откроем файл:
nano /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 -y
* где:
- 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
Установим компонент pm2:
fwconsole ma install pm2
Обновим все компоненты:
fwconsole ma updateall
Перезапустим конфигурацию:
fwconsole reload --verbose
Открываем браузер и заходим по адресу http:<IP-адрес сервера> — должна открываться страница конфигурирования FreePBX. Задаем настройки:
* достаточно указать логин и пароль для пользователя, под которым мы будем заходить в панель управления FreePBX и email адрес.
После входим в панель администратора под созданной учетной записью. Система нас запросит региональные настройки:
Теперь открываем конфигурационный файл:
nano /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:
asterisk -r
... команды:
> odbc show
... я увидел:
ODBC DSN Settings ----------------- Name: asteriskcdrdb DSN: MySQL-asteriskcdrdb Last fail connection attempt: 2023-09-27 11:28: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 действия:
1. Установить коннектор ODBC.
2. Изменить драйвер для подключения к СУБД в odbc.ini.
Так как в данной инструкции мы используем в качестве севера баз данных MariaDB, нам необходим соответствующий коннектор. Ниже приведена инструкция установки и подключения к MariaDB из PHP с помощью ODBC:
ODBC connector
Для начала мы должны установить ODBC connector. Нам понадобиться скачать на наш сервер архив, поэтому сначала инсталлируем wget.
yum install wget -y
После установки wget перейдем в каталог /tmp:
cd /tmp
Открываем браузер и заходим на страницу загрузки коннекторов MariaDB и выбираем ODBC connector, а также нашу операционную систему (https://mariadb.com/downloads/connectors/connectors-data-access/odbc-connector/), например:
* в данном случае мы загрузим коннектор для CentOS 8.
Ниже на этой же страницы мы увидим ссылку на скачивание нужного нам коннектора. Копируем данную ссылку. С помощью wget и скопированной ссылки загружаем на сервер коннектор:
wget https://dlm.mariadb.com/1936441/Connectors/odbc/connector-odbc-3.1.15/mariadb-connector-odbc-3.1.15-centos8-amd64.tar.gz
Распаковываем его:
tar zxvf mariadb-connector-odbc-*.tar.gz
И копируем библиотеки в каталог /usr/lib64:
cp mariadb-connector-odbc-*-amd64/lib64/mariadb/lib* /usr/lib64/
После скачанный архив и распакованный каталог можно удалить:
rm -rf mariadb-connector-odbc-*
Установка и подготовка к работе СУБД
Для проверки настройки нам нужен сервер баз данных. Если его нет, то установим mariadb-server на тот же сервер, где и развернули ODBC. dnf install mariadb mariadb-server --allowerasing
В нашем случае мы его уже установили выше.
Заходим в консоль SQL:
mysql -uroot -p
Создаем новую базу данных:
> CREATE DATABASE my_db DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
* для наших тестов мы создали базу с названием my_db.
Дадим права на подключение и работу с созданной базой данных:
> GRANT ALL PRIVILEGES ON my_db.* TO 'odbc_user'@'localhost' IDENTIFIED BY 'odbc_password';
* данной командой мы разрешили доступ к базе my_db пользователю odbc_user, который будет подключаться с локального компьютера и паролем odbc_password.
Подключаемся к созданной базе данных:
> use my_db;
Создаем простенькую таблицу:
> CREATE TABLE IF NOT EXISTS `users` ( `id` int(10) unsigned NOT NULL auto_increment, `name` varchar(512) NOT NULL, `rights` varchar(64) NOT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
* наша созданная таблица будет состоять из 3 столбцов — id, name и rights.
Добавим 3 строки в нашу таблицу:
> INSERT INTO users (`name`, `rights`) VALUES ('Павел', 'admin'), ('Инна', 'superuser'), ('Денис' ,'operator');
Готово. Теперь выходим из sql-оболочки:
> quit
Установка и настройка ODBC
Устанавливаем сам ODBC.
yum install unixODBC -y
Открываем конфигурационный файл:
nano /etc/odbcinst.ini
Проверяем наличие следующей записи (если ее нет, добавляем):
... [MariaDB] Description = ODBC for MariaDB Driver = /usr/lib/libmaodbc.so Driver64 = /usr/lib64/libmaodbc.so FileUsage = 1 ...
* в данном примере описано подключение к СУБД с драйвером MariaDB и путем до файла с библиотекой (отдельно для 32- и 64-разрядной версии).
Открываем файл:
nano /etc/odbc.ini
Добавляем DSN для подключения к нашему серверу и базе, которую создавали на предыдущем этапе:
[ODBC] Driver = MariaDB USER = odbc_user PASSWORD = odbc_password Server = 127.0.0.1 Database = my_db Port = 3306
* где:
ODBC — произвольное название для нашего подключения.
Driver — драйвер, который мы будем использовать. Его мы описали в файле /etc/odbcinst.ini.
USER — пользователь, под которым будем подключаться к базе. Используем данные для ранее созданной учетной записи в mariadb.
PASSWORD — пароль для созданного ранее пользователя, под которым мы будем подключаться к базе.
Server — сервер баз данных. В нашем примере локальный сервер.
Database — имя созданной базы данных.
Port — порт, на котором слушает сервер. 3306 используется по умолчанию для MariaDB.
Пробуем подключиться к базе с использованием ODBC:
isql -v ODBC
* где ODBC — название для подключения, которое мы задали на предыдущем шаге.
Мы должны увидеть командную строку для ввода команд sql — пробуем получить данные из нашей таблицы users:
> select * from users;
Мы должны увидеть что-то на подобие:
+----+--------------+----------------+ | id | name | rights | +----+--------------+----------------+ | 1 | Павел | admin | | 2 | Инна | superuser | | 3 | Денис | operator | +----+--------------+----------------+
Можно выходить из sql-оболочки:
> quit
Настройка php
Теперь настроим подключение из php. Мы рассмотрим 2 способа подключения — с помощью odbc_connect и PDO.
Предварительно, создадим каталог, в который разместим тестовый скрипт для подключения к базе:
mkdir -p /var/www/php
odbc_connect
Ставим расширение php-odbc (а также сам php, если его нет на сервере).
yum install php php-odbc -y
После установки создадим скрипт для проверки подключения:
nano /var/www/php/db.php
<?php $driver = "DRIVER=MariaDB"; $server = "127.0.0.1"; $db_name = "my_db"; $port = "3306"; $user = "odbc_user"; $password = "odbc_password"; $ocon = odbc_connect("{$driver};Server={$server};Database={$db_name};Port={$port};String Types=Unicode", $user, $password); $result = odbc_exec($ocon, "SELECT * FROM users LIMIT 10"); while ($mass = odbc_fetch_array ($result)) { print_r($mass); } odbc_close($ocon); ?>
* в данном листинге мы задаем параметры для подключения к локальному серверу (127.0.0.1) с учетными данными, которые создали при настройке СУБД. После мы выполняем выборку и выводим результат на экран.
Или же мы можем сократить наш скрипт. Ранее для проверки мы создали ODBC DSN в файле /etc/odbc.ini. PHP с помощью odbc_connect может ссылаться для соединения на него. Итого, получаем:
<?php $ocon = odbc_connect("ODBC", "odbc_user", "odbc_password"); $result = odbc_exec($ocon, "SELECT * FROM users LIMIT 10"); while ($mass = odbc_fetch_array ($result)) { print_r($mass); } odbc_close($ocon); ?>
* обратите внимание, что мы передаем функции odbc_connect только 3 параметра для подключения:
ODBC — название для нашего DSN. odbc_user — имя пользователя для подключения к базе данных. odbc_password — пароль для подключения к базе.
PDO
Ставим расширение php-pdo (а также сам php, если его нет на сервере).
yum install php php-pdo
После установки создадим скрипт для проверки подключения:
nano /var/www/php/db.php
<?php $pcon = new PDO("odbc:Driver=MariaDB;Server=127.0.0.1;Database=my_db;","odbc_user","odbc_password"); try { $result = $pcon->query("SELECT * FROM users LIMIT 10"); $mass = $result->fetchAll(PDO::FETCH_ASSOC); print_r($mass); } catch (Exception $e){ throw new PDOException(var_export($pcon->errorInfo(),true)); } ?>
* в данном листинге мы задаем параметры для подключения к локальному серверу (127.0.0.1) с учетными данными, которые создали при настройке СУБД. После мы выполняем выборку и выводим результат на экран.
Или же мы можем сократить наш скрипт. Ранее для проверки мы создали ODBC DSN в файле /etc/odbc.ini. PHP с помощью PDO может ссылаться для соединения на него. Итого, получаем:
<?php $pcon = new PDO("odbc:ODBC","odbc_user","odbc_password"); try { $result = $pcon->query("SELECT * FROM users LIMIT 10"); $mass = $result->fetchAll(PDO::FETCH_ASSOC); print_r($mass); } catch (Exception $e){ throw new PDOException(var_export($pcon->errorInfo(),true)); } ?>
* обратите внимание, что мы передаем функции PDO только 3 параметра для подключения:
odbc:ODBC — способ соединения с базой и название для нашего DSN.
odbc_user — имя пользователя для подключения к базе данных.
odbc_password — пароль для подключения к базе.
Проверка запроса
После того, как мы создали скрипт проверки любым из вышеописанных способов, запускаем его на исполнение:
php /var/www/php/db.php
Мы должны получить следующий результат:
Array ( [id] => 1 [name] => Павел [rights] => admin ) Array ( [id] => 2 [name] => Инна [rights] => superuser ) Array ( [id] => 3 [name] => Денис [rights] => operator )
Подключение к MariaDB с помощью ODBC настроено.
После открываем файл:
nano /etc/odbc.ini
Задаем новое значение для параметра driver:
driver=MariaDB
* список доступных драйвером можно посмотреть в файле /etc/odbcinst.ini.
Перезапускаем asterisk:
systemctl restart asterisk
После можно проверить, что Asterisk подключился к базе:
asterisk -r > odbc show
Мы должны увидеть:
ODBC DSN Settings ----------------- Name: asteriskcdrdb DSN: MySQL-asteriskcdrdb Number of active connections: 1 (out of 5) Logging: Disabled
Возможные проблемы
Рассмотрим решение некоторых проблем, с которыми мы можем столкнуться в процессе настройки.
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.
Ошибка 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:
nano /etc/opt/remi/php56/php.ini
Правим значения для следующих опций:
upload_max_filesize = 128M ... post_max_size = 128M ... date.timezone = "Europe/Moscow" ... memory_limit = 512M
Открываем настройки php-fpm:
nano /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:
nano /etc/nginx/nginx.conf
Для опции fastcgi_pass задаем значение:
... location ~ \.php$ { ... fastcgi_pass unix:/var/opt/remi/php56/run/php-fpm/www.sock; ...
А также:
nano /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) отключить отображение ошибки. Для этого открываем файл:
nano /etc/freepbx.conf
И добавляем строку:
... $bootstrap_settings['freepbx_error_handler'] = false; ...
Однако, у меня данный способ не дал положительного результата. Страница FreePBX открылась, но с ошибкой «Can Not Connect to Asterisk», а сервис fwconsole при запуске выдавал ошибку. В итоге, самый правильный вариант — использовать официально поддерживаемую версию PHP.