TeamSpeak + MySQL + online tracker

Прилетело мне задание от руководства реализовать простую текстово/звуковую связь внутри конторы. Причем желание было именно все в одном, так бы было реализовано OpenFire+Asterisk. Пришлось немного подумать и было принято категоричное решение ставить TeamSpeak. На текущий момент он версии 3.
В конце данный продукт мне даже понравился по многим причинам, которые я перечислю в процессе описания установки и допиливания. Одна из них — я могу отслеживать онлайн пользователей с телефона. А при желании и некотором времени затраченном на написание интерфейса, даже выполнять простенькие администратирвные функции. Начнем, мы имеем чистую машинку c FreeBSD. Описывать процесс установки я не стану, предполагается, что эта заметка все же для администраторов с некоторым опытом…
Итак, у нас есть:

#uname -a
FreeBSD teamspeak 9.3-RELEASE FreeBSD 9.3-RELEASE #0: Mon Jan 16 17:38:12 NOVT 2017     neo@teamspeak:/sys/i386/compile/TS  i386

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

Если у Вас уже настроенная операционная система и файервол, то просто откройте доступ на порты 9987 и 30033 и пропустите первый шаг.

1. Нам нужно будет пересобрать ядро, включив туда IPFW. Доступ к этой машине нужен исключительно на порты 9987 и 30033.

#cd /sys/i386/conf
#cp GENERIC TS && ee TS

и добавим

options         IPFIREWALL
options         IPFIREWALL_VERBOSE
options         IPFIREWALL_VERBOSE_LIMIT=500

после чего

#config TS
#cd ../compile/TS
#make cleandepend && make depend && make && make install

дальше не забываем

#echo 'firewall_enable="YES"' >> /etc/rc.conf

и приводим /etc/rc.firewall примерно к такому виду:

#!/bin/sh -
ipfw="/sbin/ipfw -q "
ip="ip вашего сервера"

${ipfw} -f flush
${ipfw} add 1 check-state

${ipfw} add pass ip from any to any established

${ipfw} add pass tcp from ip_для_управления_putty_и_прямого_доступа_mysql to ${ip} dst-port 22,3306
${ipfw} add pass ip from any to ${ip} dst-port 9987,30033

${ipfw} add pass udp from any to any 53,123,161
${ipfw} add pass udp from any 53,123,161 to any

${ipfw} add pass ip from ${ip} to any out
${ipfw} add pass icmp from any to any

уточню, что ${ipfw} add pass ip from any to ${ip} dst-port 9987,30033 сделано от лени, правильнее будет написать:

${ipfw} add pass tcp from any to ${ip} dst-port 30033
${ipfw} add pass udp from any to ${ip} dst-port 9987

и для порядку

#shutdown -r now

Дальше не забудем обновить порты:

#cd /usr/ports && portsnap fetch extract

если ставим на уже действующий агрегат, то extract заменим на update

Что нам потребуется:
— TeamSpeak3 Server
— MySQL Server
— Apache

2. Если Вы настраиваете на машинке с установленной БД MySQL, пропускайте шаг 2, создав базу данных и пользователя для TS. Иначе ставим БД:

#cd /usr/ports && make search name="mysql" | grep "server" | more

и из databases/mysql55-server:

#setenv BATCH yes
#make install clean

первая команда позволит не конфигурировать каждый нужный порт вручную, а ставить в конфигурации по умолчанию
добавляем в rc.conf:

#echo 'mysql_enable="YES"' >> /etc/rc.conf
#/usr/local/etc/rc.d/mysql-server start
Starting mysql.

далее нам нужна база данных и пользователь для TS:

# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.5.53 Source distribution

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> CREATE DATABASE TeamSpeak;
Query OK, 1 row affected (0.00 sec)

mysql> CREATE USER 'TS'@'localhost' IDENTIFIED BY 'TSUserPassword';
Query OK, 0 rows affected (0.01 sec)

mysql> GRANT SELECT,INSERT,UPDATE,CREATE,ALTER ON TeamSpeak.* TO 'TS'@'localhost';
Query OK, 0 rows affected (0.00 sec)

mysql> quit
Bye

Готово. База данных есть и функционирует. Теперь нам нужен web-сервер:
3. Ставим Apache

#cd /usr/ports && make search name="apache" | more

идем и ставим:

#cd /usr/ports/www/apache22 && make install clean

Интерфейс, который будет показан, зависит только от Вас, не буду пытаться навязывать что-либо, но у меня использовано такое изобретение, как jstree.js.

4. Ставим TeamSpeak. Вот его будем ставить не из портов.
https://www.teamspeak.com/downloads#server отсюда качаем сервер нужной битности.

#mkdir /usr/local/TeamSpeak && cd /usr/local/TeamSpeak
#fetch http://dl.4players.de/ts/releases/3.0.13.6/teamspeak3-server_freebsd_x86-3.0.13.6.tar.bz2
teamspeak3-server_freebsd_x86-3.0.13.6.tar.bz2100% of 5231 kB 1253 kBps 00m04s

Смотрим на плагин mysql:

 # ldd libts3db_mysql.so
libts3db_mysql.so:
        libmysqlclient.so.15 => /usr/local/lib/mysql/libmysqlclient.so.15 (0x28800000)
        libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x281b8000)
        libm.so.5 => /lib/libm.so.5 (0x282af000)
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x282ca000)
        libc.so.7 => /lib/libc.so.7 (0x2806d000)
        libz.so.6 => /lib/libz.so.6 (0x282d5000)
        libthr.so.3 => /lib/libthr.so.3 (0x282e9000)

НО MySQL 5.5 устанавливает libmysqlclient.so.18
И вот тут придется немного пошаманить

#ln -s libmysqlclient.so.18 libmysqlclient.so.15

не поканает, так что придется собирать оригинал, нам понадобится mysql50-server, которого уже нет в портах. Самое простое решение — скачать freebsd 8.2 и достать оттуда нужный порт. Устанавливать его не нужно, достаточно:

#make MAKE_JOBS_UNSAFE=yes

ftp://91.193.69.2/distributive/FreeBSD/ports/distfiles/mysql-5.0.92.tar.gz
ключ обязателен, в противном случае порт отказывается собираться на новых системах. После из /usr/ports/databases/mysql50-server/work/mysql-5.0.92/libmysql/.libs забираем нужный нам libmysqlclient.so.15 и копируем его в /urs/local/lib

И запускаем

# ./ts3server_startscript.sh start inifile=ts3server.ini
Starting the TeamSpeak 3 server
TeamSpeak 3 server started, for details please view the log file
root@teamspeak:/usr/local/TeamSpeak #
------------------------------------------------------------------
                      I M P O R T A N T
------------------------------------------------------------------
               Server Query Admin Account created
         loginname= "serveradmin", password= "3kKSutev"
------------------------------------------------------------------


------------------------------------------------------------------
                      I M P O R T A N T
------------------------------------------------------------------
      ServerAdmin privilege key created, please use it to gain
      serveradmin rights for your virtualserver. please
      also check the doc/privilegekey_guide.txt for details.

       token=oDcY8evFwsXGrFZ2ssHRqvomdFNgeFymwSDx4Bn2
------------------------------------------------------------------

# ps -ax | grep ts3
  748  0- S      10:49.16 ./ts3server_freebsd_x86

 # sockstat | grep ts3
root     ts3server_ 756   4  stream -> /tmp/mysql.sock
root     ts3server_ 756   5  stream -> /tmp/mysql.sock
root     ts3server_ 756   6  stream -> /tmp/mysql.sock
root     ts3server_ 756   7  stream -> /tmp/mysql.sock
root     ts3server_ 756   8  stream -> /tmp/mysql.sock
root     ts3server_ 756   9  stream -> /tmp/mysql.sock
root     ts3server_ 756   10 stream -> /tmp/mysql.sock
root     ts3server_ 756   11 stream -> /tmp/mysql.sock
root     ts3server_ 756   12 stream -> /tmp/mysql.sock
root     ts3server_ 756   13 stream -> /tmp/mysql.sock
root     ts3server_ 756   18 tcp4   *:30033               *:*
root     ts3server_ 756   19 udp4   192.168.2.100:47888   194.97.114.3:2010
root     ts3server_ 756   23 udp4   *:9987                *:*
root     ts3server_ 756   25 tcp4   *:10011               *:*

Сервер работает и ждет подключения. При первом подключении будет выдано такое окошко:
http://prnt.sc/e0d50o
и вводим туда наш token, что даст нам права администратора сервера. Обращаю внимание, что это не администратор всего сервера TS, а только этого виртуального сервера. При создании нескольких виртуальных серверов административные привилегии не переносятся.
Самая вменяемая приблуда для управления нашим сервером http://yat.qa.

Теперь все готово, осталось только написать web-интерфейс упраления. Для работы с TS из php за нас уже все придумали: https://docs.planetteamspeak.com/ts3/php/framework/. Этот фреймворк позволяет производить любые действия, и что будет уметь интерфейс зависит только от вашей лени 🙂

Немного позже отпишу как и что можно сделать web-морде

Помогла заметка - поделись с другом:
  1. Комментов пока нет

  1. Трэкбэков пока нет.

Оставьте эти два поля как есть:


 
Яндекс.Метрика