26 июля 2021 Время чтения: 3 минуты

Виртуальная АТС как сервис в платформе VMmanager

Юрий Галеев

Юрий Галеев

Специалист службы технической поддержки

ISPSystem

C VMmanager хостинг-провайдеры могут предоставлять не просто виртуальную машину с предустановленной ОС, а сервис по модели SaaS. Для него не обязательно разрабатывать собственное решение. Можно использовать свободное ПО. Расскажу о таком решении на примере виртуальной АТС. Настроим сервис с помощью VMmanager. Для этого нам понадобятся сама АТС и веб-интерфейс для управления.

Наиболее популярная бесплатная АТС — Asterisk. Но у нее нет визуального интерфейса, а большинство обычных пользователей не должны разбираться в нюансах управления ею через консоль. Поэтому мы также установим FreePBX для управления. В итоге скрипт будет предоставлять два сервиса: Asterisk и FreePBX.

Как создать скрипт для установки ATC

Создание скрипта в VMmanager. С его помощью АТС можно автоматически устанавливать на виртуальные машины с тегом Linux
Создание скрипта в VMmanager. С его помощью АТС можно автоматически устанавливать на виртуальные машины с тегом Linux
  1. Перейдите в Скрипты → Создать скрипт.
  2. Укажите название скрипта.
  3. Выберите Владельца скрипта. Только владелец сможет изменить скрипт.
  4. Выберите, кому разрешён доступ к образу:
    — владельцу;
    — всем.
  5. Если нужно, включите опцию Скрывать содержимое скрипта. Тогда только владелец скрипта и администраторы платформы смогут просматривать код скрипта и создавать его копии.
  6. Выберите теги для классификации скрипта и его взаимосвязи с ОС. Скрипт доступен для запуска на ОС тогда, когда хотя бы один тег у них совпадает.
  7. Укажите краткое описание скрипта. Оно отображается в списке скриптов.
  8. Выберите тип скрипта: Shell — для ОС семейства Linux;
  9. Введите тело Скрипта в окне редактора:

 #!/bin/sh
 export DEBIAN_FRONTEND="noninteractive"
 
 set -x
  
 LOG_PIPE=/tmp/log.pipe.$$                                                                                                                                                                                                                   
 mkfifo ${LOG_PIPE}
 LOG_FILE=/root/freepbx.log
 touch ${LOG_FILE}
 chmod 600 ${LOG_FILE}
  
 tee < ${LOG_PIPE} ${LOG_FILE} &
  
 exec > ${LOG_PIPE}
 exec 2> ${LOG_PIPE}
  
 echo deb http://ftp.us.debian.org/debian/ buster-backports main > /etc/apt/sources.list.d/backports.list
 echo deb-src http://ftp.us.debian.org/debian/ buster-backports main >> /etc/apt/sources.list.d/backports.list
  
 apt-get update -y
 apt-get upgrade -y
  
 #Install all the necessary packages
  
 apt-get install -y build-essential openssh-server apache2 mariadb-server mariadb-client bison flex php php-curl php-cli php-pdo php-mysql php-pear php-gd php-mbstring php-intl php-bcmath curl sox libncurses5-dev libssl-dev mpg123 libxml2-dev libnewt-dev sqlite3 libsqlite3-dev pkg-config automake libtool autoconf git unixodbc-dev uuid uuid-dev libasound2-dev libogg-dev libvorbis-dev libicu-dev libcurl4-openssl-dev libical-dev libneon27-dev libsrtp2-dev libspandsp-dev subversion libtool-bin python-dev unixodbc dirmngr sendmail-bin sendmail asterisk debhelper-compat cmake libmariadb-dev odbc-mariadb php-ldap
  
 #Install Node.js
  
 curl -sL https://deb.nodesource.com/setup_11.x | bash -
 apt-get install -y nodejs
  
 #Install this required Pear module
  
 pear install Console_Getopt
 
 #Prepare Asterisk
  
 systemctl stop asterisk
 systemctl disable asterisk
 mkdir /etc/asterisk/DIST
 mv /etc/asterisk/* /etc/asterisk/DIST
 cp /etc/asterisk/DIST/asterisk.conf /media/
 sed -i 's/(!)//' /etc/asterisk/DIST/asterisk.conf
 touch /etc/asterisk/modules.conf
 touch /etc/asterisk/cdr.conf
  
 #Configure Apache web server
  
 sed -i 's/\(^upload_max_filesize = \).*/\120M/' /etc/php/7.3/apache2/php.ini
 sed -i 's/\(^memory_limit = \).*/\1256M/' /etc/php/7.3/apache2/php.ini
 sed -i 's/^\(User\|Group\).*/\1 asterisk/' /etc/apache2/apache2.conf
 sed -i 's/AllowOverride None/AllowOverride All/' /etc/apache2/apache2.conf
 systemctl restart apache2
 rm /var/www/html/index.html
  
 #Configure ODBC
  
 cat > /etc/odbcinst.ini << EOF
 [MySQL]
 Description = ODBC for MySQL (MariaDB)
 Driver = /usr/lib/x86_64-linux-gnu/odbc/libmaodbc.so
 FileUsage = 1
 EOF
   
 cat > /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
  
 #Download FFMPEG static build for sound file manipulation
 wget --directory-prefix=/usr/local/src https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz
 tar -C /usr/local/src/ -xvf /usr/local/src/ffmpeg-release-amd64-static.tar.xz
 mv /usr/local/src/ffmpeg-4.4-amd64-static/ffmpeg /usr/local/bin
 #Install FreePBX
 cd /usr/local/src
 wget http://mirror.freepbx.org/modules/packages/freepbx/freepbx-15.0-latest.tgz
 tar zxvf freepbx-15.0-latest.tgz
 cd /usr/local/src/freepbx/
 ./start_asterisk start
 ./install -n
 fwconsole ma installall
 fwconsole reload
 cd /usr/share/asterisk
 mv sounds sounds-DIST
 ln -s /var/lib/asterisk/sounds sounds
 fwconsole restart
  
 cat >/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
  
 systemctl daemon-reload
  
 ps -aux | grep /usr/sbin/asterisk | grep -v grep| awk '{print $2}' | xargs kill
 systemctl enable asterisk.service
 systemctl start asterisk
  
 a2enmod rewrite
 
 service apache2 restart
 

После этого интерфейс виртуальной АТС будет доступен по адресу http://YOUR-IP/admin/config.php
По данной ссылке нужно будет создать первого пользователя — и виртуальная АТС готова к использованию.

С помощью скриптов в VMmanager можно создавать не только АТС, но и разворачивать на виртуальных машинах любое другое ПО, чтобы предоставлять SaaS.

Примерами поделились мои коллеги:

Попробуйте VMmanager для управления виртуальной инфраструктурой

Виртуальные машины на базе KVM и легкие контейнеры LXD;

IaaS — изолированная виртуальная инфраструктура с управлением частными сетями;

SaaS — доставка ВМ с установленным ПО и кастомными настройками на нём;

High availability — в случае аварии ВМ автоматически восстанавливаются на исправном узле.