Хотя самый быстрый способ развернуть систему — использовать официальный FreePBX Distro, в этой статье мы установим Asterisk + FreePBX «с нуля» на чистую Ubuntu с использованием NGINX вместо Apache. Инструкция актуальна для Ubuntu 20.04, 22.04 и 24.04, а также протестирована на Debian 12.
Мы установим:
apt update
apt install -y wget tar ca-certificates curl gnupg cron
Для поддержки русского интерфейса в FreePBX:
# Для Ubuntu:
apt install -y language-pack-ru
# Для Debian:
dpkg-reconfigure locales
# Выберите ru_RU.UTF-8
timedatectl set-timezone Europe/Moscow
apt install -y chrony
systemctl enable chrony --now
Открываем необходимые порты:
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 -y iptables-persistent
netfilter-persistent save
useradd -m asterisk
apt install -y mariadb-server
mysql_secure_installation
При выполнении mysql_secure_installation
задайте пароль root, удалите анонимных пользователей, запретите удалённый вход root и удалите тестовую базу.
apt install -y nginx
Редактируем основной конфиг NGINX:
vi /etc/nginx/nginx.conf
В секции http
добавьте:
client_max_body_size 128M;
Перезапускаем:
systemctl restart nginx
FreePBX 16 требует PHP 7.4, FreePBX 17 — PHP 8.1+. Пример для PHP 7.4:
PHP_VER=7.4
apt install -y 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 php${PHP_VER}-common
Если нужной версии PHP нет в репозитории, подключите ondrej/php
:
add-apt-repository ppa:ondrej/php -y
apt update
vi /etc/php/${PHP_VER}/fpm/php.ini
Измените параметры:
upload_max_filesize = 128M
post_max_size = 128M
date.timezone = "Europe/Moscow"
memory_limit = 512M
vi /etc/php/${PHP_VER}/fpm/pool.d/www.conf
Замените:
user = asterisk
group = asterisk
Перезапустите PHP-FPM:
systemctl restart php${PHP_VER}-fpm
Редактируем конфиг сайта по умолчанию:
vi /etc/nginx/sites-enabled/default
Убедитесь, что есть:
root /var/www/html;
index index.php index.html;
location ~ \.php$ {
fastcgi_pass unix:/run/php/php${PHP_VER}-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 SERVER_NAME $host;
}
Проверка и перезагрузка NGINX:
nginx -t && systemctl reload nginx
FreePBX использует Node.js для некоторых модулей (например, PM2):
export NODE_VER=18
curl -fsSL https://deb.nodesource.com/setup_${NODE_VER}.x | bash -
apt install -y nodejs
node --version # Проверка
cd /usr/src
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
(Россия).
make distclean
./contrib/scripts/get_mp3_source.sh # Поддержка MP3
./configure
make menuselect # можно оставить по умолчанию
make -j $(nproc)
make install
make samples
make config
vi /etc/asterisk/asterisk.conf
Раскомментируйте и установите:
runuser = asterisk
rungroup = asterisk
defaultlanguage = ru
documentation_language = ru_RU
Выставляем права:
chown -R asterisk:asterisk /etc/asterisk /var/{lib,log,spool,run}/asterisk
Не используйте chan_sip
в Asterisk 20! Он устарел. Используйте chan_pjsip
.
vi /etc/asterisk/modules.conf
Убедитесь, что:
; load = chan_sip.so # закомментировано
load = chan_pjsip.so # раскомментировано
systemctl enable asterisk
systemctl start asterisk
asterisk -rvv # проверка
cd ~
apt install -y sox mpg123
wget http://mirror.freepbx.org/modules/packages/freepbx/freepbx-16.0-latest.tgz
tar -zxf freepbx-*.tgz
cd freepbx
./start_asterisk start
./install -n --dbuser root --dbpass ваш_пароль --webroot=/var/www/html
Флаг -n
— неинтерактивный режим. Замените ваш_пароль
на пароль от MariaDB.
fwconsole ma install pm2 cdr
fwconsole ma updateall
fwconsole reload --verbose
Перейдите по адресу: http://IP_сервера
Редактируем:
vi /etc/asterisk/manager.conf
Замените:
; #include manager_additional.conf
; #include manager_custom.conf
На:
;include manager_additional.conf
;include manager_custom.conf
Перезапустите: systemctl restart asterisk
Если odbc show
в CLI Asterisk показывает 0 активных подключений:
apt install -y unixodbc odbcinst libmyodbc
find / -name libmaodbc.so 2>/dev/null
vi /etc/odbcinst.ini
Добавьте (если нет):
[MariaDB]
Description = ODBC for MariaDB
Driver = /usr/lib/x86_64-linux-gnu/odbc/libmaodbc.so
Setup = /usr/lib/x86_64-linux-gnu/odbc/libmaodbc.so
FileUsage = 1
vi /etc/odbc.ini
Убедитесь, что:
[MySQL-asteriskcdrdb]
Description = MySQL connection to 'asteriskcdrdb' database
Driver = MariaDB
Server = 127.0.0.1
Database = asteriskcdrdb
UserName = asterisk
Password = asterisk
Port = 3306
systemctl restart asterisk
asterisk -rx "odbc show"
Теперь должно быть Number of active connections: 1
.
Решение:
rm /etc/cron.deny # если есть и содержит asterisk
Решение:
vi /etc/asterisk/voicemail.conf
Замените : Storage database:
на ; Storage database:
rm -rf /var/www/html/*
mysql -u root -p -e "DROP DATABASE asterisk; DROP DATABASE asteriskcdrdb;"
# Затем повторите установку FreePBX
Вы успешно установили полноценную IP-АТС на базе Asterisk и FreePBX с использованием NGINX. Система готова к настройке SIP-транков, внутренних номеров, очередей и IVR.
Рекомендуется:
Не забудьте прочитать SECURITY DOCUMENT, который появляется после установки Asterisk.
Внимание: Cтатьи здесь сгенерированы нейросетью, пока не правил ошибки, только запустил его да и не до этого. Просто чтобы вы знали и не запускали ядерный реактор по моим статьям ))
НО!
Каждый кейс я реально делал минимум один раз. Серьёзно.
Сервера стоят, клиенты довольны, дата-центры не горят.
Это не просто копипаста — это опыт, выстраданный в бою, просто пересказанный через ИИ.
Если у вас есть вопросы, или Нашли неточность? пишите в коментах —
вместе поправим и сделаем статью более качественной. Я лично объясню нюансы из практики.
Комментарии
Пока нет комментариев. Будьте первым!