Categories: Инструкции

Установка Asterisk + FreePBX на Ubuntu

Используемые термины: Asterisk , FreePBX , Ubuntu , NGINX .

Самый быстрый способ установить Asterisk + FreePBX — использовать ISO-образ FreePBX Distro. Но мы рассмотрим установку данной сборки на Linux Ubuntu «с нуля».

Данная инструкция написана на примере установки Asterisk 18/20 LTS и FreePBX 16/17. В качестве веб-сервера для FreePBX мы будем использовать NGINX. Данная инсталляция была протестирована на системах Ubuntu 20.04 / 22.04 / 24.04, а также Debian 12.

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

Для корректной работы сервера необходимо настроить системное время, открыть порты в брандмауэре и создать пользователя asterisk. Также мы установим несколько пакетов и создадим учетную запись, от которой будет работать Asterisk.

1. Установка пакетов

Выполним установку пакетов:

apt update

apt install wget tar ca-certificates curl gnupg cron

* где:

  • wget — утилита для загрузки файлов по сети.
  • tar — для распаковки архивов.
  • ca-certificates — набор корневых сертификатов.
  • curl — утилита для отправки запросов к веб-серверу. Будем использовать для загрузки файлов.
  • gnupg — для шифровки и дешифровки цифровых подписей. Нужна для работы с репозиториями.
  • cron — планировщик и запуск заданий по расписанию.

2. Языковые настройки

Для возможности во FreePBX выбрать русский интерфейс нам необходимо установить руссую локаль. В зависимости от системы Linux, наши действия будут отличаться.

а) Ubuntu:

apt install language-pack-ru

б) Debian:

dpkg-reconfigure locales

Мы должны увидеть меню выбора различный пакетов локализации. Выбираем ru_RU.UTF-8 .

3. Время

Задаем часовой пояс:

timedatectl set-timezone Europe/Moscow

* в данном примере московское время. Список всех зон можно посмотреть командой timedatectl list-timezones .

Устанавливаем сервис для синхронизации времени:

apt install chrony

И запускаем его с разрешением автозапуска:

systemctl enable chrony —now

4. Настройка firewall

Мы должны открыть порты:

  • 5060 (tcp/udp) — SIP.
  • 5061 (tcp/udp) — SIP over TLS.
  • 80 (tcp) — http.
  • 443 (tcp) — https.
  • Диапазон от 10000 до 20000 (udp) — голосовой трафик.

В Ubuntu для управления брандмауэром, как правило, использоваться 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 —dport 10000:20000 -j ACCEPT

Для сохранения правил установим:

apt install iptables-persistent

netfilter-persistent save

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

Нам нужен общий пользователь, от которого будет работать Asterisk и веб-сервер. Это необходимо, чтобы веб-сервер имел доступ к каталогам астериска.

Создаем пользователя командой:

useradd asterisk -m

Настройка веб-сервера

Для работы FreePBX нам необходим веб-сервер и СУБД. В нашем примере мы установим связку NGINX + PHP + MariaDB + NodeJS.

Сервер баз данных

Устанавливаем mariadb:

apt install mariadb-server

Задаем пароль для суперпользователя СУБД:

mysqladmin -u root password

NGINX

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

apt install nginx

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

vi /etc/nginx/nginx.conf

В секции http добавим опцию client_max_body_size :

http {

##
# Basic Settings
##

client_max_body_size 128M;

}

* данный параметр разрешает загрузку файлов размером до 128 Мб.

Перезапускаем nginx:

systemctl restart nginx

Открываем браузер и заходим по адресу http:<IP-адрес сервера> — должна открыться страница приветствия NGINX:

Веб-сервер установлен.

PHP и компоненты

Прежде чем начать установку, необходимо изучить документацию к устанавливаемой версии FreePBX в части требований версии PHP. Например, для 17-й версии это можно сделать на странице с инструкцией по развертыванию .

Чтобы правильно выбрать нужную версию FreePBX и подходящую к ней версию Asterisk, воспользуемся таблицей с сайта разработчика .

Также имейте ввиду, что для каждой версии дистрибутива Ubuntu характерна установка своей версии PHP. Иногда, для установки определенной версии нам потребуется подключить дополнительный репозиторий.

Для удобства работы зададим в переменной версию PHP, которая требуется для FreePBX:

PHP_VER=7.4

Смотрим, какую версию PHP предлагают установить встроенные репозитории:

apt search —names-only ‘^php[.0-9]{3}$’

а) Если требуемая версия PHP устанавливается в системе без дополнительного репозитория:

apt install php php-fpm php-bcmath php-gd php-json php-mbstring php-mysqlnd php-pear php-snmp php-zip php-curl php-xml —no-install-recommends

б) Если для установки требуемой версии PHP требуется подключить дополнительный репозиторий:

Для установки альтернативной версии PHP следуем одной из инструкций:

1. Установка разных версий PHP на Linux Ubuntu .

2. Установка разных версий PHP на Linux Debian .

После устанавливаем сам PHP и его компоненты:

apt install php${PHP_VER}-fpm php${PHP_VER}-bcmath php${PHP_VER}-gd php${PHP_VER}-json php${PHP_VER}-mbstring php${PHP_VER}-mysqlnd php${PHP_VER}-snmp php${PHP_VER}-zip php${PHP_VER}-curl php${PHP_VER}-xml —no-install-recommends

Теперь открываем настройки для php командой:

vi /etc/php/${PHP_VER}/fpm/php.ini

* где вместо ${PHP_VER} подставится версия php.

Правим значения для следующих опций:

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/${PHP_VER}/fpm/pool.d/www.conf

Задаем значения для следующих опций:

user = asterisk
group = asterisk

* FreePBX должен работать с файлами в каталоге /etc/asterisk. Владельцем этого каталога будет пользователь asterisk , поэтому обработка php должна выполняться тоже от данного пользователя, чтобы иметь соответствующие права на редактирование конфигурационных файлов.

Перезапускаем сервис php-fpm:

systemctl restart php${PHP_VER}-fpm

NGINX + PHP

Свяжем наш веб-сервер с php. Для этого откроем конфигурационный файл:

vi /etc/nginx/sites-enabled/default

Добавим следующие строки в разделы http — server:


http {

server {

root /var/www/html ;

index index.php

location ~ .php$ {
set $root_path /var/www/html;
fastcgi_pass unix:/run/php/php-fpm.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;
}

  • В данном примере мы создаем секцию location для обработки php через php-fpm.
  • Обратите внимание, что используется сокет /run/php/php-fpm.sock для взаимодействия с PHP, версией по умолчанию. Если в вашей системе несколько версий PHP, можно использовать путь /run/php/php7.4-fpm.sock, где 7.4 — конкретная версия.
  • Также обратите внимание на директивы root и index . В первой мы указали путь до домашнего каталога настраиваемого виртуального домена nginx, а во второй задаем первым файл, который будет искать веб-сервер, если путь до скрипта не указан явно в URL.

Выполним проверку конфигурации nginx и перезапустим его:

nginx -t && nginx -s reload

Создадим файл php в домашней директории nginx:

vi /var/www/html/index.php

<?php phpinfo(); ?>

* где путь /var/www/html соответствует тому, что мы указали в nginx с помощью директивы root .

Открываем браузер и заходим по адресу http:<IP-адрес сервера> — должна открываться страница с информацией об установленной версии php и всех компонентах:

Мы готовы идти дальше.

NodeJS

Последний компонент для нашего веб-сервера — NodeJS.

В стандартном репозитории Ubuntu может быть очень старая версия данного компонента. Установим репозиторий для nodejs 18. Для начала создадим переменную с желаемой версией NODEJS:

export NODE_VER=18

* в нашем случае, 18.

Теперь создадим файл с настройкой репозитория:

curl -sL https://deb.nodesource.com/setup_${NODE_VER}.x | bash —

Можно выполнить установку nodejs:

apt install nodejs

Убедиться в установке можно командой просмотра версии:

node —version

Наш веб-сервер готов к работе.

Установка Asterisk

Мы будем устанавливать 20-ю версию Asterisk. На странице загрузки мы можем посмотреть все версии АТС и ссылки на них, например:

* пусть вас не смущает версия 18 на скриншоте. Это пример.

Скачивая Asterisk, учитывайте совместимость его версии с версией FreePBX.

Используя скопированную ссылку, вводим команду:

wget https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20-current.tar.gz

Распаковываем архив и переходим в него:

tar -zxf asterisk-*.tar.gz

cd asterisk-*/

Устанавливаем зависимости для астериска:

./contrib/scripts/install_prereq install

Если система запросит телефонный код страны, вводим 7 (если мы настраиваем телефонию для России).

В итоге, мы должны увидеть:

#############################################
## 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 -j `nproc`

Мы должны увидеть сообщение об успешной сборке:

+——— 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 /etc/asterisk /var/{lib,log,spool}/asterisk /var/log/asterisk

Откроем файл с настройкой модулей:

vi /etc/asterisk/modules.conf

Можно добавить модуль chan_sip:

load = chan_sip.so

* обратите внимание, что модуль chan_sip является устаревшим и в последних версиях Asterisk не работает. Используйте chan_pjsip .

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

asterisk -c

Мы должны увидеть Asterisk Ready :

… значит наш сервер готов к запуску. Все ошибки и предупреждения нам не помешают, однако их можно устранить разными способами, как правило, отключив неиспользуемые модули.

После успешной проверки, можно запустить Asterisk в качестве демона:

systemctl enable asterisk

systemctl start asterisk

Установка FreePBX

Возвращаемся в домашнюю папку пользователя:

cd ~

Установим пакеты:

apt install sox mpg123

* где:

  • sox — консольная утилита для преобразования аудиофайлов из одного формата в другой.
  • mpg123 — аудиопроигрыватель/декодер реального времени.

Скачиваем портал для управления астериском:

wget http://mirror.freepbx.org/modules/packages/freepbx/freepbx-16.0-latest.tgz

* мы скачаем freepbx версии 16.

Распаковываем скачанный архив:

tar -zxf freepbx-*.tgz

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

cd freepbx

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

./start_asterisk start

Если видим:

STARTING ASTERISK
Asterisk is already running

… запускаем установку:

./install -n —dbuser root —dbpass <password> —webroot=/var/www/html

* в данном примере мы указали учетные данные для подключения к СУБД (логин root и пароль <password> , который мы создали после установки MariaDB); также мы указываем путь /var/www/html , который является домашней директорией веб-сервера NGINX.

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

You have successfully installed FreePBX

Устанавливаем дополнительные модули:

fwconsole ma install pm2 cdr

* где:

  • pm2 — для работы с приложениями nodejs посредством менеджера pm2.
  • cdr — отчеты о звонках.

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

fwconsole ma updateall

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

fwconsole reload —verbose

Открываем браузер и заходим по адресу 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 команды:

asterisk -r

> 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

[IM002][unixODBC][Driver Manager]Data source name not found and no default driver specified
[ISQL]ERROR: Could not SQLConnect

Если при попытке ввести команду isql мы получаем ошибку:

-bash: isql: command not found

Убедимся, что у нас установлены пакеты:

apt install unixodbc odbcinst

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

Нам необходимо выполнить 2 действия:

  1. Установить коннектор ODBC.
  2. Изменить драйвер для подключения к СУБД в odbc.ini.

Так как в данной инструкции мы используем в качестве севера баз данных MariaDB, нам необходим соответствующий коннектор. Для его установки воспользуемся инструкцией Настройка в Linux подключения к MariaDB из PHP с помощью ODBC .

После открываем файл:

vi /etc/odbc.ini

В разделе MySQL-asteriskcdrdb задаем новое значение для параметра driver , а также проверяем что есть директива Server со значением нашего сервера баз данных, а если есть директива Socket , комментируем ее:

[MySQL-asteriskcdrdb]

driver=MariaDB

Server=127.0.0.1
#Socket=

* список доступных драйвером можно посмотреть в файле /etc/odbcinst.ini .

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

vi /etc/odbcinst.ini

Проверяем наличие следующей записи (если ее нет, добавляем):

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

* в данном примере описано подключение к СУБД с драйвером MariaDB и путем до файла с библиотекой (отдельно для 32- и 64-разрядной версии).

В зависимости от релиза Ubuntu, библиотека libmaodbc.so может находиться по другому пути. Найти ее можно командой:

find / -name libmaodbc.so

Перезапускаем 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

Возможные ошибки

The user asterisk cannot use this program (crontab)

Во время установки FreePBX выскакивает ошибка:

Cron line added didn’t remain in crontab on final check. Check /var/spool/asterisk/tmp/cron.error for reason.

Если посмотреть файл лога /var/spool/asterisk/tmp/cron.error , то в нем мы увидим ошибку:

The user asterisk cannot use this program (crontab)

Причина: пользователю asterisk запрещено использовать cron.

Решение: открываем файл:

vi /etc/cron.deny

И удаляем из него строку, где указан asterisk .

don’t understand Storage database

Во время установки FreePBX выскакивают ошибки:

Coding Error — don’t understand ‘: Storage database:’ from /etc/asterisk/voicemail.conf

The command «/usr/sbin/fwconsole ma install core dashboard sipsettings voicemail certman» failed.

Причина: В конфигурационном файле /etc/asterisk/voicemail.conf разработчики допустили ошибку. Строка Storage database закомментирована не символом ;, а символом :.

Решение: открываем файл:

vi /etc/asterisk/voicemail.conf

Находим:

: Storage database:

и меняем на:

; Storage database:

Удалям файлы и базы после неправильной инсталляции:

rm -rf /var/www/html/*

* где /var/www/html — каталог, куда мы разворачивали FreePBX.

mysql

> drop database asterisk;

> drop database asteriskcdrdb;

> quit

И запускаем установку FreePBX по новой:

./install -n —dbuser root —dbpass <password> —webroot=/var/www/html

Читайте также

Вам могут быть полезны следующие инструкции:

1. Установка и базовая настройка сервера Asterisk на Ubuntu .

2. Настройка очередей звонков в Asterisk .

admin

Recent Posts

Что такое Zulip

Zulip — программное обеспечение для реализации корпоративного чата. Разработан в 2012 году, в 2014 был…

2 месяца ago

Что такое Zookeeper

Zookeeper — cервис-координатор, который позволяет обеспечить контроль синхронизации данных. Разработан на Java компанией Apache Software…

2 месяца ago

Что такое Zimbra

Zimbra — программное обеспечение для реализации почтового сервиса или, если сказать точнее, автоматизации совместной деятельности…

2 месяца ago

Что такое Zabbix

Zabbix — бесплатная система мониторинга. Позволяет отслеживать состояние сетевых узлов, компьютеров и серверов. Возможности: Поддержка…

2 месяца ago

Что такое YouTube

YouTube — компания-владелец одноименного портала для просмотра и хранения видео. Чтобы пользоваться данным порталом достаточно…

2 месяца ago

Что такое yota

Yota — провайдер, предоставляющий доступ к сети Интернет по беспроводной связи. Впервые, сервис начал работать…

2 месяца ago