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 DATABASETeamSpeak
; 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 ONTeamSpeak
.* 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-морде
Комментов пока нет