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

Обновлено Обновлено: Опубликовано Опубликовано:

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

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

Данная инструкция написана на примере установки Asterisk 18/20 LTS и FreePBX 16/17. В качестве веб-сервера для FreePBX мы будем использовать NGINX.

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

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

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

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

apt update

apt install wget tar language-pack-ru ca-certificates curl gnupg cron

* где:

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

2. Время

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

timedatectl set-timezone Europe/Moscow

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

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

apt install chrony

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

systemctl enable chrony --now

3. Настройка 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

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

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

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

useradd asterisk -m

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

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

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

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

apt install mariadb-server

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

systemctl enable mariadb --now

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

mysqladmin -u root password

NGINX

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

apt install nginx

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

vi /etc/nginx/nginx.conf

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

client_max_body_size 128M;

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

Перезапускаем nginx и разрешаем автозапуск:

systemctl enable nginx

systemctl restart nginx

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

Стартовая страница NGINX

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

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

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

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

Для удобства работы зададим в переменной версию 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

б) Если для установки требуемой версии 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}-pear php${PHP_VER}-snmp php${PHP_VER}-zip php${PHP_VER}-curl php${PHP_VER}-xml

В процессе установки php устанавливается apache, но нам он не нужен — вводим команду для запрета его автозапуска:

systemctl disable apache2

Теперь открываем настройки для 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 enable php${PHP_VER}-fpm

systemctl restart php${PHP_VER}-fpm

NGINX + PHP

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

vi /etc/nginx/sites-enabled/default

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

...
http {
    ...
    server {
        ...
        index index.php ...
        ...
        location ~ \.php$ {
            set $root_path /usr/share/nginx/html;
            fastcgi_pass unix:/run/php/php7.4-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/php7.4-fpm.sock. Для другой версии PHP путь будет другим.

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

nginx -t

И перезапустим nginx:

nginx -s reload

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

vi /usr/share/nginx/html/index.php

<?php phpinfo(); ?>

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

Информационная страница phpinfo

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

NodeJS

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

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

mkdir -p /etc/apt/keyrings

curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg

Создадим переменную с желаемой версией NODEJS:

NODE_MAJOR=18

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

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

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

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

apt update

apt install nodejs

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

node --version

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

Установка Asterisk

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

Копируем ссылку на нужную нам версию Asterisk

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

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

wget https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-18-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

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

 +--------- 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

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

asterisk -c

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

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

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

После успешной проверки, можно запустить 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=/usr/share/nginx/html

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

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

You have successfully installed FreePBX

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

fwconsole ma downloadinstall certman

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

fwconsole ma updateall

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

fwconsole reload --verbose

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

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

Если при попытке ввести команду 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-разрядной версии).

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

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

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

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

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

# Ubuntu # Серверы # Телефония # Управление
Дмитрий Моск — частный мастер
Была ли полезна вам эта инструкция?

Да            Нет