25.03.2024 | 10 минут чтения

Установка FreePBX 16 и Asterisk 18 на Debian 12

Данная статья является пошаговой инструкцией по установке Asterisk 18 и веб интерфейса FreePBX 16 на операционную систему Debian 12
Подключаем стандартные репозитории Debian 12 Bookworm

Для этого отредактируем файл sources.list с основной информацией о базовых репозиториях Debian 12 Bookworm. Добавляем репозитории contrib и non-free

Далее все команды, в приведенной инструкции, выполняются из под root пользователя.


nano /etc/apt/sources.list
После этого выполняем обновление кэша менеджера пакетов:

apt update
Далее обновляем все пакеты в системе

sudo apt -y upgrade
Базовая конфигурация Firewalld

В предыдущих версиях для драйвера chan_SIP назначались по умолчанию порты 5060 и 5061, а порты 5160 и 5161 назначались для chan_PJSIP. В последней версии FreePBX эти настройки противоположны. (5060 и 5061 для chan_PJSIP и 5160 и 5161 для chan_SIP)
  • 80, 443/tcp: FreePBX administration interface
  • 5060/udp: FreePBX chan_PJSIP signaling
  • 5061/tcp: FreePBX chan_PJSIP secure signaling
  • 8001, 8003/tcp: UCP NodeJS Server
  • 8088-8089/tcp: Asterisk Builtin mini-HTTP server

firewall-cmd --zone=public --add-port=80/tcp --permanent &&
firewall-cmd --zone=public --add-port=443/tcp --permanent &&
firewall-cmd --zone=public --add-port=5060/udp --permanent &&
firewall-cmd --zone=public --add-port=5061/tcp --permanent &&
firewall-cmd --zone=public --add-port=8001/tcp --permanent &&
firewall-cmd --zone=public --add-port=8003/tcp --permanent &&
firewall-cmd --zone=public --add-port=8088-8089/tcp --permanent &&
firewall-cmd --reload
Установка Русского языка в системе
Это нужно, чтобы потом в FreePBX была возможность переключаться между русским и английским

apt install locales
dpkg-reconfigure locales
reboot
Установим MariaDB Database Server
Установка Mariadb для базы данных FreePBX

apt -y install mariadb-server mariadb-client
systemctl enable --now mariadb
Затем настроим безопасность MariaDB


mysql_secure_installation
  Switch to unix_socket authentication [Y/n] n
  Change the root password? [Y/n] n
  Remove anonymous users? [Y/n] Y
  Disallow root login remotely? [Y/n] Y
  Remove test database and access to it? [Y/n] Y
  Reload privilege tables now? [Y/n] Y
Установим ODBC и MariaDB ODBC Connector

apt install -y unixodbc odbcinst odbc-mariadb
Настроим ODBC и MariaDB ODBC connector
Чтобы избежать проблемы c CDR, явно определите следующие два файла:

nano /etc/odbcinst.ini

[MySQL]
Description = ODBC for MySQL (MariaDB)
Driver = /usr/lib/x86_64-linux-gnu/odbc/libmaodbc.so
FileUsage = 1

nano /etc/odbc.ini

[MySQL-asteriskcdrdb]
Description = MySQL connection to 'asteriskcdrdb' database
Driver = MySQL
Server = localhost
Database = asteriskcdrdb
Port = 3306
Socket = /var/run/mysqld/mysqld.sock
Option = 3


Для проверки можно использовать odbcinst, чтобы запросить драйвер и убедиться, что конфигурация корректная.

#odbcinst -q -d
[MySQL]

# odbcinst -q -s
[MySQL-asteriskcdrdb]
Установим дополнительные пакеты

apt -y install git vim curl wget libnewt-dev libssl-dev libncurses5-dev subversion software-properties-common libsqlite3-dev build-essential libjansson-dev libxml2-dev uuid-dev sox mpg123 lame ffmpeg

Создание каталога для сборки проекта
И Asterisk и FreePBX мы будем собирать из исходного кода. Перейдем сначала в каталог(/usr/src), в котором будем производить сборку и разархивирование

cd /usr/src/
Установка Asterisk 18
Поскольку FreePBX 16 не поддерживает Asterisk 20 по состоянию на 18.11.2023, загрузим и установим Asterisk 18

cd /usr/src &&
wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-18-current.tar.gz &&
tar zxf asterisk-18-current.tar.gz &&
cd asterisk-18.*/
Установим необходимые пакеты для сборки Asterisk. В процессе задаётся код региона вашей телефонной системы. Для Росии - 7

sudo ./contrib/scripts/install_prereq install &&
sudo ./contrib/scripts/get_mp3_source.sh
Поскольку и jannson (библиотека C, необходимая для кодирования/декодирования мультимедиа), и PJSIP включены в сценарий установки Asterisk, просто добавим ключ --with-jansson-bundled и ключ --with-pjproject-bundled при запуске configure

./configure --with-jansson-bundled --with-pjproject-bundled
Настройка параметров меню Asterisk

make menuselect
[Примечание]:
  • Когда появится всплывающее меню, установите (Core Sound Files)
  • Так как в Asterisk 18 модуль app_macro.so имеет статус dedicated, а FreePBX его все еще использует, то его приходится так же выбрать

Add-ons (See README-addons.txt)
 +--> Select format_mp3
Applications
 +--> Select app_macro
Bridging Modules
Channel Event Logging
Channel Drivers
Codec Translators
 +---> Select all External Codecs
Format Interpreters
Dialplan Functions
PBX Modules
Resource Modules
Test Modules
Compiler Flags
Utilities
AGI Samples
Core Sound Packages
 +--> Select WAV, ULAW, ALAW, GSM, G729, G722
Music On Hold File Packages
 +--> Select WAV, ULAW, ALAW, GSM, G729, G722
MENUSELECT_EXTRA_SOUNDS
 +--> Select WAV, ULAW, ALAW, GSM, G729, G722
Теперь всё готово для сборки Asterisk

make &&
make install
Далее

make basic-pbx &&
make config &&
ldconfig
Добавим пользователя и группу Asterisk

groupadd asterisk
useradd -r -d /var/lib/asterisk -g asterisk asterisk
usermod -aG audio,dialout asterisk
Выполним команды указанные ниже, чтоб быть уверенными что процесс asterisk запускается от пользователя asterisk

sed -i 's/#AST_USER="asterisk"/AST_USER="asterisk"/' /etc/default/asterisk &&
sed -i 's/#AST_GROUP="asterisk"/AST_GROUP="asterisk"/' /etc/default/asterisk &&
sed -i 's/;runuser = asterisk/runuser = asterisk/' /etc/asterisk/asterisk.conf  &&
sed -i 's/;rungroup = asterisk/rungroup = asterisk/' /etc/asterisk/asterisk.conf &&

Давайте обновим права владельца на файлы, чтобы пользователь asterisk имел к ним надлежащий доступ.

chown -R asterisk:asterisk {/etc,/var/lib,/var/spool,/var/log,/var/run}/asterisk &&
systemctl restart asterisk && systemctl enable asterisk && systemctl status asterisk
Проверяем, что у нас есть подключение в консоль астериска

asterisk -rvvvvv
Установка FreePBX 16
Установим NodeJS
Для этого будем использовать репозиторий. NodeJS будем устанавливать версии 20.х

curl -fsSL https://deb.nodesource.com/setup_20.x | bash - &&\
apt-get install -y nodejs
Убедитесь что у вас установилась нужная версия

# node -v
v20.11.1
# npm -v
10.2.4
Установим Apache Web Server для работы FreePBX GUI

apt -y install apache2 && \
cp /etc/apache2/apache2.conf /etc/apache2/apache2.conf_orig && \
sed -i 's/export APACHE_RUN_USER=www-data/export APACHE_RUN_USER=asterisk/' /etc/apache2/envvars && \
sed -i 's/export APACHE_RUN_GROUP=www-data/export APACHE_RUN_GROUP=asterisk/' /etc/apache2/envvars && \
sed -i 's/AllowOverride None/AllowOverride All/' /etc/apache2/apache2.conf && \
rm -f /var/www/html/index.html && \
unlink /etc/apache2/sites-enabled/000-default.conf
Установка PHP (PHP 7.4)
Вначале установим дополнительные пакеты

apt install -y lsb-release && \
apt install -y ca-certificates apt-transport-https software-properties-common gnupg2 wget curl
FreePBX требователен к версии PHP. Установим версию PHP 7.4

wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg && \
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | tee /etc/apt/sources.list.d/php.list && \
apt update && apt install -y php7.4 libapache2-mod-php7.4 && \
apt install -y php7.4-{mysql,cli,common,imap,ldap,xml,fpm,curl,mbstring,zip,gd,gettext,xml,json} && \
php -v

Если выдает ошибку, то репозиторий блокирует доступ из вашей страны
Выход:
mcedit /etc/apt/sources.list.d/php.list
#deb https://packages.sury.org/php/ bookworm main
deb https://ftp.mpi-inf.mpg.de/mirrors/linux/mirror/deb.sury.org/repositories/php/ bookworm main

Дополнительные настройки. Установим максимальный размер загрузки файлов для PHP на 120 МБ

sed -i 's/\(^upload_max_filesize = \).*/\120M/' /etc/php/7.4/apache2/php.ini && \
sed -i 's/\(^upload_max_filesize = \).*/\120M/' /etc/php/7.4/cli/php.ini && \
sed -i 's/\(^memory_limit = \).*/\1256M/' /etc/php/7.4/apache2/php.ini
Так же установим еще несколько пакетов

apt install -y sox mpg123 lame ffmpeg sqlite3 git dirmngr pkg-config libicu-dev
Установим Freepbx 16
Скачаем и установим последнюю версию FreePBX 16:

cd /usr/src && wget http://mirror.freepbx.org/modules/packages/freepbx/7.4/freepbx-16.0-latest.tgz && \
tar xfz freepbx-16.0-latest.tgz && \
cd freepbx && \ 
./start_asterisk restart
Запустим скрипт установки:

cd /usr/src/asterisk-18.* &&
make basic-pbx &&
make config &&
ldconfig &&
cd /usr/src/freepbx &&
./start_asterisk restart &&
ps aux | grep asterisk &&
rm -f /etc/asterisk/asterisk.conf &&
./install -n
Установим модули Freepbx
fwconsole ma installall - эта команда установит ВСЕ модули FreePBX. Но мы рекомендуем, устанавливать только нужные вам модули в работе. И не ставить лишние. Так система работает быстрее.

fwconsole ma disablerepo commercial &&
fwconsole ma enablerepo extended &&
fwconsole ma delete firewall &&
fwconsole chown &&
fwconsole reload &&
fwconsole restart &&
a2enmod rewrite &&
systemctl restart apache2
FreePBX Systemd Startup скрипт
Создадим systemd unit для автоматического запуска службы.

sudo tee /etc/systemd/system/freepbx.service<<EOF
[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
EOF
Включим и запустим службу FreePBX

systemctl daemon-reload && systemctl enable freepbx && systemctl start freepbx
Проверка функционирования Asterisk CDR
Убедимся, что CDR подключение установлено правильно

# asterisk -rx "cdr show status"

Call Detail Record (CDR) settings
----------------------------------
  Logging:                    Enabled
  Mode:                       Simple
  Log calls by default:       Yes
  Log unanswered calls:       No
  Log congestion:             No

  Ignore bridging changes:    No

  Ignore dial state changes:  No

* Registered Backends
  -------------------
    Adaptive ODBC

# asterisk -rx "odbc show"

ODBC DSN Settings
-----------------

  Name:   asteriskcdrdb
  DSN:    MySQL-asteriskcdrdb
    Number of active connections: 1 (out of 5)
    Logging: Disabled
Теперь можно открыть FreePBX, набрав в браузере ip адрес сервера
Если возникли вопросы, предложения или замечания по инструкции. Вы можете написать комментарий ниже.
Связанные статьи
Преимущества и недостатки обоих типов подключения.
Отличие виртуально АТС от невиртуальной
Интеграция CRM-системы с телефонией, как лучший способ продаж.
Как IP-телефония вместе с CRM развивает ваш бизнес?