Сервер VoIP для небольшой компании (FreePBX 14, Asterisk 15, Ubuntu 16.04) часть 1
Добрый день, вечер или ночь, все зависит от времени суток в который вам довелось прочитать мою статью. Начнем с начала. В нашей компании задумались о переходе на SIP и встал вопрос? как это реализовать.
- 15 сотовых номеров, по количеству сотрудников и смартфонов;
- 2 городских номер от Мегафон(реализован через SIP);
- До 10 одновременных вызовов;
- Отсутствие возможности перевода звонков между сотрудниками;
- Необходимость частых междугородних звонков.
Были рассмотрены несколько вариантов:
- Оставить всё как есть (сотовые телефоны);
- Облачная АТС;
- «Железное» решение;
- Свой сервер VoIP.
- Сервер ESXi Dell PowerEdge R230 1xE3-1220v6 2×16Gb 2RUD x4 3×1Tb 7.2K 3.5″;
- Ubuntu Server 16.04 (минимальная конфигурация, 1Гб памяти, 128 Гб диск), установлен на ESXi 6.5;
- SIP от zadarma и Мегафон;
- Сотовые телефоны с SIP клиентами.
Ubuntu 16.04 у нас являться корпоративным стандартом, сервера Ubuntu Server 16.04, как рабочая OS Ubuntu Desktop 16.04. Основной же сервер построен на базе Zentyal 5.0. Сервера и рабочие ПК устанавливаются по сети по TFTP. Если будет интересно опишу все нюансы установки Zentyal (а их приличное количество).
Аппараты решили не покупать, у каждого сотрудника есть сотовый либо на Android, либо на iOS, так, что проблем с клиентами нет, сотрудники имеют доступ к рабочему Wi-FI. Так же клиенты SIP стоят на рабочих ПК. Так же есть доступ к SIP через Интернет, безопасность тоже учтена, порты подключения изменены, пароли для SIP достаточно сложны.
Переходим к самой сути. В сети полно документации по установке FreePBX 13 на Ubuntu 16.04, А вот каr установить FreePBX 14 нету, даже официальном wiki FreePBX есть только для CentOS 7 и Debian 8.8, но было большое желание и стремление сделать задуманное.
1. Установку Ubuntu Server 16.04 описывать не буду, это просто даже для новичка.
1.1. Все манипуляции я проводил по root sudo su
2. Обновим систему: apt update && apt upgrade -y , если требуется перезагрузка, перегружаемся.
3. Займемся PHP, для FreePBX 14 необходим PHP 5.6, по умолчанию в Ubunty 16.04 идет PHP 7.0
Удаляем весь PHP, если он есть в системе:
sudo apt purge `dpkg -l | grep php| awk » |tr «\n» » «`
Устанавливаем репозиторий PHP 5.6:
sudo add-apt-repository ppa:ondrej/php
Обновляемся и устанавливаем PHP:
sudo apt update
sudo apt install php5.6
4. Mysql который идет в репозитории не совместим с FreePBX 14, нам нужна MariaDB, добавим её в репозиторий:
sudo apt-key adv —recv-keys —keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
sudo add-apt-repository ‘deb [arch=amd64,i386,ppc64el] http://mirror.mephi.ru/mariadb/repo/10.2/ubuntu xenial main’
5. Нам так же необходим nodejs:
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash —
sudo apt install -y nodejs
6. Установим теперь всё необходимое:
sudo apt install -y build-essential linux-headers-`uname -r` openssh-server apache2 mariadb-server mysql-client bison flex sox libncurses5-dev libssl-dev libmysqlclient-dev mpg123 libxml2-dev libnewt-dev sqlite3 libsqlite3-dev pkg-config automake libtool autoconf git subversion unixodbc-dev uuid uuid-dev libasound2-dev libogg-dev libvorbis-dev libcurl4-openssl-dev libical-dev libneon27-dev libsrtp0-dev libspandsp-dev libopus-dev opus-tools libiksemel-dev libiksemel-utils libiksemel3 xmlstarlet
sudo apt install -y php5.6 php5.6-curl php5.6-cli php5.6-mysql php5.6-odbc php5.6-db php5.6-gd php5.6-xml curl libapache2-mod-php5.6 php5.6-mbstring
6.1. Пакета libmyodbc больше нет в репозиториях Ubuntu начиная с версии Xenial.
Скачиваем нужный коннектор:
Распакуем:
tar -zxvf mariadb-connector-odbc-3.0.2-ga-debian-x86_64.tar.gz
И скопируем в директорию /usr/lib/x86_64-linux-gnu/odbc/:
cd mariadb-connector-odbc-3.0.2-ga-debian-x86_64/lib
cp libmaodbc.so /usr/lib/x86_64-linux-gnu/odbc/
7. Теперь по рекомендациям FreePBX необходимо перезагрузиться, я этого не делал.
8. Убедимся, что mod_rewrite включен, чтобы избежать возможных атак.
a2enmod rewrite
service apache2 restart
9. Включим поддержку Console_Getopt
pear install Console_Getopt
10. Переходим к установке Asterisk 15 (фактически это часть wiki с FreePBX для Debina 8.8):
cd /usr/src
wget http://sourceforge.net/projects/lame/files/lame/3.98.4/lame-3.98.4.tar.gz &&
wget http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/dahdi-linux-complete-current.tar.gz &&
wget http://downloads.asterisk.org/pub/telephony/libpri/libpri-current.tar.gz &&
wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-15-current.tar.gz &&
git clone https://github.com/akheron/jansson.git &&
wget http://www.pjsip.org/release/2.5.5/pjproject-2.5.5.tar.bz2
Скомпилируем и установим Lame (mp3):
cd /usr/src &&
tar zxvf lame-3.98.4.tar.gz &&
cd lame-3.98.4 &&
./configure &&
make &&
make install
Скомпилируем и установим DAHDI и LibPRI (Мы платы не используем, но кто знает, что захочется потом):
cd /usr/src &&
tar xvfz dahdi-linux-complete-current.tar.gz &&
tar xvfz libpri-current.tar.gz &&
rm -f dahdi-linux-complete-current.tar.gz libpri-current.tar.gz &&
cd dahdi-linux-complete-* &&
make all &&
make install &&
make config &&
cd /usr/src/libpri-* &&
make &&
make install
Скомпилируем и установим pjproject:
cd /usr/src &&
tar -xjvf pjproject-2.*.*.tar.bz2 &&
cd pjproject-* &&
CFLAGS=’-DPJ_HAS_IPV6=1′ ./configure —prefix=/usr —enable-shared —disable-sound\
—disable-resample —disable-video —disable-opencore-amr &&
make dep &&
make &&
make install
Скомпилируем и установим jansson:
cd /usr/src/jansson &&
autoreconf -i &&
./configure &&
make &&
make install
Если вы хотите использовать кодек Opus, перед началом компиляции Asterisk необходимо установить xmlstarlet:
sudo apt install xmlstarlet
Скомпилируем и установим Asterisk:
cd /usr/src &&
tar xvfz asterisk-15-current.tar.gz &&
rm -f asterisk-15-current.tar.gz &&
cd asterisk-* &&
./contrib/scripts/install_prereq install &&
./configure —with-pjproject-bundled —with-crypto —with-ssl=ssl —with-srtp &&
contrib/scripts/get_mp3_source.sh &&
make menuselect
Для себя я выбрал ‘format_mp3’ и ‘res_config_mysql’, а так же включил ‘codec_opus’
Сохраняем изменения и продолжаем установку:
make &&
make install &&
make config &&
ldconfig
update-rc.d -f asterisk remove
Пока все собиралось я успел налить себе кофе и продолжил.
Настроим запуск от имени пользователя ‘Asterisk’
Расcкомментируйте в /etc/default/asterisk:
Создаём пользователя Asterisk и задаём права пользователя:
useradd -m asterisk &&
chown asterisk. /var/run/asterisk &&
chown -R asterisk. /etc/asterisk &&
chown -R asterisk. /var//asterisk &&
chown -R asterisk. /usr/lib/asterisk
11. Переходим к FreePBX 14
sed -i ‘s/\(^upload_max_filesize = \).*/\256M/’ /etc/php/5.6/apache2/php.ini &&
sed -ie ‘s/\;date\.timezone\ \=/date\.timezone\ \=\ «Asia\/Yekaterinburg»/g’ /etc/php/5.6/apache2/php.ini &&
cp /etc/apache2/apache2.conf /etc/apache2/apache2.conf_orig &&
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
cat >> /etc/odbcinst.ini [MySQL]
Driver=/usr/lib/x86_64-linux-gnu/odbc/libmaodbc.so
UsageCount=2
cat >> /etc/odbc.ini [MySQL-asteriskcdrdb]
Description=MySQL connection to ‘asteriskcdrdb’ database
driver=MySQL
server=localhost
database=asteriskcdrdb
Port=3306
Socket=/var/run/mysqld/mysqld.sock
option=3
Скачаем и установим FreePBX:
cd /usr/src
wget http://mirror.freepbx.org/modules/packages/freepbx/freepbx-14.0-latest.tgz
tar vxfz freepbx-14.0-latest.tgz
rm -f freepbx-14.0-latest.tgz
cd freepbx
touch /etc/asterisk/ari.conf
./start_asterisk start
./install -n
11.1. Для русификации FreePBX необходима локаль ru_RU.UTF-8:
echo «russian ru_RU.UTF-8» >> /etc/locale.alias
locale-gen ru_RU
systemctl restart apache2
12. Создадим скрипт запуска для systemd:
В файл /etc/systemd/system/freepbx.service вставляем:
[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
systemctl enable freepbx.service
На этом установка и первоначальная настройка закончена. Будут вопросы, всегда готов ответить.