Установка Asterisk v.18 и FreePBX v.16 на Ubuntu 22.04 LTS

    20 минут

В этой статье мы рассмотрим процесс установки Asterisk 18 и FreePBX 16 в Ubuntu 22.04 LTS с учётом уже установленных в систему Apache2 и MariaDB. Это руководство также работоспособно на Ubuntu 20.04 LTS. Если есть какие-то нюансы, в нём они выделены для обоих версий.

В современном оцифровывающимся мире становятся нормой, а то и насущной необходимостью отказаться от старых технологий в пользу новых. Таким скачком стал переход на ip-телефонию нашего офиса.

Завершив установку Webmin с Virtualmin, включающих в себя, кроме удобных панелей, веб-сервер Apache, php-7.4-fpm, Postfix, Dovecot и многое другое составляющее наш сервер, мы переходим к установке сервера ip-телефонии.

Переключимся на суперпользователя с последующим вводом пароля root.

sudo su

Подготовка системы

Если вы ещё не установили веб-сервер (в данной статье предполагается установленный Apache), php и MySQL, то необходимо сделать это сейчас. Для информации можете воспользоваться указанной выше статьёй.

Следующий шаг — создание виртуального подсервера в Virtualmin. Для этого также можно воспользоваться соответствующей статьёй нашего блога.

Открываем порты

iptables -I INPUT -p tcp --match multiport --dport 80,443 -j ACCEPT; iptables -I INPUT -p tcp --match multiport --dport 25,110,143,465,587,993,995,220 -j ACCEPT; iptables -I INPUT -p tcp --match multiport --dport 2222 -j ACCEPT; iptables -I INPUT -p udp --match multiport --dport 546,53,5353 -j ACCEPT; iptables -t filter -A INPUT -p tcp --dport 20:22 -j ACCEPT; iptables -t filter -A INPUT -p tcp --dport 49152:65535 -j ACCEPT; iptables -t filter -A INPUT -p tcp --dport 10000:20000 -j ACCEPT

Для сохранения правил iptables, установим соответствующую утилиту (если не сделали это на этапе установки Webmin или LAMP) и сохраним их:

apt install iptables-persistent -y && netfilter-persistent save
ufw allow 5060,5061/tcp; ufw allow 5060,5061/udp; ufw allow 10000:20000/udp

Установка необходимых пакетов

Утилиты для загрузки и распаковки файлов, а также пакеты аудио утилит

apt install wget tar curl sox mpg123 -y

Программную платформу Node.js будем устанавливать из репозитория разработчика, потому что в стандартном имеется лишь версия 10, тогда, как нам нужна 16. Загрузите и импортируйте ключ Nodesource GPG:

apt-get update && apt-get install -y ca-certificates curl gnupg && mkdir -p /etc/apt/keyrings && curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg

Создадим репозиторий:

echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_16.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list

Установим саму платформу:

apt-get update && apt-get install nodejs -y

Если этот способ оказался неработоспособным, то Node.js установим через NVM (Node Version Manager). Используя этот инструмент, можно устанавливать любые версии Node.js одновременно и свободно переключаться с одной на другую.

Если вы уже загружали какую-либо версию и не помните, то получить их список можно командой

nvm list

Загружаем скрипт:

curl https://raw.githubusercontent.com/creationix/nvm/master/install.sh | bash

Перезагружаем конфигурацию оболочки:

source ~/.bashrc

Получаем список доступных версий:

nvm list-remote

Загружаем самую последнюю версию из 16.х

nvm install v16.20.2

Если вы устанавливали ранее другую версию Node.js, то приоритетную версию можно определить командой:

nvm use v16.20.2

В том случае, если планируете использовать модуль XMPP FreePBX (нужен для работы чата в панели UCP), то также требуется установить MongoDB. Для Ubuntu 20.04 достаточно команды

apt install mongodb

На Ubuntu 22.04 установку можно произвести по инструкции на нашем сайте «Установка последней версии MongoDB в Ubuntu 22.04 LTS«.

Следующим шагом будет установка php-fpm вместе с другими модулями php.

Добавляем репозиторий:

add-apt-repository ppa:ondrej/php -y

или с установкой зависимостей:

apt install software-properties-common ca-certificates lsb-release apt-transport-https -y
LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/php

Теперь мы готовы к его установке:

apt install php7.4-fpm php7.4-bcmath php7.4-gd php7.4-json php7.4-mbstring php7.4-mysql php-pear php7.4-snmp php7.4-zip php7.4-curl php7.4-xml php7.4-intl php7.4-common php7.4-cli -y

Проверим версию PHP используемую по умолчанию:

php -v

Если она отличается от 7.4, то установим нужную нам:

update-alternatives --config php

Переходим в Virtualmin, выбираем сервер на котором будем использовать FreePBX. Переходим в Конфигурацию серверов → Параметры PHP и выбираем из выпадающего списка нужную нам версию PHP, то есть 7.4

Установка версии PHP

Создание пользователя

Для доступа веб-сервера к каталогам Asterisk нужен общий пользователь, от которого будут работать оба сервера. Создаём его командой

useradd asterisk -m

Изменение настроек сервера и php

Далее, отредактируем файлы настроек apache2 и php-frm, указав в них пользователя и группу, от которых следует запускаться.

Это можно сделать через панель Webmin (не зря же мы её устанавливали!) или напрямую средствами Linux посредством терминала и текстового редактора. Рассмотрим оба варианта. Хотя, даже используя второй вариант, к Webmin обратиться нам придётся, чтобы узнать ID нашего подсайта.

Делаем это следующим образом.

  • В браузере запускаем Webmin
  • 1. Переходим на вкладку Virtualmin
  • 2. Сверху из списка выбираем подсервер, на который установим панель FreePBX
  • 3. Далее, жмём «Редактировать»

и в открывшейся панели ищем «Domain ID» (выделено на скриншоте). Набор цифр напротив него и есть тот самый ID нашего подсайта. Можно его скопировать, чтобы позже сформировать путь.

Также переходим Server Configuration → PHP Options и смотрим, какая реализация php используется для нашего подсайта.

PHP

Теперь открываем вкладку Webmin → Tools → PHP Configuration

В нижнем поле выбираем путь вручную, нажав на значок 2 листочков или вбиваем

/etc/php/7.4/fpm/pool.d/ВАШ_Domain_ID.conf

и жмём кнопку Управление. В появившемся окне жмём Редактирование конфигурации вручную и в редакторе находим строки

user = www-data
group = www-data
listen.owner = www-data
listen.group = www-data

в них меняем www-data на asterisk

user = asterisk
group = asterisk
listen.owner = asterisk
listen.group = asterisk

Жмём кнопку в самом низу Вернуться к конфигурационные файлы и в то же поле, которое использовали вбиваем путь

/etc/apache2/envvars

где меняем значения переменных APACHE_RUN_USER и APACHE_RUN_GROUP с www-data на asterisk. Оговорюсь сразу, у меня работает всё великолепно с дефолтными значениями в этом файле.

export APACHE_RUN_USER=asterisk
export APACHE_RUN_GROUP=asterisk

Это тот случае, когда Webmin не установлен.

Открываем файл настроек привычным нам редактором, например

gedit /etc/php/7.4/fpm/pool.d/www.conf

Найдите в нём строки:

user = www-data
group = www-data
listen.owner = www-data
listen.group = www-data

и www-data измените на asterisk. Если позволяет функционал редактора, то это можно сделать функцией «Найти и заменить». В итоге файл должен выглядеть так:

user = asterisk
group = asterisk
listen.owner = asterisk
listen.group = asterisk

Также открываем /etc/apache2/envvars

gedit /etc/apache2/envvars

и меняем в нём значения переменных APACHE_RUN_USER и APACHE_RUN_GROUP с www-data на asterisk:

export APACHE_RUN_USER=asterisk
export APACHE_RUN_GROUP=asterisk

Перезагружаем сервер и препроцессор:

systemctl restart apache2 && systemctl restart php7.4-fpm

На этом наши приготовления окончены, приступим к установке сервера и панели управления.

Установка Asterisk

Разработчиком сервера ip-телефонии является Sangoma Technologies. На текущий момент самая последняя версия Asterisk — 20-тая, но разработчиком поддерживаются более старшие версии сервера, начиная с 16. При этом, основной версией является 19-тая.

Загрузка и распаковка исходников

Чтобы не мусорить, создадим (если ещё не сделали этого при установке Webmin) в корне диска директорию src, в которую будем загружать архивы, распаковывать их и устанавливать Asterisk и FreePBX. Потом её можно будет удалить или оставить — решать вам.

mkdir /src

Мы же на наш сервер установим 18-тую версию, как самую стабильную и наиболее проработанную (имхо). Идём на страницу загрузки сайта Sangoma Technologies, находим адрес загрузки Asterisk 18 LTS, копируем ссылку и вставляем в терминал с командой wget для загрузки установочного архива на наш сервер. Или воспользуемся уже готовой командой

cd /src && wget https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-18-current.tar.gz && tar -xvf asterisk-*.tar.gz && cd asterisk*/

Предустановка. Устранение зависимостей

Устраняем зависимости Asterisk

./contrib/scripts/install_prereq install

Начнётся загрузка и установка и настройка необходимых пакетов, в процессе которой скорее всего появится окно настройки модуля Asterisk

Окно настройки модуля Asterisk
Окно настройки модуля Asterisk

Вводим код своей страны (для России — 7) и дожидаемся, когда пройдёт этот процесс и появится сообщение о завершении.

Сообщение о завершении
Сообщение о завершении

После установки зависимостей у нас остались временные файлы. Удалим их.

make distclean

Добавим библиотеку для работы с mp3:

./contrib/scripts/get_mp3_source.sh

Настроим установщик.

./configure

По завершению этого этапа, увидим псевдографический логотип Asterisk.

Настройка установщика  Asterisk завершена
Настройка установщика Asterisk завершена

Настройка сборщика. Выбор модулей

Теперь выберем требуемые нам модули Asterisk.

make menuselect

После чего запустится окно выбора модулей. Можно, конечно, оставить по умолчанию, нажав кнопку «Save & Exit», но в этом случае в процессе работы с Astrisk придётся снова запускать установщик с этого шага и выбирать необходимые для правильной работы модули.

Окно выбора модулей
Окно выбора модулей

Навигацию в этом окне производим кнопками направления (лево-право-верх-низ) или Tab, отказаться — Esc, принять — F12

Что выбираю я:

  • из Add-ons (See README-addons.txt) — поддержка mp3 и драйвер MySQL + поддержка CDR
  • из Applications выбираю app-macro — макросы планов набора.
  • в Channel Drivers проверить, отмечен ли chan_sip, если планируете использовать старый интерфейс.
  • в разделе Core Sound Packages — CORE-SOUNDS-RU-WAV (для подключения основного набора звуковых файлов на русском языке). Можно выбрать все форматы, где есть «-RU-«, или другой язык или необходимые вам.
  • в Extras Sound Packages отсутствует русский язык, потому выбираем английский — EXTRA-SOUNDS-EN-WAV или других форматов

Сборка дистрибутива

По окончанию выбора жмём F12 или переходим на кнопку «Save & Exit» и жмём её. Настройка установщика завершена, начинаем сборку пакета

make

Сборка занимает продолжительное время. По её завершении видим соответствующее объявление скрипта установки Asterisk.

Завершение сборки
Завершение сборки

Установка Asterisk

Следуя его призыву, запускаем установку Asterisk

make install

и дожидаемся её завершения, которое будет отмечено следующим объявлением установщика

Завершение установки Asterisk
Завершение установки Asterisk

Преднастройка сервера ip-телефонии

Подготовим директории, установим скрипты и готовые конфигурационные файлы.

make config && make samples

Изменяем права на директории в пользу пользователя и группы asterisk:

chown -R asterisk:asterisk /etc/asterisk && chown -R asterisk:asterisk /var/{lib,log,spool}/asterisk

Открываем основной конфигурационный файл Asterisk

/etc/asterisk/asterisk.conf

и раскомментируем следующие строки:

runuser = asterisk
rungroup = asterisk
defaultlanguage = en

а также изменим строки

defaultlanguage = en
documentation_language = en_US

приведя к следующему виду:

defaultlanguage = ru
documentation_language = ru_RU

Открываем файл конфигурации модулей

/etc/asterisk/modules.conf

ищем строку

chan_sip.so

и убираем «no» из «noload», приведя к виду.

load = chan_sip.so

Проверяем настройки командой

asterisk -c

Asterisk вывалит кучу заметок, ошибок и предупреждений, не пугайтесь, так и должно быть — ведь он ещё не настроен. Главное, чтоб в конце вы увидели сообщение, что он готов:

Asterisk готов
Asterisk готов

Первый запуск

Теперь запускаем наш телефонный сервер, устанавливая его автозапуск при каждой загрузке системы и проверяем состояние:

systemctl enable asterisk && systemctl start asterisk && systemctl status asterisk

Должно быть таким:

Состояние Asterisk
Состояние Asterisk

Если при первом запуске у вас возникла такая же ошибка, как на скриншоте выше, то откройте

/etc/asterisk/cdr.conf

Найдите строку (она в самом низу)

;radiuscfg => /usr/local/etc/radiusclient-ng/radiusclient.conf

раскомментируйте её и измените путь на актуальный:

radiuscfg => /etc/radcli/radiusclient.conf

Также может быть закомментирован сам раздел [radius], раскомменируйте и его.

То же самое сделайте с файлом /etc/asterisk/cel.conf

/etc/asterisk/cel.conf

Перезапускаем сервер и убеждаемся, что он успешно запущен без ошибок. Но, по сути, на эти ошибки не стоит обращать внимание, после установки FreePBX они исчезнут.

Проверка прав доступа

Также проверим настройки доступа по пути к нашему сайту, на котором будет установлена панель управления (например, если она установлена в поддомен, как у меня):

namei -mol /home/ИМЯ_ПОЛЬЗОВАТЕЛЯ/domains/ПОДДОМЕН/www

В идеале должно быть как-то так:

Если прав на чтение и выполнения для всех нет, то добавьте их начиная с пути отсутствия, например:

chmod -R 755 /home && find /home -type d -exec chmod -R 755 {} \; && find /home -type f -exec chmod -R 644 {} \;

Установим для директории tmp, где размещаются файлы сессий, права 775 и изменим владельца и группу на asterisk

chmod -R 775 /home/ВАШ_ПУТЬ_ДО_ДИРЕКТОРИИ_САЙТА/tmp; chown -R asterisk:asterisk /home/ВАШ_ПУТЬ_ДО_ДИРЕКТОРИИ_САЙТА/tmp

Установка FreePBX

Загрузка и установка панели управления

Переходим в директорию src, качаем архив панели управления сервером телефонии Asterisk, распаковываем его и переходим в директорию установщика:

cd /src && wget http://mirror.freepbx.org/modules/packages/freepbx/freepbx-16.0-latest.tgz && tar zxf freepbx-*.tgz && cd freepbx

Запускаем скрипт проверки работы Asterisk

./start_asterisk start

Должно появиться сообщение

проверка Asterisk

если это так, то запускаем скрипт установки

./install -n --dbuser root --dbpass PASS --webroot=/var/www/html

вместо PASS поставьте пароль суперпользователя (root) от MariaDB. Если хотите установить web-интерфейс FreePBX в другой каталог, например, чтоб запускать доменом с адресной строки, то укажите его вместо /var/www/html в параметре —webroot

Начнется установка и в конце мы должны увидеть

Установим модуль управления сертификатами

fwconsole ma downloadinstall certman

Обновим компоненты FreePBX

fwconsole ma updateall

Перезапустим конфигурацию:

fwconsole reload --verbose

Первый запуск FreePBX

Открываем браузер и заходим по адресу http:IP-адрес сервера или адрес сайта, если установили в папку домена. Если всё сделано верно, то открываться страница преднастройки FreePBX. Заполняем поля логин и пароль для пользователя, под которым мы будем заходить в панель управления FreePBX и email адрес.

Первый запуск FreePBX
Первый запуск FreePBX

Жмём Setup System и выходим на запрос языка и региональных настроек.

Региональные настройки
Региональные настройки

После установки откроется главное окно панели управления

Главное окно FreePBX
Главное окно FreePBX

Открываем конфигурационный файл менеджера Asterisk

/etc/asterisk/manager.conf

находим строки

#include manager_additional.conf
#include manager_custom.conf

и заменяем в них # на ;

;include manager_additional.conf
;include manager_custom.conf

Перезапускаем сервер Asterisk

systemctl restart asterisk

Скрипт автозапуска FreePBX

Создадим скрипт запуска FreePBX

/etc/systemd/system/freepbx.service

и впишем туда следующее:

[Unit]
Description=FreePBX VoIP Server
After=mariadb.service
 
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/sbin/fwconsole start -q
ExecStop=/usr/sbin/fwconsole stop -q
 
[Install]
WantedBy=multi-user.target

Сохраним файл и установим его в автозагрузку:

systemctl enable freepbx.service

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

На этом всё, наши Asterisk и FreePBX установлены. Следующим этапом будет установка необходимых модулей и настройка сервера.

Основные настройки панели

Если пока не хотите вникать в настройки транков и внутренних номеров через драйвер PjSIP, то при первом запуске сразу отключаем его. Выбираем в меню Общие настройки → Дополнительные настройки пункт SIP Channel Driver и из списка устанавливаем chan_sip. Сохраняем изменения кнопкой Сохранить, переходим в Общие настройки → Установки Asterisk для SIP. В пункте Внешний адрес жмём Детектировать сетевые настройки. Далее, во вкладке SIP Legacy Settings [chan_sip] в нижней части страницы находим пункт Порт и меняем его с 5160 на 5060. Сохраняем изменения кнопкой Сохранить и применяем кнопкой Применить изменения в вверху странице.

На этом этапе уже можно создавать транки и внутренние номера и определять маршрутизацию. Если этого покажется мало и предполагается использовать очереди, параметры по времени, IVR-меню и другое из огромного функционала Asterisk, то необходимо доустанавливать соответствующие модули. Это можно сделать в меню Админ → Управление модулями.

Настройка CDR

Посредством использования CDR осуществляется фиксирование входящих и исходящих звонков в базе данных и использования этих данных для формирования отчёта в FreePBX.

Отображение даты и времени

Сперва настроим формат отображения даты и времени в отчётах CDR, так как по умолчанию время будет отображаться не в 24-х часовом а в 12-ти часовом. В панели FreePBX выбираем в меню Общие настройки → Дополнительные настройки пункт Date and Time Format и значение llll меняем на

dddd DD.MM.YYYY HH:mm

где dddd — день недели, DD — число, MM — месяц, YYYY — год, HH — часы, mm — минуты. Подробнее о форматах можно почитать у разработчика JavaScript-библиотеки Moment. js.

В свою очередь, мне больше понравился такой вот формат:

HH:mm ..... DD MMMM YYYY (dddd)

Вот как это выглядит в отчёте:

Отображение даты в отчёте CDR
Отображение даты в отчёте CDR

Так что эта настройка очень гибкая и сделать под себя для лучшей читабельности не составит труда.

Загрузка и установка дайвера

Первоначально в Ubuntu, если и есть поддержка CDR, то она неработоспособна. Для использования этой технологии, следует выполнить загрузку коннектора, а также его установку и настройку.

Для Ubuntu 22.04 работоспособным оказался коннектор с сайта разработчика MariaDB. Заходим на него, выбираем из списка нашу версию Ubuntu и внизу появляется ссылка на архив коннектора.

Далее, командой wget скачиваем его, распаковываем и переходим в директорию установки:

cd /src && wget https://dlm.mariadb.com/3286256/Connectors/odbc/connector-odbc-3.1.19/mariadb-connector-odbc-3.1.19-ubuntu-jammy-amd64.tar.gz && tar -xvf mariadb-connector*.tar.gz && cd  mariadb-connector*/

Для Ubuntu 20.04 же работоспособным оказался коннектор с сайта разработчика MariaDB. Заходим на него и выбираем mariadb-connector-odbc-3.1.9-ubuntu-bionic-amd64.tar.gz

Далее, командой wget скачиваем его, распаковываем и переходим в директорию установки:

cd /src && wget https://downloads.mariadb.com/Connectors/odbc/latest/mariadb-connector-odbc-3.1.9-ubuntu-bionic-amd64.tar.gz && tar -xvf mariadb-connector*.tar.gz && cd  mariadb-connector*/

Копируем коннектор

cp -r lib/mariadb /usr/lib64

Настройка коннектора

Теперь приступаем к настройке установленного коннектора CDR.

Для редактирования файлов удобно использовать Webmin. Переходим через вкладку Webmin → Tools → PHP Configuration и в нижнем поле выбираем путь вручную, нажав на значок 2 листочков или вводим

/etc/odbc.ini

Вместо содержимого вносим

[MySQL-asteriskcdrdb]
Description=MySQL connection to 'asteriskcdrdb' database
Trace = Yes
TraceFile = /tmp/odbc.log
driver=MariaDB
server=localhost
User=freepbxuser
Password=ПАРОЛЬ_К_БД
database=asteriskcdrdb
Port=3306
Socket=/var/run/mysqld/mysqld.sock
option=3
Charset=utf8

ПАРОЛЬ_К_БД берём из файла /etc/freepbx.conf в строке $amp_conf[‘AMPDBPASS’] без кавычек.

Теперь настроем сам драйвер.

/etc/odbcinst.ini

Вместо имеющихся записей вставьте

[MariaDB]
Description     = ODBC for MariaDB
Driver          = /usr/lib/mariadb/libmaodbc.so
Driver64          = /usr/lib64/mariadb/libmaodbc.so
FileUsage       = 1

Также отредактируем конфигурационный файл Asterisk

/etc/asterisk/cdr_odbc.conf

Можно раскомментировать строки и поправить dsn или просто вставить ниже них

[global]
dsn=asteriskcdrdb
loguniqueid=yes
dispositionstring=yes
table=cdr
usegmtime=no
hrtime=yes
newcdrcolumns=yes

Перезагружаем asterisk и freepbx

systemctl restart asterisk && systemctl start freepbx

Проверка работы коннектора

Теперь проверим соединение командой

isql MySQL-asteriskcdrdb
Проверка соединения
Проверка соединения

Если вы получили такой же ответ, значит всё сделано правильно и соединение присутствует. В случае возникновения ошибки, наберите ту же команду, но с параметром -v

isql -v MySQL-asteriskcdrdb

Теперь проверим подключение к БД через драйвер ODBC. Запустим CLI Asterisk

asterisk -r

и введём команду

odbc show

Ответ должен быть таким:

Подключение к БД
Подключение к БД

Теперь можно пользоваться отчётом о звонках в FreePBX. Перейдём в панель и выберем Отчёты → Отчёты CDR

Отчёты CDR
Отчёты CDR

Нажмите Искать и, если уже были осуществлены звонки через сервер Asterisk, то FreePBX выдаст

Отчёт CDR
Отчёт CDR

На этом наш сервер и панель управления нами установлены и настроены.

Оставьте комментарий