В этой статье мы рассмотрим процесс установки Asterisk 21 и FreePBX 17 в Ubuntu 24.04 LTS с учётом уже установленных в систему Apache2 и MariaDB.
Ранее мы уже проводили установку Asterisk v.18 и FreePBX v.16. На этот раз, установим последнюю версию связки.
Переключимся на суперпользователя с последующим вводом пароля root.
sudo su
Подготовка системы
Если вы ещё не установили веб-сервер (в данной статье предполагается установленный Apache), php и MySQL, то необходимо сделать это сейчас. Для информации можете воспользоваться указанной выше статьёй.
Следующий шаг — создание виртуального подсервера в Virtualmin. Для этого также можно воспользоваться соответствующей статьёй нашего блога.
Открываем порты
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 -t filter -A INPUT -p udp --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 будем устанавливать одним из удобных нам способом — непосредственно с репозитория разработчика или с помощью менеджера версий Node:
Программную платформу Node.js будем устанавливать из репозитория разработчика.
Загрузим и импортируем ключ 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_18.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list && apt-get update && apt-get install nodejs -y
Используя этот инструмент, можно устанавливать любые версии Node.js одновременно и свободно переключаться с одной на другую.
Если вы уже загружали какую-либо версию и не помните, то получить их список можно командой
nvm list
Загружаем скрипт, перезагружаем конфигурацию оболочки и получаем список доступных версий:
curl https://raw.githubusercontent.com/creationix/nvm/master/install.sh | bash; source ~/.bashrc; nvm list-remote
Загружаем самую последнюю версию из 18.х и определяем её в качестве приоритетной:
nvm install v18.20.6; nvm use v18.20.6
Только если планируете использовать модуль XMPP FreePBX (нужен для работы чата в панели UCP)
В этом случае нужно установить MongoDB
Для Ubuntu 24.04 достаточно команды
apt install mongodb
На Ubuntu 22.04 установку можно произвести по инструкции на нашем сайте «Установка последней версии MongoDB в Ubuntu 22.04 LTS«.
Следующим шагом будет установка PHP-FPM вместе с другими модулями PHP. Разработчик FreePBX заявляет, что версия 17 поддерживает только PHP 8.2, поэтому, если вы используете более старую или более новую версию PHP, удалите эту версию и установите версию PHP 8.2. Удалять мы ничего не будем, так как установим гибкую реализацию PHP-FPM.
Добавляем репозиторий с установкой зависимостей, устанавливаем PHP, проверим версию PHP используемую по умолчанию и устанавливаем 8.2. Сделаем это одной командой:
apt install software-properties-common ca-certificates lsb-release apt-transport-https -y; LC_ALL=C.UTF-8 add-apt-repository -y ppa:ondrej/php; apt-get update; apt install php8.2-{cgi,cli,curl,common,bcmath,fpm,gd,intl,pdo,mbstring,mysql,mysqlnd,opcache,snmp,xml,zip} php-pear -y; php -v; update-alternatives --config php
и по завершении вас попросят выбрать версию php по умолчанию. Выберите пункт с /usr/bin/php8.2
Добавляем репозиторий с установкой зависимостей:
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 php8.2-fpm php8.2-bcmath php8.2-gd php8.2-mbstring php8.2-mysql php-pear php8.2-snmp php8.2-zip php8.2-curl php8.2-xml php8.2-intl php8.2-common php8.2-cli -y
Проверим версию PHP используемую по умолчанию:
php -v
Если она отличается от 8.2, то установим нужную нам:
update-alternatives --config php
Идём в Virtualmin, выбираем сервер на котором будем использовать FreePBX. Затем, Конфигурация серверов → Параметры PHP и выбираем из выпадающего списка нужную нам версию PHP, то есть 8.2

Создание пользователя
Для доступа веб-сервера к каталогам 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 используется для нашего поддомена.

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

В нижнем поле выбираем путь вручную, нажав на значок 2 листочков или вбиваем
/etc/php/8.2/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/8.2/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 php8.2-fpm
На этом наши приготовления окончены, приступим к установке сервера и панели управления.
Установка Asterisk
Разработчиком сервера ip-телефонии является Sangoma Technologies. На текущий момент самая последняя версия Asterisk — 22-тая, но нам нужна 21 — стабильная, именно она значится валидной для связки с FreePBX. Её мы и будем устанавливать.

Загрузка и распаковка исходников, устранение зависимостей
Чтобы не мусорить, создадим (если ещё не сделали этого при установке Webmin) в корне диска директорию src, в которую будем загружать архивы, распаковывать их и устанавливать Asterisk и FreePBX. Потом её можно будет удалить или оставить — решать вам.
mkdir /src
Идём на страницу загрузки сайта Sangoma Technologies, находим адрес загрузки Asterisk 21, копируем ссылку и вставляем в терминал с командой wget для загрузки установочного архива на наш сервер. Или воспользуемся уже готовой командой
cd /src; wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-21-current.tar.gz; tar -xvf asterisk-*.tar.gz; cd asterisk*/; ./contrib/scripts/install_prereq install
Начнётся загрузка и установка и настройка необходимых пакетов, в процессе которой может появится окно настройки модуля Asterisk (у меня после 18 версии оно не появлялось никогда)

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

Удаление временных файлов, добавление библиотеки для работы с mp3 и настройка установщика:
make distclean; ./contrib/scripts/get_mp3_source.sh; ./configure
После установки зависимостей у нас остались временные файлы. Удалим их.
make distclean
Добавим библиотеку для работы с mp3:
./contrib/scripts/get_mp3_source.sh
Настроим установщик.
./configure
По завершению этого этапа, увидим псевдографический логотип Asterisk.

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

Навигацию в этом окне производим кнопками направления (лево-право-верх-низ) или Tab, отказаться — Esc, принять — F12
Что выбираю я:
- из Add-ons (See README-addons.txt) — поддержка mp3 и драйвер MySQL + поддержка CDR
- из раздела Core Sound Packages — CORE-SOUNDS-RU-WAV (для подключения основного набора звуковых файлов на русском языке). Можно выбрать все форматы, где есть «-RU-«, или другой язык из необходимых вам.
- в Extras Sound Packages отсутствует русский язык, потому выбираем английский — EXTRA-SOUNDS-EN-WAV или других форматов
Чего вы уже не найдёте, так это app-macro — макросов планов набора. Его исключили в этой версии, так как устарел. Так что не тратьте времени на его поиски
Сборка дистрибутива, установка Asterisk, преднастройка сервера ip-телефонии
По окончанию выбора жмём F12 или переходим на кнопку «Save & Exit» и жмём её. Настройка установщика завершена. Приступаем к завершающему этапу.
Сборка дистрибутива, установка Asterisk, преднастройка сервера ip-телефонии:
make; make install; make config; make samples; chown -R asterisk:asterisk /etc/asterisk; chown -R asterisk:asterisk /var/{lib,log,spool}/asterisk
Начинаем сборку пакета
make
Сборка занимает продолжительное время. По её завершении видим соответствующее объявление скрипта установки Asterisk.

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

Подготовим директории, установим скрипты и готовые конфигурационные файлы.
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
Проверяем настройки командой
asterisk -c
Asterisk вывалит кучу заметок, ошибок и предупреждений, не пугайтесь, так и должно быть — ведь он ещё не настроен. Главное, чтоб в конце вы увидели сообщение, что он готов:

Первый запуск
Теперь запускаем наш телефонный сервер, устанавливая его автозапуск при каждой загрузке системы и проверяем состояние:
systemctl enable asterisk && systemctl start asterisk && systemctl status 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 они исчезнут.
Установка FreePBX
Загрузка и установка панели управления
При создании сайта/подсайта Virtualmin наполняет его директорию шаблонными файлами. Чтоб избавиться от них, очистим директорию, в которую установим FreePBX:
rm -rf /home/ВАШ_ПУТЬ_ДО_ДИРЕКТОРИИ_САЙТА/www/*
Переходим в директорию src, качаем архив панели управления сервером телефонии Asterisk, распаковываем его и переходим в директорию установщика и запускаем скрипт проверки работы Asterisk:
cd /src && wget http://mirror.freepbx.org/modules/packages/freepbx/freepbx-17.0-latest-EDGE.tgz && tar zxf freepbx-*.tgz && cd freepbx && ./start_asterisk start
Должно появиться сообщение

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

Проверка прав доступа
Также проверим настройки доступа по пути к нашему сайту, на котором будет установлена панель управления (например, если она установлена в поддомен, как у меня):
namei -mol /home/ВАШ_ПУТЬ_ДО_ДИРЕКТОРИИ_САЙТА/www
Должно получиться как-то так

Если прав на чтение и выполнения для всех нет, то добавьте их начиная с пути отсутствия, например:
chmod -R 755 /home/dozzi && find /home/dozzi -type d -exec chmod -R 755 {} \; && find /home/dozzi -type f -exec chmod -R 644 {} \;
Установим для директории tmp, где размещаются файлы сессий, права 775 и изменим владельца и группу на asterisk
chmod -R 775 /home/ВАШ_ПУТЬ_ДО_ДИРЕКТОРИИ_САЙТА/tmp; chown -R asterisk:asterisk /home/ВАШ_ПУТЬ_ДО_ДИРЕКТОРИИ_САЙТА/tmp
Постустановка и запуск панели
Установим остальные модули FreePBX, перезапустим конфигурацию и сам FreePBX:
fwconsole ma installall; fwconsole reload; fwconsole restart
Первый запуск FreePBX
Открываем браузер и заходим по адресу http://IP-адрес сервера или адрес сайта, если установили в папку домена. Если всё сделано верно, то открываться страница преднастройки FreePBX. Заполняем поля логин и пароль для пользователя, под которым мы будем заходить в панель управления FreePBX и email адрес.

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

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

Теперь перейдём Настройки → Установки Asterisk для SIP и настроим Внешний адрес и Локальные сети.

Вместо звёздочек поставьте свои значения IP.
Открываем конфигурационный файл менеджера 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)
Вот как это выглядит в отчёте:

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

Далее, командой wget скачиваем файл deb и устанавливаем коннектор:
cd /src; wget https://dlm.mariadb.com/3978209/Connectors/odbc/connector-odbc-3.2.4/mariadb-connector-odbc_3.2.4+ubu2404_amd64.deb; dpkg -i mariadb-connector-odbc*.deb
Для 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*/ && cp -r lib/mariadb /usr/lib64
Для 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/x86_64-linux-gnu/libmaodbc.so
Driver64 = /usr/lib/x86_64-linux-gnu/libmaodbc.so
FileUsage = 1
[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

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

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