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 --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
Для сохранения правил установим:
dnf install iptables-services
И разрешим автозапуск сервиса:
systemctl enable iptables
Теперь сохраняем сами правила:
service iptables save
* правила будут сохранены в файл /etc/sysconfig/iptables.
Настоятельно рекомендую сменить порты SIP и SIPS, ломать вас будут пытаться на стандартных портах. Также, если сервер смотрит в инет напрямую, ни в коем случае не открывать порты http и https снаружи. Соответственно на firewall открываем порты, на которые будем менять(для SIP и SIPS). Проброс порта через nat со сменой (входящий не стандарт, перенаправление на 5060) приводит к обрыву соединения через 24 секунды примерно. О том, как поменять порты ссылка в конце статьи 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:
Стартовая страница NGINX
Веб-сервер установлен.
PHP Установка РНР 7.4 на CentOS 9 По умолчанию ставит 8.1, на нее не встает FreePBX!! Как понял я вырезана какая-то функция, используемая установщиком.
dnf install php php-fpm php-bcmath php-gd php-json php-mbstring php-mysqlnd php-pear php-snmp php-zip
настройки для php:
sed -i "s/upload_max_filesize = .*/upload_max_filesize = 128M/" /etc/php.ini
sed -i "s/post_max_size = .*/post_max_size = 128M/" /etc/php.ini
sed -i "s/memory_limit = .*/memory_limit = 512M/" /etc/php.ini
И установим Time zone
vi /etc/php.ini
date.timezone = "Europe/Moscow"
*где: 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
Но на CentOS 9 этого репозитория нет, и дальше все собирается и без него...
После скачиваем Asterisk:
wget https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20-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.
Чтобы правильно сконфигурировать с поддержкой SRTP вводим:
yum install libsrtp libsrtp-devel
./configure --libdir=/usr/lib64 --with-crypto --with-ssl=ssl --with-srtp
Мы должны увидеть:
...
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
В разделе «Add-ons» выберите «chan_ooh323» и «format_mp3»
В разделе «Core Sound Packages» выберите необходимые аудиопакеты (опционально)
В разделе «Music On Hold» выберите нужные форматы музыки на удержании (опционально)
В разделе «Extra Sound Packages» выберите дополнительные аудиопакеты (опционально)
В разделе «Applications» выберите «app_macro» (в — Deprecated —)
включим поддержку SRTP
В разделе Resource Modules включить установку модуля res_srtp
Затем нажмите save and exit
В версии 20.1 нет выбора аудиопакетов, а res_srtp оказался включен по умолчанию. В 19.8 аудиопакеты есть, но SRTP не включается. Собранный с ним asterisk не может загрузить этот модуль и падает через несколько секунд Теперь можно запустить сборку астериска:
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 +
+ +
...
Устанавливаем скрипты для автозапуска АТС и готовые конфигурационные файлы:
dnf install chkconfig
make config
make samples
make install-logrotate
Если требуется установка logrotate для ротации лог-файлов
ldconfig
Настройте запуск asterisk из под соответствующего пользователя:
Откройте файл /etc/sysconfig/asterisk и раскоментируйте следующие строки:
vi /etc/sysconfig/asterisk
AST_USER="asterisk" AST_GROUP="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
Одной командой:
sudo chown -R asterisk.asterisk /etc/asterisk /var/run/asterisk /var/{lib,log,spool}/asterisk /usr/lib64/asterisk
и проверяем настройки:
asterisk -c
Мы должны увидеть Asterisk Ready:
Проверка запуска Asterisk
... значит наш сервер готов к запуску. Все ошибки и предупреждения нам не помешают, однако их можно устранить разными способами, как правило, отключив неиспользуемые модули.
После успешной проверки, можно запустить Asterisk в качестве демона:
systemctl enable asterisk
systemctl start asterisk
Установка FreePBX Возвращаемся в домашнюю папку пользователя:
cd ~
Установим пакеты:
dnf install sox mpg123 -y
* где:
sox — консольная утилита для преобразования аудиофайлов из одного формата в другой.
mpg123 — аудиопроигрыватель/декодер реального времени.
Скачиваем портал для управления астериском:
wget http://mirror.freepbx.org/modules/packages/freepbx/freepbx-16.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
* достаточно указать логин и пароль для пользователя, под которым мы будем заходить в панель управления 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 настроен.