2026-09-19
Установка Asterisk + FreePBX на Ubuntu и Debian: полная инструкция

Установка Asterisk + FreePBX на Ubuntu и Debian: полная инструкция

Asterisk — открытая АТС, FreePBX — веб-панель управления для неё. Самый быстрый способ развернуть связку — ISO-образ FreePBX Distro, но в этой инструкции мы установим всё «с нуля» на Ubuntu/Debian.

Пример основан на Asterisk 22 LTS и FreePBX 17. В качестве веб-сервера используется NGINX + PHP-FPM. Протестировано на Ubuntu 22.04/24.04/26.04 и Debian 12.


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

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

apt update
apt install wget tar ca-certificates curl gnupg cron

где:

  • wget — загрузка файлов;
  • tar — распаковка архивов;
  • ca-certificates — корневые сертификаты;
  • curl — HTTP-запросы;
  • gnupg — работа с подписями репозиториев;
  • cron — планировщик заданий.

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

Для русского интерфейса FreePBX ставим локаль.

Ubuntu:

apt install language-pack-ru

Debian:

dpkg-reconfigure locales

Выбираем в меню ru_RU.UTF-8.

3. Время

timedatectl set-timezone Europe/Moscow
apt install chrony
systemctl enable chrony --now

Список зон — timedatectl list-timezones.

4. Брандмауэр

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

  • 5060 (tcp/udp) — SIP;
  • 5061 (tcp/udp) — SIP over TLS;
  • 80 (tcp) — HTTP;
  • 443 (tcp) — HTTPS;
  • 10000–20000 (udp) — голосовой трафик.
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 и веб-сервера — чтобы NGINX имел доступ к каталогам АТС:

useradd asterisk -m

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

Устанавливаем связку NGINX + PHP + MySQL + NodeJS.

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

Скачиваем и ставим конфигуратор репозитория MySQL:

curl -sLO https://dev.mysql.com/get/mysql-apt-config_0.8.35-1_all.deb
dpkg -i mysql-apt-config_*_all.deb
apt update
apt install mysql-server

Система попросит задать пароль root — вводим дважды.

Создаём базы и пользователя:

mysql -p
> CREATE DATABASE asterisk DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
> CREATE DATABASE asteriskcdrdb DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
> CREATE USER 'asterisk'@'localhost' IDENTIFIED BY 'asterisk_123';
> GRANT ALL PRIVILEGES ON asterisk.* TO 'asterisk'@'localhost';
> GRANT ALL PRIVILEGES ON asteriskcdrdb.* TO 'asterisk'@'localhost';
> QUIT

NGINX

apt install nginx
vi /etc/nginx/nginx.conf

В секции http добавляем:

http {
    client_max_body_size 128M;
    ...
}

Разрешает загрузку файлов до 128 Мб.

systemctl restart nginx

Открываем http://<IP-сервера> — увидим приветственную страницу NGINX.

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

Версия PHP зависит от версии FreePBX: для FreePBX 17 требуется PHP 8.2. Требования удобно смотреть на странице инструкций Sangoma.

PHP_VER=8.2

Проверяем, что версия есть во встроенных репозиториях:

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

а) Версия доступна без доп. репозитория:

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 на Ubuntu и на Debian, затем:

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.ini:

vi /etc/php/${PHP_VER}/fpm/php.ini
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/asterisk.conf
[asterisk]
user = asterisk
group = asterisk
listen = /run/php/php-fpm-asterisk.sock
listen.owner = www-data
listen.group = www-data
pm = dynamic
pm.max_children = 10
pm.start_servers = 4
pm.min_spare_servers = 2
pm.max_spare_servers = 6

FreePBX работает с файлами в /etc/asterisk, владелец — asterisk; поэтому PHP должен выполняться от того же пользователя, чтобы иметь права на запись конфигов.

systemctl restart php${PHP_VER}-fpm

NGINX + PHP

vi /etc/nginx/sites-enabled/default

В блоке server:

root /var/www/html;
index index.php ...;

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

root указывает на домашний каталог сайта, index — файл по умолчанию, location ~ .php$ передаёт PHP-скрипты в наш пул.

nginx -t && nginx -s reload

Создаём тестовый файл:

vi /var/www/html/index.php
<?php phpinfo();

Открываем http://<IP-сервера> — должна появиться страница с версией PHP и модулями.

NodeJS

В репозиториях Ubuntu версия NodeJS может быть устаревшей. Ставим Node 20:

export NODE_VER=20
curl -sL https://deb.nodesource.com/setup_${NODE_VER}.x | bash -
apt install nodejs
node --version

Установка Asterisk

Ставим Asterisk 22 LTS. Все версии и ссылки — на странице загрузок. Учитывайте совместимость версий Asterisk и FreePBX.

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

Выбор модулей (можно оставить по умолчанию):

make menuselect

Сборка:

make -j `nproc`
+--------- Asterisk Build Complete ---------+
+ Asterisk has successfully been built, and +
+ can be installed by running:              +
+                make install               +
+-------------------------------------------+

Установка:

make install
make config
make samples

make install — установка, 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 устарел и в новых версиях не работает — используйте chan_pjsip.

Тестовый запуск в консоли:

asterisk -c

Должны увидеть Asterisk Ready. Ошибки и предупреждения не критичны — обычно устраняются отключением неиспользуемых модулей.

Запускаем как сервис:

systemctl enable asterisk
systemctl start asterisk

Установка FreePBX

cd ~
apt install sox mpg123

где:

  • sox — конвертация аудио;
  • mpg123 — декодер mp3 в реальном времени.

Скачиваем FreePBX 17:

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

Проверяем Asterisk:

./start_asterisk start
STARTING ASTERISK
Asterisk is already running

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

./install -n --dbuser=asterisk --dbpass=asterisk_123 --webroot=/var/www/html

Указываем учётные данные СУБД (asterisk / asterisk_123) и домашний каталог NGINX.

В конце:

You have successfully installed FreePBX

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

fwconsole ma install pm2 cdr

где:

  • pm2 — менеджер приложений NodeJS;
  • cdr — отчёты о звонках.

Обновляем всё:

fwconsole ma updateall
fwconsole reload --verbose

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

Отключаем лишние include менеджера:

vi /etc/asterisk/manager.conf

Меняем:

#include manager_additional.conf
#include manager_custom.conf

на:

;include manager_additional.conf
;include manager_custom.conf
systemctl restart asterisk

Asterisk + FreePBX готовы.


CDR и подключение к базе данных

Если CDR не пишется, проверяем ODBC в консоли 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: command not found:

apt install unixodbc odbcinst

Нужно установить коннектор ODBC и изменить драйвер в odbc.ini. Для MariaDB — см. инструкцию по ODBC.

vi /etc/odbc.ini
[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

Путь до библиотеки может отличаться — находим её:

find / -name libmaodbc.so
systemctl restart asterisk
asterisk -r
> odbc show
  Number of active connections: 1 (out of 5)

Подключение работает.


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

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

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/*
mysql
> drop database asterisk;
> drop database asteriskcdrdb;
> quit

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

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

Тонкости и подводные камни

  • Версии Asterisk/FreePBX должны соответствовать друг другу — сверяйтесь с таблицей Sangoma перед установкой.
  • PHP-версия критична — FreePBX 17 требует PHP 8.2; на старых Ubuntu понадобится репозиторий ondrej/php.
  • chan_sip устарел — используйте chan_pjsip.
  • Пул PHP-FPM от asterisk — иначе панель не сможет писать конфиги АТС.
  • client_max_body_size и upload_max_filesize — без них не загрузятся модули и аудиофайлы.
  • NodeJS 20 — старые версии из репозитория несовместимы с современными модулями FreePBX.
  • CDR через ODBC — на MariaDB нужен драйвер libmaodbc.so и правка odbc.ini.

Шпаргалка

# подготовка
apt install wget tar ca-certificates curl gnupg cron language-pack-ru chrony
timedatectl set-timezone Europe/Moscow
useradd asterisk -m

# веб-сервер
apt install nginx mysql-server php8.2-fpm php8.2-{bcmath,gd,json,mbstring,mysqlnd,snmp,zip,curl,xml}
# пул php-fpm от asterisk -> /run/php/php-fpm-asterisk.sock

# asterisk 22
wget https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-22-current.tar.gz
./contrib/scripts/install_prereq install && ./configure && make -j `nproc`
make install config samples
chown -R asterisk:asterisk /etc/asterisk /var/{lib,log,spool}/asterisk
systemctl enable asterisk --now

# freepbx 17
wget http://mirror.freepbx.org/modules/packages/freepbx/freepbx-17.0-latest.tgz
./install -n --dbuser=asterisk --dbpass=asterisk_123 --webroot=/var/www/html
fwconsole ma install pm2 cdr && fwconsole ma updateall

Проверено на: Ubuntu 22.04/24.04/26.04, Debian 12 + Asterisk 22 LTS, FreePBX 17.
Дата: Сентябрь 2026.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *