Установка Kamailio v.5 + Asterisk 16 и WEB GUI Siremis

Установка Kamailio v.5 + Asterisk 16 и WEB GUI Siremis

Устанавливая и масштабируя IP PBX на базе Asterisk может возникнуть ситуация, когда аппаратных ресурсов сервера недостаточно. Эта ситуация может возникнуть вследствие увеличения количества обрабатываемых вызовов. В таком случае системный администратор принимает решение о разделении нагрузки. Одним из способов в решении этой задачи является установка SIP Proxy, который выполняет роль балансировщика. Цель данной статьи – установить Kamailio v.5 и Asterisk (у нас их будет два), а также Siremis – GUI панель управления для Kamailio для новичков.

Все установки мы будем производить на виртуальных машинах, которые находятся в одной локальной сети. При этом если бы у них были публичные адреса или в облаке, особых отличий бы не было. Также мы постараемся максимально подробно описать процесс установки для изучения SIP Proxy новичками.

Исходные данные:

Схема реализации:

Kamailio

Преамбула

Предположим, что в нашей организации уже установлен Asterisk сервер, который обрабатывает огромное количество вызовов. Тестирование и эксплуатация выявила, что данный сервер не справляется с нагрузкой и мы устанавливаем еще один Asterisk. Если быть точнее то выполним клонирование действующего сервера Asterisk. Также выполним установку Kamailio в качестве SIP Proxy, который будет выполнять роль “балансировщика” входящих звонков. В рамках данной статьи мы будем производим новую установку Asterisk 16. Также будет выполнена установка Kamailio и Siremis.

Все действия выполняются от имени пользователя ‘root

Подготовка

Во-первых, подготовим систему и обновим все пакеты до актуальных версий. Также выполним обновление системы:

apt-get autoremove -y
apt-get update && apt-get dist-upgrade -y --allow-unauthenticated --allow-downgrades --allow-remove-essential --allow-change-held-packages

Во-вторых, выполним установку и настройку необходимых пакетов для Asterisk, Kamailio, Siremis.

Зависимости

apt-get install -y git wget curl sudo apt-transport-https lsb-release systemd systemd-sysv debconf-utils ca-certificates dialog nano vim dirmngr libtiff5-dev libtiff-tools openssh-server
apt-get install -y bash bash-completion htop iftop nmap bison flex unzip bzip2 mc telnet pwgen aptitude aptitude-common aptitude-doc-en debtags
apt-get install -y libclass-accessor-perl libcwidget3v5 libio-string-perl libparse-debianchangelog-perl libsub-name-perl apt-xapian-index libcwidget-dev libhtml-parser-perl libhtml-template-perl libxml-simple-perl libvpb1 libpcre3-dev

MariaDB

apt-get install -y mariadb-server mariadb-client libmariadb3 libmariadbclient-dev screen
mysql_secure_installation
systemctl start mariadb
systemctl enable mariadb

В процессе установки необходимо ввести пароль суперпользователя root.

Apache2

apt-get install -y apache2 apache2-utils pwauth libapache2-mod-authnz-external
systemctl reload apache2
systemctl enable apache2

PHP

apt-get install -y php libapache2-mod-php php-cli php-cgi php-pear php-common php-phpseclib php-mbstring php-gettext php-fpm php-json php-pdo php-mysql php-mysqli php-imagick php-zip php-gd php-curl php-mbstring php-curl php-xml php-pear php-bcmath
php -v
a2enmod php7.3
a2enmod rewrite
pear channel-update pear.php.net
pear install XML_RPC2

PhpMyAdmin

cd /usr/src/
wget https://files.phpmyadmin.net/phpMyAdmin/5.0.1/phpMyAdmin-5.0.1-all-languages.tar.gz
tar xvf phpMyAdmin-5.0.1-all-languages.tar.gz
mv phpMyAdmin-5.0.1-all-languages /usr/share/phpmyadmin
mkdir -p /var/lib/phpmyadmin/tmp
chown -R www-data:www-data /var/lib/phpmyadmin
chown -R www-data:www-data /usr/share/phpmyadmin
mkdir /etc/phpmyadmin/
cp /usr/share/phpmyadmin/config.sample.inc.php  /usr/share/phpmyadmin/config.inc.php

# Генерируем BLOWFISH пароль для PhpMyAdmin
PMABLOWFISH=$(dd if=/dev/urandom bs=1 count=32 2>/dev/null | base64)

sed -i "s/.*$cfg['blowfish_secret'] = .*/\$cfg['blowfish_secret'] = '${PMABLOWFISH}'; /g" /usr/share/phpmyadmin/config.inc.php
echo "//$cfg['TempDir'] = '/var/lib/phpmyadmin/tmp';" >> /usr/share/phpmyadmin/config.inc.php
cat > /etc/apache2/conf-enabled/phpmyadmin.conf << 'EOF'
# Copyright (C) 2020, PRO-VOIP.RU <info@pro-voip.ru>
# All rights reserved
Alias /phpmyadmin /usr/share/phpmyadmin

<Directory /usr/share/phpmyadmin>
    Options SymLinksIfOwnerMatch
    DirectoryIndex index.php

    <IfModule mod_php5.c>
        <IfModule mod_mime.c>
            AddType application/x-httpd-php .php
        </IfModule>
        <FilesMatch ".+\.php$">
            SetHandler application/x-httpd-php
        </FilesMatch>

        php_value include_path .
        php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp
        php_admin_value open_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/php-gettext/:/usr/share/php/php-php-gettext/:/usr/share/javascript/:/usr/share/php/tcpdf/:/usr/share/doc/phpmyadmin/:/usr/share/php/phpseclib/
        php_admin_value mbstring.func_overload 0
    </IfModule>
    <IfModule mod_php.c>
        <IfModule mod_mime.c>
            AddType application/x-httpd-php .php
        </IfModule>
        <FilesMatch ".+\.php$">
            SetHandler application/x-httpd-php
        </FilesMatch>

        php_value include_path .
        php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp
        php_admin_value open_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/php-gettext/:/usr/share/php/php-php-gettext/:/usr/share/javascript/:/usr/share/php/tcpdf/:/usr/share/doc/phpmyadmin/:/usr/share/php/phpseclib/
        php_admin_value mbstring.func_overload 0
    </IfModule>

</Directory>

# Authorize for setup
<Directory /usr/share/phpmyadmin/setup>
    <IfModule mod_authz_core.c>
        <IfModule mod_authn_file.c>
            AuthType Basic
            AuthName "phpMyAdmin Setup"
            AuthUserFile /etc/phpmyadmin/htpasswd.setup
        </IfModule>
        Require valid-user
    </IfModule>
</Directory>

# Disallow web access to directories that don't need it
<Directory /usr/share/phpmyadmin/templates>
    Require all denied
</Directory>
<Directory /usr/share/phpmyadmin/libraries>
    Require all denied
</Directory>
<Directory /usr/share/phpmyadmin/setup/lib>
    Require all denied
</Directory>
EOF
mariadb < /usr/share/phpmyadmin/sql/create_tables.sql -uroot -pYOUR_PASSWORD_ROOT_MARIADB
mariadb -uroot -pYOUR_PASSWORD_ROOT_MARIADB <<MY_QUERY
GRANT ALL PRIVILEGES ON *.* TO 'YOUR_USERNAME_FOR_PHPMYADMIN'@'localhost' IDENTIFIED BY 'YOUR_PASSWORD_FOR_USERNAME' WITH GRANT OPTION;
FLUSH PRIVILEGES;
MY_QUERY
systemctl restart apache2

На данном этапе мы подготовили ОС Debian 10 для установки Asterisk, Kamailio и Siremis. Далее выполним устновку серверов Asterisk-1 и Asterisk-2. Установка однотипная для обоих серверов. Если у вас уже есть установленный сервер Asterisk, вам необходимо его клонировать. В нашей базе знаний есть статья – Установка Asterisk 16 с нуля.

Установка Asterisk

Первым делом установим зависимости для Asterisk 16, выполнив следующие команды:

apt-get install -y linux-headers-`uname -r` libapache2-mod-log-sql-ssl libfreetype6-dev doxygen yasm nasm gdb cmake build-essential make automake autoconf 'libtool-bin|libtool' python python-dev uuid uuid-dev 'libjpeg8-dev|libjpeg62-turbo-dev' libncurses5-dev libssl-dev libpcre3-dev libcurl4-openssl-dev libldns-dev libedit-dev libspeexdsp-dev libsqlite3-dev perl libgdbm-dev libdb-dev ccache libpng-dev libopenal-dev libcodec2-dev libsoundtouch-dev libmagickcore-dev liblua5.2-dev libsndfile-dev libopencv-dev libavformat-dev libx264-dev erlang-dev libldap2-dev libperl-dev
apt-get install -y libpq-dev subversion gcc g++ lynx bison flex memcached libshout3-dev libmariadbclient-dev libmariadb3 libvpx-dev mpg123 libmpg123-dev libmp3lame-dev libncurses5-dev libpng16-16 libxml2-dev libxml2 libcurl4 libnewt-dev sqlite3
apt-get install -y libasound2-dev sox pkg-config libedit-dev libcppdb-odbc0 unixodbc unixodbc-dev libogg-dev libvorbis-dev libical-dev libneon27-dev libsrtp2-1 libspandsp-dev sendmail sendmail-bin sendmail-cf
apt-get install -y haveged odbcinst libjansson4 libjansson-dev libsqlite3-0 libxml2 libspeex1

Скачивание и компиляция Asterisk:

cd /usr/src/
wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-16-current.tar.gz
tar xvfz asterisk-16-current.tar.gz
cd asterisk-16.*
./contrib/scripts/get_mp3_source.sh
./contrib/scripts/install_prereq install
./configure NOISY_BUILD=yes --with-crypto --with-ssl=ssl --with-srtp --with-jansson-bundled
make menuselect

В обязательном порядке необходимо активировать следующие компоненты, если оне не выбраны:

  • Voicemail Build Options
  • ODBC_STORAGE

Остальные компоненты устанавливаются в зависимости от потребностей.

Далее собираем нашу “Звездочку”:

make && make install && make config && make samples && make install-logrotate && make progdocs
ldconfig

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

База данных Asterisk

CREATE DATABASE asterisk;
 
USE asterisk;
 
GRANT ALL ON asterisk.* TO asterisk@localhost IDENTIFIED BY 'asterisk_password';
 
DROP TABLE IF EXISTS sipusers;
CREATE TABLE `sipusers` (
     `id` INT(11) NOT NULL AUTO_INCREMENT,
      `name` VARCHAR(10) NOT NULL,
      `ipaddr` VARCHAR(15) DEFAULT NULL,
      `port` INT(5) DEFAULT NULL,
      `regseconds` INT(11) DEFAULT NULL,
      `defaultuser` VARCHAR(10) DEFAULT NULL,
      `fullcontact` VARCHAR(35) DEFAULT NULL,
      `regserver` VARCHAR(20) DEFAULT NULL,
      `useragent` VARCHAR(20) DEFAULT NULL,
      `lastms` INT(11) DEFAULT NULL,
      `host` VARCHAR(40) DEFAULT NULL,
      `type` enum('friend','user','peer') DEFAULT NULL,
      `context` VARCHAR(40) DEFAULT NULL,
      `permit` VARCHAR(40) DEFAULT NULL,
      `deny` VARCHAR(40) DEFAULT NULL,
      `secret` VARCHAR(40) DEFAULT NULL,
      `md5secret` VARCHAR(40) DEFAULT NULL,
      `remotesecret` VARCHAR(40) DEFAULT NULL,
      `transport` enum('udp','tcp','udp,tcp','tcp,udp') DEFAULT NULL,
      `dtmfmode` enum('rfc2833','info','shortinfo','inband','auto') DEFAULT NULL,
      `directmedia` enum('yes','no','nonat','update') DEFAULT NULL,
      `nat` enum('yes','no','never','route') DEFAULT NULL,
      `callgroup` VARCHAR(40) DEFAULT NULL,
      `pickupgroup` VARCHAR(40) DEFAULT NULL,
      `language` VARCHAR(40) DEFAULT NULL,
      `disallow` VARCHAR(40) DEFAULT NULL,
      `allow` VARCHAR(40) DEFAULT NULL,
      `insecure` VARCHAR(40) DEFAULT NULL,
      `trustrpid` enum('yes','no') DEFAULT NULL,
      `progressinband` enum('yes','no','never') DEFAULT NULL,
      `promiscredir` enum('yes','no') DEFAULT NULL,
      `useclientcode` enum('yes','no') DEFAULT NULL,
      `accountcode` VARCHAR(40) DEFAULT NULL,
      `setvar` VARCHAR(40) DEFAULT NULL,
      `callerid` VARCHAR(40) DEFAULT NULL,
      `amaflags` VARCHAR(40) DEFAULT NULL,
      `callcounter` enum('yes','no') DEFAULT NULL,
      `busylevel` INT(11) DEFAULT NULL,
      `allowoverlap` enum('yes','no') DEFAULT NULL,
      `allowsubscribe` enum('yes','no') DEFAULT NULL,
      `videosupport` enum('yes','no') DEFAULT NULL,
      `maxcallbitrate` INT(11) DEFAULT NULL,
      `rfc2833compensate` enum('yes','no') DEFAULT NULL,
      `mailbox` VARCHAR(40) DEFAULT NULL,
      `session-timers` enum('accept','refuse','originate') DEFAULT NULL,
      `session-expires` INT(11) DEFAULT NULL,
      `session-minse` INT(11) DEFAULT NULL,
      `session-refresher` enum('uac','uas') DEFAULT NULL,
      `t38pt_usertpsource` VARCHAR(40) DEFAULT NULL,
      `regexten` VARCHAR(40) DEFAULT NULL,
      `fromdomain` VARCHAR(40) DEFAULT NULL,
      `fromuser` VARCHAR(40) DEFAULT NULL,
      `qualify` VARCHAR(40) DEFAULT NULL,
      `defaultip` VARCHAR(40) DEFAULT NULL,
      `rtptimeout` INT(11) DEFAULT NULL,
      `rtpholdtimeout` INT(11) DEFAULT NULL,
      `sendrpid` enum('yes','no') DEFAULT NULL,
      `outboundproxy` VARCHAR(40) DEFAULT NULL,
      `callbackextension` VARCHAR(40) DEFAULT NULL,
      `timert1` INT(11) DEFAULT NULL,
      `timerb` INT(11) DEFAULT NULL,
      `qualifyfreq` INT(11) DEFAULT NULL,
      `constantssrc` enum('yes','no') DEFAULT NULL,
      `contactpermit` VARCHAR(40) DEFAULT NULL,
      `contactdeny` VARCHAR(40) DEFAULT NULL,
      `usereqphone` enum('yes','no') DEFAULT NULL,
      `textsupport` enum('yes','no') DEFAULT NULL,
      `faxdetect` enum('yes','no') DEFAULT NULL,
      `buggymwi` enum('yes','no') DEFAULT NULL,
      `auth` VARCHAR(40) DEFAULT NULL,
      `fullname` VARCHAR(40) DEFAULT NULL,
      `trunkname` VARCHAR(40) DEFAULT NULL,
      `cid_number` VARCHAR(40) DEFAULT NULL,
      `callingpres` enum('allowed_not_screened','allowed_passed_screen','allowed_failed_screen'
                         ,'allowed','prohib_not_screened','prohib_passed_screen','prohib_failed_screen'
                         ,'prohib') DEFAULT NULL,
      `mohinterpret` VARCHAR(40) DEFAULT NULL,
      `mohsuggest` VARCHAR(40) DEFAULT NULL,
      `parkinglot` VARCHAR(40) DEFAULT NULL,
      `hasvoicemail` enum('yes','no') DEFAULT NULL,
      `subscribemwi` enum('yes','no') DEFAULT NULL,
      `vmexten` VARCHAR(40) DEFAULT NULL,
      `autoframing` enum('yes','no') DEFAULT NULL,
      `rtpkeepalive` INT(11) DEFAULT NULL,
      `call-limit` INT(11) DEFAULT NULL,
      `g726nonstandard` enum('yes','no') DEFAULT NULL,
      `ignoresdpversion` enum('yes','no') DEFAULT NULL,
      `allowtransfer` enum('yes','no') DEFAULT NULL,
      `dynamic` enum('yes','no') DEFAULT NULL,
      `sippasswd` VARCHAR(80) DEFAULT NULL,
      PRIMARY KEY (`id`),
      UNIQUE KEY `name` (`name`),
      KEY `ipaddr` (`ipaddr`,`port`),
      KEY `host` (`host`,`port`)
) ENGINE=MyISAM;
 
 
DROP TABLE IF EXISTS sipregs;
CREATE TABLE `sipregs` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(80) NOT NULL DEFAULT '',
  `fullcontact` VARCHAR(80) NOT NULL DEFAULT '',
  `ipaddr` VARCHAR(45) DEFAULT NULL,
  `port` mediumint(5) UNSIGNED NOT NULL DEFAULT '0',
  `username` VARCHAR(80) NOT NULL DEFAULT '',
  `regserver` VARCHAR(100) DEFAULT NULL,
  `regseconds` INT(11) NOT NULL DEFAULT '0',
  `defaultuser` VARCHAR(80) NOT NULL DEFAULT '',
  `useragent` VARCHAR(20) DEFAULT NULL,
  `lastms` INT(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `name` (`name`)
);
 
 
DROP TABLE IF EXISTS voicemail;
CREATE TABLE voicemail (
  -- All of these column names are very specific, including "uniqueid".  Do not change them if you wish voicemail to work.
  uniqueid INT(5) NOT NULL AUTO_INCREMENT PRIMARY KEY,
  -- Mailbox context.
  context CHAR(80) NOT NULL DEFAULT 'default',
  -- Mailbox number.  Should be numeric.
  mailbox CHAR(80) NOT NULL,
  -- Must be numeric.  Negative if you don't want it to be changed from VoicemailMain
  password CHAR(80) NOT NULL,
  -- Used in email and for Directory app
  fullname CHAR(80),
  -- Email address (will get sound file if attach=yes)
  email CHAR(80),
  -- Email address (won't get sound file)
  pager CHAR(80),
  -- Attach sound file to email - YES/no
  attach CHAR(3),
  -- Which sound format to attach
  attachfmt CHAR(10),
  -- Send email from this address
  serveremail CHAR(80),
  -- Prompts in alternative language
  LANGUAGE CHAR(20),
  -- Alternative timezone, as defined in voicemail.conf
  tz CHAR(30),
  -- Delete voicemail from server after sending email notification - yes/NO
  deletevoicemail CHAR(3),
  -- Read back CallerID information during playback - yes/NO
  saycid CHAR(3),
  -- Allow user to send voicemail from within VoicemailMain - YES/no
  sendvoicemail CHAR(3),
  -- Listen to voicemail and approve before sending - yes/NO
  review CHAR(3),
  -- Warn user a temporary greeting exists - yes/NO
  tempgreetwarn CHAR(3),
  -- Allow '0' to jump out during greeting - yes/NO
  operator CHAR(3),
  -- Hear date/time of message within VoicemailMain - YES/no
  envelope CHAR(3),
  -- Hear length of message within VoicemailMain - yes/NO
  sayduration CHAR(3),
  -- Minimum duration in minutes to say
  saydurationm INT(3),
  -- Force new user to record name when entering voicemail - yes/NO
  forcename CHAR(3),
  -- Force new user to record greetings when entering voicemail - yes/NO
  forcegreetings CHAR(3),
  -- Context in which to dial extension for callback
  callback CHAR(80),
  -- Context in which to dial extension (from advanced menu)
  dialout CHAR(80),
  -- Context in which to execute 0 or * escape during greeting
  exitcontext CHAR(80),
  -- Maximum messages in a folder (100 if not specified)
  maxmsg INT(5),
  -- Increase DB gain on recorded message by this amount (0.0 means none)
  volgain DECIMAL(5,2),
  -- IMAP user for authentication (if using IMAP storage)
  imapuser VARCHAR(80),
  -- IMAP password for authentication (if using IMAP storage)
  imappassword VARCHAR(80),
  -- IMAP server location (if using IMAP storage)
  imapsever VARCHAR(80),
  -- IMAP port (if using IMAP storage)
  imapport VARCHAR(8),
  -- IMAP flags (if using IMAP storage)
  imapflags VARCHAR(80),
  stamp TIMESTAMP
);
 
DROP TABLE IF EXISTS voicemail_data;
CREATE TABLE voicemail_data (
  -- Path to the recording
  filename CHAR(255) NOT NULL PRIMARY KEY,
  -- Mailbox number (without context)
  origmailbox CHAR(80),
  -- Dialplan context
  context CHAR(80),
  -- Dialplan context, if voicemail was invoked from a macro
  macrocontext CHAR(80),
  -- Dialplan extension
  exten CHAR(80),
  -- Dialplan priority
  priority INT(5),
  -- Name of the channel, when message was left
  callerchan CHAR(80),
  -- CallerID on the channel, when message was left
  callerid CHAR(80),
  -- Contrary to the name, origdate is a full datetime, in localized format
  origdate CHAR(30),
  -- Same date as origdate, but in Unixtime
  origtime INT(11),
  -- Value of the channel variable VM_CATEGORY, if set
  category CHAR(30),
  -- Length of the message, in seconds
  duration INT(11)
);
DROP TABLE IF EXISTS voicemail_messages;
CREATE TABLE voicemail_messages (
  -- Logical directory
  dir CHAR(255),
  -- Message number within the logical directory
  msgnum INT(4),
  -- Dialplan context
  context CHAR(80),
  -- Dialplan context, if Voicemail was invoked from a macro
  macrocontext CHAR(80),
  -- CallerID, when the message was left
  callerid CHAR(80),
  -- Date when the message was left, in Unixtime
  origtime INT(11),
  -- Length of the message, in seconds
  duration INT(11),
  -- The recording itself
  recording BLOB,
  -- Text flags indicating urgency of the message
  flag CHAR(30),
  -- Value of channel variable VM_CATEGORY, if set
  category CHAR(30),
  -- Owner of the mailbox
  mailboxuser CHAR(30),
  -- Context of the owner of the mailbox
  mailboxcontext CHAR(30),
  -- Unique ID of the message,
  msg_id CHAR(40),
  PRIMARY KEY (dir, msgnum)
);
GRANT ALL ON asterisk.* to asterisk@localhost IDENTIFIED BY 'asterisk_password';

Asterisk UnixODBC

Для подключения CDR через ODBC редактируем файл /etc/odbcinst.ini:

[MySQL]
Description = MySQL driver
Driver = libmyodbc.so
Setup = libodbcmyS.so
CPTimeout =
CPReuse =
UsageCount = 1

Также редактируем файл /etc/odbc.ini:

[MySQL-asterisk]
Description = MySQL Asterisk database
Trace = Off
TraceFile = stderr
Driver = MySQL
SERVER = localhost
USER = asterisk
PASSWORD = asterisk_password
PORT = 3306
DATABASE = asterisk

Отредактируйте файл /etc/asterisk/res_odbc.conf:

[asterisk]
enabled => yes
dsn => MySQL-asterisk
username => asterisk
password => asterisk_password
pre-connect => yes

Открываем файл для редактирования /etc/asterisk/extconfig.conf:

sipusers => odbc,asterisk,sipusers
sippeers => odbc,asterisk,sipusers
sipregs => odbc,asterisk,sipregs
voicemail => odbc,asterisk,voicemail

Далее редактируем файл /etc/asterisk/sip.conf, добавив параметр:

rtcachefriends=yes

Установка Kamailio

cd /usr/src/
git clone --depth 1 --no-single-branch https://github.com/kamailio/kamailio kamailio
cd kamailio

Примечание: Если ваша версия git не поддерживает параметр командной строки –no-single-branch, просто не используйте этот параметр.

Первым шагом является создание конфигурационных файлов сборки с добавлением модуля MySQL:

make include_modules="db_mysql dialplan" cfg

Компилируем Kamailio с выводом флагов установки:

make Q=0 all && make install

Двоичные файлы и исполняемые скрипты были установены в /usr/local/sbin, в которой:

  • kamailio – SIP-сервер Kamailio;
  • kamdbctl – скрипт для создания и управления базами данных;
  • kamctl – скрипт для управления и контроля SIP-сервера Kamailio;
  • kamcmd – CLI – инструмент командной строки для взаимодействия с SIP-сервером Kamailio.

Чтобы иметь возможность использовать двоичные файлы из командной строки, убедитесь, что они /usr/local/sbin установлены в PATH переменной среды. Вы можете проверить это с echo $PATH. Если нет, и вы используете bash, откройте /root/.bash_profile и в конце добавьте:

PATH=$PATH:/usr/local/sbin
export PATH

Модули Kamailio устанавливаются в:

/usr/local/lib/kamailio/modules/

Примечание. В 64-битных системах может использоваться /usr/local/lib64.

Документация и файлы readme установлены в:

/usr/local/share/doc/kamailio/

Страницы руководства установлены в:

/usr/local/share/man/man5/
/usr/local/share/man/man8/

Файл конфигурации был установлен в:

/usr/local/etc/kamailio/kamailio.cfg

ПРИМЕЧАНИЕ: Если в команде make cfg … вы задали переменную PREFIX , то замените /usr/local во всех указанных выше путях значением PREFIX, чтобы найти установленные файлы.

Создание БД MySQL Kamailio

Редактируем файл /usr/local/etc/kamailio/kamctlrc для того, чтобы указать тип базы данных, сменить пароли пользователей, используемые по умолчанию для подключения к базе данных. Следует установить, заменив на свои следующие параметры:

  • SIP_DOMAIN=192.168.10.1
  • DBENGINE=MYSQL
  • DBHOST=localhost
  • DBPORT=3306
  • DBNAME=kamailio – база данных с правами чтения/записи
  • DBRWUSER=”kamailio” – пользователь с правами чтения/записи
  • DBRWPW=”kamailiorw” – пароль пользователя с правами чтения/записи (kamailio)
  • DBROUSER=”kamailioro” – база данных с правами чтения
  • DBROPW=”kamailioro” – пароль пользователя базы данных только для чтения
  • DBACCESSHOST=192.168.10.1 – разрешенный хост для доступа к базе данных
  • DBROOTUSER=”root” – супер пользователь базы данных
  • DBROOTPW=”dbrootpw” – пароль супер пользователя базы данных
  • DBINITASK=yes – установка подтверждения всех шагов создания базы данных
  • CHARSET=”utf8″ – кодировка базы данных
  • ALIASES_TYPE=”DB”

Запускаем скрипт создания базы данных Kamailio:

/usr/local/sbin/kamdbctl create

Никаких других изменений в структуре базы данных Kamailio не требуется. Сервер SIP получит пароль из базы данных Asterisk. Запускаем сценарий init.d в каталоге Kamailio:

make install-systemd-debian

Наконец, установка Kamailio как служба и применение настроек:

systemctl enable kamailio
systemctl daemon-reload

Настройка Kamailio

Создадим пользователя для запуска Kamailio и назначим права:

adduser --quiet --system --group --disabled-password --shell /bin/false --gecos "Kamailio" --home /var/run/kamailio kamailio
chown kamailio:kamailio /var/run/kamailio

Для запуска/остановки Kamailio SIP сервера используйте следующие команды:

systemctl start kamailio
systemctl stop kamailio

Установка Siremis

cd /var/www
git clone https://github.com/asipto/siremis
cd siremis
make apache24-conf

Полученный в консоле код вставляем в файл /etc/apache2/sites-available/000-default.conf во внутрь вашего VirtualHost:

vim /etc/apache2/sites-available/000-default.conf
# siremis apache 2.4 conf snippet ...

  Alias /siremis "/var/www/siremis/siremis"
  <Directory "/var/www/siremis/siremis">
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Require all granted
    <FilesMatch "\.xml$">
      Require all denied
    </FilesMatch>
    <FilesMatch "\.inc$">
      Require all denied
    </FilesMatch>
  </Directory>

После чего перезапускаем службу Apache:

systemctl restart apache2

После перезапуска веб-сервера SIREMIS будет доступен по адресу http://yourwebserber.ru/siremis/.

Следующим шагом является создание файлов конфигурации .htaccess и Siremis, для этого вам нужно выполнить команду prepare:

make prepare24

Вывод будет примерно следующим:

siremis# make prepare24
updating htaccess file for apache 2.4 ...
deploying htaccess files for apache 2.4 in subdirs ...
updating app.inc file...
creating folders...
done

Убедитесь, что следующие каталоги имеют доступ на запись для пользователя веб-сервера:

  • siremis/log
  • siremis/session
  • siremis/files
  • siremis/themes/default/template/cpl

Установим права доступа на каталоги:

make chown

Не забудьте перезапустить веб-сервер после внесения изменений

Создадим пользователя БД, который будет иметь полный доступ к базе данных Siremis.

mysql -u root -p
GRANT ALL PRIVILEGES ON siremis.* TO siremis@localhost IDENTIFIED BY 'siremisrw';
quit

Перезапустим веб-сервер:

systemctl restart apache2

Вам не нужно ничего делать для настройки базы данных Siremis, остальная часть процесса завершается с помощью мастера веб-установки.

Далее переходим в мастер установки через браузер. Переходим на страницу http://yourwebserver.ru/siremis/. Мастер установки предлагает пошагово настроить вашу систему.

Установка Kamailio

Проверка параметров системы

Установка Kamailio

Настраиваем создание БД Siremis и подключение к БД Kamailio, указав логин и пароль kamailio/kamailiorw, которые мы ввели ранее при создании БД Kamailio.

Установка Kamailio

Параметры подключения

Установка Kamailio

Установка Kamailio

После установки

  • удалить каталог установки: siremis/install

Если вы хотите снова запустить мастер установки:

  • восстановить каталог: siremis/install
  • удалить файл: siremis/install.lock

Начните использовать Siremis

  • Управление Kamailio осуществляется из пункта меню SIP Admin Menu;
  • Для начала необходимо добавить домен SIP-сервера в разделе Server Services ⇒ Domain List . Если у вас есть установленный Kamailio с одним доменом, без проверки части домена внутри SIP-сервера, вы можете просто ввести 127.0.0.1 в качестве своего домена;
  • Далее вы можете начать управление записями, используемыми Kamailio SIP Server:
    • добавить подписчиков через Subscriber Services ⇒ Subscriber List
    • управлять записями для сервисов маршрутизации (диспетчер/балансировка нагрузки, маршрутизация с наименьшей стоимостью,…) из Routing Services ⇒…

На этом установка SIP Proxy Kamailio и панель управления Siremis окончена.


Любое использование материалов сайта возможно только с разрешения автора и с обязательным указанием источника.