Установка 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.