IT-Service - Asterisk + FreePBX + FOP2 + Asternic Stats
Четверг, 20 Февраль 2014 02:44

Asterisk + FreePBX + FOP2 + Asternic Stats

Автор  santa
Оцените материал
(1 Голосовать)

Установка Asterisk

  • Установка DEBIAN
    В качестве операционной системе на сервере используем последний стабильный релиз Debian. Скачать можно тут Debian iso
    Описывать установку Debian не будем, так как там нет ничего особенно. Во время установки можно сразу установить Apache и Openssh
  • Обновляем список репозиториев
apt-get update
  • Установка пакетов необходимых для установки Astrisk
apt-get install cpp cpp-4.6 cpp-4.7 g++ g++-4.7{a} libstdc++6-4.7-dev{a} make ncurses-dev libxml2-dev
  • Загрузка исходников Asterisk. Используем только версии LTS, в нашем случае Asterisk 1.8.x LTS. Посмотреть версии можно тут Исходники Asterisk LTS
  • Создадим каталог в который будем в дальнейшем загружать все исходники
mkdir src
  • Переходим в каталог src
cd src
  • Загружаем исходники Asterisk
wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-1.8-current.tar.gz
  • Распаковываем полученный архив
tar xvzf asterisk-1.8-current.tar.gz
  • Переходим в каталог с исходниками
cd asterisk-1.8.24.0/
  • Проверяем конфигурацию на совместимость с системой
./configure
  • Устанавливаем Asterisk
make
make install
  • Проверяем запустился ли Asterisk
asterisk -r

Если Asterisk запустился то мы попадем в его консоль и на выходе должны получить примерно это:

Asterisk 1.8.24.0, Copyright (C) 1999 - 2013 Digium, Inc. and others.
Created by Mark Spencer <markster@digium.com>
Asterisk comes with ABSOLUTELY NO WARRANTY; type 'core show warranty' for details.
This is free software, with components licensed under the GNU General Public
License version 2 and other licenses; you are welcome to redistribute it under
certain conditions. Type 'core show license' for details.
=========================================================================
Connected to Asterisk 1.8.24.0 currently running on pbx-backup (pid = 4160)
  • Для выхода из консоли Asterisk используется команда quit
quit
  • На этом установка демона Asterisk закончена.

Настройка Apache для работы с Asterisk

  • Создаем пользователя asterisk
adduser asterisk --disabled-password --gecos "Asterisk PBX"
  • Добавляем пользователя в группу www-data
adduser www-data asterisk
  • После того как пользователь asterisk создан, необходимо настроить Apache так, чтобы он запускался от имени пользователя asterisk:

Внесем изменения в переменные окружения Apache

nano /etc/apache2/envvars 

Изменим строки:

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data

Нужно заменить пользователя и группу на asterisk

export APACHE_RUN_USER=asterisk
export APACHE_RUN_GROUP=asterisk

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

apache2ctl graceful

Для проверки работы Apache нужно посмотреть запущенные процессы, убедиться что он запущен от имени asterisk и проверить доступность сервера, зайти на ip сервера через браузер, должна появиться надпись IT WORKS!

ps aux|grep apache

На выходе должно быть примерно так:

asterisk  4078  0.0  0.3 191016 15172 ?        S    15:13   0:00 /usr/sbin/apache2 -k start
  • На этом настройка Apache для работы с Astersik закончена.

Установка FreePBX

  • FreePBX это полнофункциональный веб-интерфейс для конфигурации Asterisk PBX ( Asterisk GUI ). Конечно настроить конфигурационные файлы Asterisk можно и без web морды, но формат конфигов мягко говоря плохо читаемый, в связи с чем операция по добавлению нового оператора может вызвать много времени и вопросов. Поэтому считаю необходимым поставить веб морду, но при этом надо учитывать что FreePBX перетирает конфиги при вводе новых данных, поэтому нельзя добавлять свой код в основные конфиги Asterisk при использовании FreePBX.
  • Для начала нам нужно скачать исходники FreePBX, для этого вводим команду:
wget http://mirror.freepbx.org/freepbx-2.11.0.tar.gz
  • Устанавливаем необходимые пакеты для FreePBX
aptitude install libxml2 libxml2-dev libtiff4 libtiff4-dev lame apache2 mysql-server mysql-client php5 php-pear php5-mysql php5-gd openssl libssl-dev
linux-source-3.2.0 perl bison libncurses5-dev libaudiofile-dev curl sox libcpan-mini-perl
  • Переходим в папку с исходниками FreePBX
cd freepbx-2.11.0/
  • Теперь нам необходимо подготовить базу данных для работы с FreePBX, а именно создать базы данных, таблицы и пользователей.

1.Необходимо установить mysql. Здесь нет ничего сложного, ставим из рэпов командой:

aptitude install mysql

во время установки необходимо задать и запомнить root пароль для mysql, не путайте его с паролем root пользователя, это разные пароли.

2.После установки mysql, переходим к созданию баз данных asteriskcdrdb и asterisk:

mysqladmin create asteriskcdrdb -p
mysqladmin create asterisk -p

для создания баз потребуется ввести пароль root пользователя mysql

3.Создаем таблицы в базах данных. Для этого в исходниках FreePBX есть необходимые скрипты, нам нужно лишь их запустить от имени root пользователя mysql:

mysql --user=root --password=ваш пароль asteriskcdrdb < /SQL/cdr_mysql_table.sql
mysql --user=root --password=ваш пароль asterisk < /SQL/newinstall.sql

4.Настраиваем права доступа. Создаем пользователя asteriskuser и даем ему права на созданные ранее базы данных:

Заходим в консоль Mysql

- mysql --user root -p

Назначаем привилегии, создаем пользователя и задаем ему пароль:

GRANT ALL PRIVILEGES ON asteriskcdrdb.* TO asteriskuser@localhost IDENTIFIED BY 'пароль';
GRANT ALL PRIVILEGES ON asterisk.* TO asteriskuser@localhost IDENTIFIED BY 'пароль';

Для выхода из консоли Mysql наберите:

quit

Базу данных Mysql для работы с FreePBX мы подготовили, теперь можно запустить скрипт для установки файлов FreePBX.

  • Нужно запустить скрипт install_amp который скопирует все необходимые файлы. Все вопросы которые будут заданы при установке можно оставить по умолчанию, укажите только правильный пароль для пользователя asteriskuser, пароль который мы задали на этапе назначения привилегий на базы данных.
полный/путь_к_скрипту/install_amp

Например

src/freepbx-2.11.0/install_amp

все зависит от того куда вы скопировали исходники FreePBX

  • После установки пробуем зайти на Web GUI Asterisk FreePBX:
http://ip-address

Установка панели FOP2

  • FOP2 — это панель управления операторами для IP-АТС Asterisk, работа с которой осуществляется посредством веб-доступа. FOP2 позволяет выполнять разнообразные действия над телефонными разговорами, как над своими, так и над чужими (при наличии привелегий), что делает эту панель удобной для использования в колл-центрах супервайзерами и в компаниях секретарями.
  • Скачать последнюю версию FOP2 панели для своей системы всегда можно с официального сайта http://fop2.com/download.php и купить лицензию (в демо режиме доступно 15 кнопок)http://fop2.com/buy.php
  • Описывать процесс скачивания и распаковки архива не буду, думаю вопросов на этом этапе быть не должно. Поэтому сразу переходим к процессу установки. Для этого переходим в распакованный каталог с исходниками FOP2
cd /fop2/
make install

Если все прошло удачно то увидим вот это:

root@pbx-backup:~/src/fop2# make install
Done!
  • Далее нам необходимо сгенерировать диалплан FOPа для asterisk. Для этого есть уже готовый скрипт, нам нужно только его запустить:
/usr/local/fop2/generate_override_contexts.pl -write

Если на выходе получаем ошибку:

File /etc/asterisk/extensions_override_freepbx.conf is not writable. Aborting.

Значит нужно создать файл:

nano /etc/asterisk/extensions_override_freepbx.conf
chown asterisk:asterisk /etc/asterisk/extensions_override_freepbx.conf
chmod 664 /etc/asterisk/extensions_override_freepbx.conf

Файл создали, снова запускаем генератор диалплана:

/usr/local/fop2/generate_override_contexts.pl -write

На выходе должны получить:

/usr/local/fop2/generate_override_contexts.pl -write
Backing up /etc/asterisk/extensions_override_freepbx.conf to /etc/asterisk/extensions_override_freepbx.conf.bak
Done!

Cleaning and updating /etc/asterisk/extensions_override_freepbx.conf ...
Done!

Creating /etc/asterisk/extensions_override_fop2.conf ...
Done!

Reloading asterisk dialplan...
Finished!
  • Теперь нам нужно внести изменения в конфиг FOP. Нужно узнать AMI пароль, что бы соединить fop2 панель с астериском, для этого выполняем команду и смотрим пароль в графе [admin], строчка secret:
nano /etc/asterisk/manager.conf

Копируем пароль из поля secret

  • Полученный пароль нужно вставить в /usr/local/fop2/fop2.cfg в строчку manager_secret, так же в этом файле нужно раскомментировать строчку "web_dir"
  • Проверяем корректность наших настроек по установке fop2 следующей командой:
/usr/local/fop2/fop2_server –test

Если все удачно должны увидеть:

Running in Demo Mode
Connection to manager OK!
  • Запускаем FOP2:
service fop2 start
  • Теперь нам нужно установить администраторский модуль во FreePBX. Скачиваем его на официальном сайте http://fop2.com/download.php (FOP2Admin FreePBX Module) Для этого открываем вебинтерфейс и переходим во вкладку управление модулями. Выбираем закачать модули и выбираем скачанный модуль и нажимаем кнопку Upload. Если все удачно видим надпись: Модуль загружен успешно, Необходимо задействовать его используя администрирование локального модуля чтобы сделать его доступным.

Установка статистики Asternic Call Center Stats 2

  • Asternic Call Center Stats 2 - расширенный набор инструментов статистики, отчетов и графиков.
  • Распаковываем исходники и приступаем к установке
  • Создаем новую базу данных в mysql
mysqladmin -u root -p create qstats
  • Заполняем ее таблицами (файл sql лежит в исходниках в папке sql)
mysql -u root -p qstats < ./sql/mysql-tables.sql
  • Создаем пользователя и даем ему права на базу данных qstats:
mysql -u root -p

mysql> GRANT ALL PRIVILEGES ON qstats.* TO 'qstats'@'localhost' IDENTIFIED BY 'ПАРОЛЬ' WITH GRANT OPTION;

mysql> flush privileges;
  • Теперь нужно поправить конфиг, внести туда учетные данные для подключения к базе данных и к asterisk:
nano ./html/config.php

Устанавливаем значение следующих переменных:

$DBUSER = 'qstats'; - имя пользователя базы данных
$DBPASS = 'ПАРОЛЬ'; - пароль к базе данных

$MANAGER_USER   = "admin"; - имя пользователя AMI asterisk;
$MANAGER_SECRET = "ПАРОЛЬ"; - пароль пользователя AMI asterisk;
  • Копируем содержимое каталога html из исходников, в каталог /var/www/stats/
  • Устанавливаем права на каталоги:
chown asterisk:asterisk /var/www/html/stats
chown asterisk:asterisk /var/www/html/stats* -R
  • Создаем файл для лицензионного ключа:
touch /var/www/stats/asterniclic.txt
chmod 666 /var/www/stats/asterniclic.txt
  • Далее нужно скопировать анализатор активности, который и будет собирать статисику:
mv parselog /usr/local
  • Установка IonCube. IonCube одна из лучших систем по защите кода PHP проектов. Позволяет скрыть от посторонних глаз истинный PHP-код, создавая защищенные и полностью рабочие проекты.
wget http://downloads2.ioncube.com/loader_downloads/ioncube_loaders_lin_x86.tar.gz
tar zxvf ioncube_loaders_lin_x86.tar.gz
cp ioncube/ioncube_loader_lin_5.4.so /usr/lib/php5/20100525
cp ioncube/ioncube_loader_lin_5.4_ts.so /usr/lib/php5/20100525
nano /etc/php5/conf.d/20-ioncube.ini
  • Вставляем в /etc/php5/conf.d/20-ioncube.ini следующий код:
zend_extension = /usr/lib/php5/20100525/ioncube_loader_lin_5.4.so
  • Перезагружаем apache и пробуем зайти на статистику, http://ip-address/stats, должна появиться страница ввода лицензии, значит все работает.

Настройка репликации баз данных

  • В качестве резерва используется второй сервер с аналогичным софтом. Необходимо настроить репликацию базы данных, чтобы в случае выхода из строя первого сервера, можно было оперативно запустить второй. Изначально вопрос о кластеризации не стоял, поэтому на данный момент резервирование будем делать репликацией базы данных asterisk. Данное резервирование позволит в течении 10 минут запустить резервную атс. В дальнейшем будем организовывать кластер, но это позже.
  • Настраиваем mysql на основном сервере:

1.Обязательно укажем уникальный ID сервера, путь для бинарных логов и имя БД для репликации в секции [mysqld]:

server-id = 1
log-bin = /var/lib/mysql/mysql-bin.log 
replicate-do-db = asterisk

Убедитесь, что у вас достаточно места на диске для бинарных логов

2.Добавим пользователя slave_user, под правами которого будет производится репликация. Будет достаточно привилегии "replication slave ":

mysql@pbx> GRANT replication slave ON *.* TO 'slave_user'@'%' IDENTIFIED BY 'password';

3.Перезагрузим MySQL, чтобы изменения в конфиге вступили в силу:

root@pbx# service mysqld restart

4.Если все прошло успешно, команда "show master status " должна показать примерно следующее:

mysql@pbx> SHOW MASTER STATUS\G
File: mysql-bin.000001
Position: 98
Binlog_Do_DB:
Binlog_Ignore_DB:

Значение position должно увеличиваться по мере того, как вносятся изменения в БД на мастере.

5.На втором сервере укажем ID сервера, имя БД для репликации и путь к relay-бинлогам в секции [mysqld] конфига, затем перезагрузим MySQL:

server-id = 2
relay-log = /var/lib/mysql/mysql-relay-bin/log
relay-log-index = /var/lib/mysql/mysql-relay-bin.index
replicate-do-db = asterisk
root@backup# service mysqld restart

6.Переносим данные

Здесь нам придется заблокировать БД для записи:

mysql@pbx> FLUSH TABLES WITH READ LOCK;

Посмотрим состояние мастера командой «show master status» и запомним значения File и Position (после успешной блокировки мастера они не должны изменятся):

File: mysql-bin.000001
Position: 98

Делаем дамп БД, и после завершения операции снимаем блокировку мастера:

mysqldump -u root -p astersik > /root/asterisk.sql
mysql@pbx> UNLOCK TABLES;

Переносим дамп на резервный сервер и восстанавливаем из него данные:

mysqldump -u root -p astersik < /root/asterisk.sql

Наконец, запускаем репликацию командами "change master to" и "start slave" и посмотрим, все ли прошло хорошо:

mysql@backup> stop slave;
mysql@backup> CHANGE MASTER TO MASTER_HOST='pbx',MASTER_USER='slave_user',MASTER_PASSWORD='password',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=98;
mysql@backup> start slave;

Значения MASTER_LOG_FILE и MASTER_LOG_POS мы берем с мастера.

Посмотрим, как идет репликация командой "show slave status ":

mysql@replica> SHOW SLAVE STATUS\G
Slave_IO_State: Waiting for master to send event
Master_Host: pbx
Master_User: replication
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 98
Relay_Log_File: mysql-relay-bin.000001
Relay_Log_Pos: 235
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: asterisk
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 98
Relay_Log_Space: 235
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 5 


Значение Seconds_Behind_Master может быть любым целым числом.Если репликация идет нормально, реплика будет следовать за мастером (номер лога в Master_Log_File и позиция Exec_Master_Log_Pos будут расти). Время отставания реплики от мастера (Seconds_Behind_Master), в идеале, должно быть равно нулю. Если оно не сокращается или растет, возможно, что нагрузка на реплику слишком высока — она просто не успевает повторять изменения, происходящие на мастере.Если же значение Slave_IO_State пусто, а Seconds_Behind_Master равно NULL, репликация не началась. Смотрите лог MySQL для выяснения причины, устраняйте её и заново запускайте репликацию.

Прочитано 17147 раз Последнее изменение Четверг, 20 Февраль 2014 02:58
Авторизуйтесь, чтобы получить возможность оставлять комментарии