sudo 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
cd /usr/src/ && sudo wget https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-18-current.tar.gz && sudo tar xvf asterisk-18-current.tar.gz && cd asterisk-18*/ && sudo contrib/scripts/get_mp3_source.sh
sudo contrib/scripts/install_prereq install
вводим код страны 7
sudo ./configure
sudo make menuselect
В меню выбираем следующие параметры
Add-ons (See README-addons.txt)
[*] chan_ooh323
[*] format_mp3
Core Sound Packages
[*] CORE-SOUNDS-RU-WAV
[*] CORE-SOUNDS-RU-ULAW
[*] CORE-SOUNDS-RU-ALAW
[*] CORE-SOUNDS-RU-GSM
[*] CORE-SOUNDS-RU-G729
[*] CORE-SOUNDS-RU-G722
[*] CORE-SOUNDS-RU-SLN16
[*] CORE-SOUNDS-RU-SIREN7
[*] CORE-SOUNDS-RU-SIREN14
Music On Hold File Packages
[*] MOH-OPSOUND-WAV
[*] MOH-OPSOUND-ULAW
[*] MOH-OPSOUND-ALAW
[*] MOH-OPSOUND-GSM
Extras Sound Packages
[*] EXTRA-SOUNDS-EN-WAV
[*] EXTRA-SOUNDS-EN-ULAW
[*] EXTRA-SOUNDS-EN-ALAW
[*] EXTRA-SOUNDS-EN-GSM
Applications - добавить
[*] app_macro
Save & Exit
sudo make
По завершении должны получить:
+--------- Asterisk Build Complete ---------+
+ Asterisk has successfully been built, and +
+ can be installed by running: +
+ +
+ make install +
+-------------------------------------------+
sudo make install
По завершении должны получить:
+---- Asterisk Installation Complete -------+
+ +
+ YOU MUST READ THE SECURITY DOCUMENT +
+ +
+ Asterisk has successfully been installed. +
+ If you would like to install the sample +
+ configuration files (overwriting any +
+ existing config files), run: +
+ +
+ For generic reference documentation: +
+ make samples +
+ +
+ For a sample basic PBX: +
+ make basic-pbx +
+ +
+ +
+----------------- or ---------------------+
+ +
+ You can go ahead and install the asterisk +
+ program documentation now or later run: +
+ +
+ make progdocs +
+ +
+ **Note** This requires that you have +
+ doxygen installed on your local system +
+-------------------------------------------+
sudo make samples && \
sudo make config && \
sudo ldconfig
Создаем пользователя Asterisk и запускаем
sudo groupadd asterisk && \
sudo useradd -r -d /var/lib/asterisk -g asterisk asterisk && sudo usermod -aG audio,dialout asterisk && sudo chown -R asterisk.asterisk /etc/asterisk && sudo chown -R asterisk.asterisk /var/{lib,log,spool}/asterisk && sudo chown -R asterisk.asterisk /usr/lib/asterisk
sudo sed -i 's/#AST_USER="asterisk"/AST_USER="asterisk"/' /etc/default/asterisk && sudo sed -i 's/#AST_GROUP="asterisk"/AST_GROUP="asterisk"/' /etc/default/asterisk && sudo sed -i 's/;runuser = asterisk/runuser = asterisk/' /etc/asterisk/asterisk.conf && sudo sed -i 's/;rungroup = asterisk/rungroup = asterisk/' /etc/asterisk/asterisk.conf
sudo systemctl restart asterisk && sudo systemctl enable asterisk && sudo systemctl status asterisk
Проверяем доступность
sudo asterisk -rv
Открываем необходимые порты tcp 5060,5061.
sudo apt -y install mariadb-server mariadb-client && \
sudo systemctl start mariadb && \
sudo systemctl enable mariadb && \
sudo mysql_secure_installation
root SQL password - СЛОЖНЫЙ ПАРОЛЬ_РУТА - генерируем и записываем.
sudo apt install -y curl dirmngr apt-transport-https lsb-release ca-certificates && \
sudo curl -sL https://deb.nodesource.com/setup_14.x | sudo bash && \
sudo apt update && sudo apt -y install gcc g++ make && sudo apt -y install nodejs
sudo apt -y install apache2 && \
sudo cp /etc/apache2/apache2.conf /etc/apache2/apache2.conf_orig && \
sudo sed -i 's/export APACHE_RUN_USER=www-data/export APACHE_RUN_USER=asterisk/' /etc/apache2/envvars && \
sudo sed -i 's/export APACHE_RUN_GROUP=www-data/export APACHE_RUN_GROUP=asterisk/' /etc/apache2/envvars && \
sudo sed -i 's/AllowOverride None/AllowOverride All/' /etc/apache2/apache2.conf && \
sudo rm -f /var/www/html/index.html && \
sudo unlink /etc/apache2/sites-enabled/000-default.conf
sudo apt install -y lsb-release ca-certificates apt-transport-https software-properties-common gnupg2 && \
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/sury-php.list && \
wget -qO - https://packages.sury.org/php/apt.gpg | sudo apt-key add - && \
sudo apt remove php* && sudo apt install -y php7.4-{mysql,cli,common,imap,ldap,xml,fpm,curl,mbstring,zip,gd,gettext,xml,json} libapache2-mod-php7.4 && \
sudo sed -i 's/\(^upload_max_filesize = \).*/\120M/' /etc/php/7.4/apache2/php.ini && \
sudo sed -i 's/\(^upload_max_filesize = \).*/\120M/' /etc/php/7.4/cli/php.ini && \
sudo sed -i 's/\(^memory_limit = \).*/\1256M/' /etc/php/7.4/apache2/php.ini && \
sudo apt install -y sox mpg123 lame ffmpeg sqlite3 git unixodbc dirmngr postfix odbc-mariadb pkg-config libicu-dev
sudo tee /etc/odbcinst.ini<<EOF
[MySQL]
Description = ODBC for MySQL (MariaDB)
Driver = /usr/lib/x86_64-linux-gnu/odbc/libmaodbc.so
FileUsage = 1
EOF
sudo tee /etc/odbc.ini<<EOF
[MySQL-asteriskcdrdb]
Description = MySQL connection to 'asteriskcdrdb' database
Driver = MySQL
Server = localhost
Database = asteriskcdrdb
Port = 3306
Socket = /var/run/mysqld/mysqld.sock
Option = 3
EOF
cd /usr/src && sudo wget http://mirror.freepbx.org/modules/packages/freepbx/7.4/freepbx-16.0-latest.tgz && \
sudo tar xfz freepbx-16.0-latest.tgz && sudo rm -f freepbx-16.0-latest.tgz && \
cd freepbx && sudo systemctl stop asterisk && sudo ./start_asterisk start
Подключаемся к БД и настраиваем (вставляем записанный ранее пароль)
sudo ./install -n --dbuser root --dbpass "СЛОЖНЫЙ ПАРОЛЬ_РУТА"
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
sudo systemctl daemon-reload && sudo systemctl enable freepbx
sudo fwconsole ma disablerepo commercial && \
sudo fwconsole ma installall && \
sudo fwconsole ma delete firewall && \
sudo fwconsole reload && \
sudo fwconsole restart && \
sudo a2enmod rewrite && \
sudo systemctl restart apache2
Если нет записей в CDR-reports, то выполняем следующие команды:
cd /tmp && wget https://wiki.freepbx.org/download/attachments/202375584/libssl1.0.2_1.0.2u-1_deb9u4_amd64.deb && \
wget https://wiki.freepbx.org/download/attachments/122487323/mariadb-connector-odbc_3.0.7-1_amd64.deb && \
sudo dpkg -i libssl1.0.2_1.0.2u-1_deb9u4_amd64.deb && sudo dpkg -i mariadb-connector-odbc_3.0.7-1_amd64.deb && \
sudo apt install -f && ln -s /usr/local/lib/libmaodbc.so /usr/lib/x86_64-linux-gnu/odbc/libmaodbc.so
Как пример устанавливаю модуль asterisk-cli
sudo fwconsole ma download asterisk-cli && sudo fwconsole ma install asterisk-cli
Внимание: после переноса пункта меню во вновь созданное он перестанет отображаться в старом месте.
Для кастомизации создаем/редактируем следующий файл:
nano /etc/asterisk/freepbx_menu.conf
Содержимое как пример: создал дополнительное меню "Главное".
cat freepbx_menu.conf
[extensions]
category=Главное
name=Внутренние номера
[trunks]
category=Главное
name=Линии к провайдеру
[did]
category=Главное
name=Входящие маршруты
[routing]
category=Главное
name=Исходящие маршруты
[asteriskinfo]
category=Главное
name=Статус Asterisk
[cli]
category=Главное
name=Cli
[logfiles]
category=Главное
name=Логи
Убеждаемся, что в разделе Settings → Advanced Settings:
Чтобы узнать название модуоя откройте веб интерфейс и там наведите на любой модуль мышкой, в левом нижнем углу вы увидите ссылку, в конце которой написано название модуля.
Теперь после сохранения файла, выполняем fwconsole restart, только убедитесь, что на сервере нет звонков.
Переходим Settings - Asterisk SIP settings. В самом последнем разделе "Video codecs" переключаем на Enabled и активируем кодеки h264 и vp8.
Можем откорректировать необходимый битрейт в строке ниже.
На экстеншене (pjsip) на вкладке "Advanced" значения "Max audio streams" и "Max video streams" ставлю равные 10.
nano /etc/logrotate.d/freepbx
/var/log/asterisk/queue_log {
daily
missingok
rotate 30
notifempty
sharedscripts
create 0640 asterisk asterisk
su asterisk asterisk
}
/var/spool/mail/asterisk {
daily
missingok
rotate 7
notifempty
sharedscripts
create 0660 asterisk mail
su asterisk mail
}
/var/log/asterisk/messages
/var/log/asterisk/event_log
/var/log/asterisk/full
/var/log/asterisk/dtmf
/var/log/asterisk/fail2ban {
daily
missingok
rotate 7
notifempty
sharedscripts
create 0640 asterisk asterisk
su asterisk asterisk
postrotate
/usr/sbin/asterisk -rx 'logger reload' > /dev/null 2> /dev/null
endscript
}
systemctl restart logrotate
Создаем юзера в SQL и даём права на БД:
mysql
CREATE USER 'deletecdr'@'localhost' IDENTIFIED BY 'a5QW3m#ND9w#9';
GRANT DELETE, SELECT, INSERT ON asteriskcdrdb.cdr TO 'deletecdr'@'localhost';
GRANT DELETE, SELECT, INSERT ON asteriskcdrdb.cel TO 'deletecdr'@'localhost';
quit
Создаем файл скрипта
nano /etc/asterisk/delete_cdr.sh
#!/bin/bash
# Задаём переменные (Specify variables)
MYSQL_USER="deletecdr" # Имя пользователя MySQL (MySQL username)
MYSQL_PASSWORD="a5QW3m#ND9w#9" # Пароль пользователя MySQL (MySQL password)
MYSQL="/usr/bin/mysql" # Расположение MySQL (whereis mysql)
MYSQLCHECK="/usr/bin/mysqlcheck" # Расположение MySQLcheck (whereis mysqlcheck)
EMAIL="admins@your.mail" # Почтовый адрес для уведомлений (Email address for notification)
TYPE="month" # Интервал времени (SECOND,MINUTE,HOUR,DAY,MONTH,YEAR)
NUMBER="6" # Количество (5 месяца) (the number 5 months)
LOG="/var/log/cdr-temp.log" # Лог файл перезаписываемый и отсылаемый на почту(A temporary log file is sent on email as a report)
LOG1="/var/log/cdr-clean.log" # Лог файл постоянный (The log file permanent)
data="`date`"
# Чистим лог от старых записей (Clean old log records from)
echo > $LOG
# Делаем запись даты в лог (The date recorded in the log)
echo >> $LOG1
echo "---------=$data=---------" >> $LOG1
echo >> $LOG1
# Чистим asteriskcdrdb.cdr (clean asterisksdrdb.cdr)
if $MYSQL -u$MYSQL_USER -p$MYSQL_PASSWORD -e "delete from asteriskcdrdb.cdr where calldate < DATE_SUB(NOW(), interval $NUMBER $TYPE);"; then
echo >> $LOG1
echo Старые записи из asteriskcdrdb.cdr успешно удалены >> $LOG1
echo >> $LOG1
else
echo Не удалось удалить старые записи из asteriskcdrdb.cdr >> $LOG1
echo >> $LOG1
exit 0
fi
# Чистим asteriskcdrdb.cel (clean asteriskcdrdb.cel)
if $MYSQL -u$MYSQL_USER -p$MYSQL_PASSWORD -e "delete from asteriskcdrdb.cel where eventtime < DATE_SUB(NOW(), interval $NUMBER $TYPE);"; then
echo Старые записи из asteriskcdrdb.cel успешно удалены >> $LOG1
echo >> $LOG1
else
echo Не удалось удалить старые записи из asteriskcdrdb.cel >> $LOG1
echo >> $LOG1
exit 0
fi
# Оптимизируем asteriskcdrdb (optimize asteriskcdrdb table)
if $MYSQLCHECK -u$MYSQL_USER -p$MYSQL_PASSWORD --optimize asteriskcdrdb; then
echo База asteriskcdrdb успешно оптимизирована >> $LOG1
echo >> $LOG1
else
echo Не удалось оптимизировать базу asteriskcdrdb >> $LOG1
echo >> $LOG1
exit 0
fi
# Чистим папки от файлов записи (Records you want to delete, and empty folders)
find /recordings/ -name "*.wav*" -type f -mtime +180 -print -delete
find /recordings/ -type d -empty -print -delete
Права на выполнение:
chmod +x /etc/asterisk/delete_cdr.sh
Добавляем в крон:
nano /etc/crontab
Последней строкой добавляем:
* * 1 * * root /etc/asterisk/delete_cdr.sh