由于官方没有提供rpm包,我这里暂且自作聪明,打了一个src.rpm 包。 官方对于权限分配没有做处理,几个脚本都是root编译root运行,编译和下载过程混乱,我于是重新实现了一套编译脚本和服务启动脚本,用于一站式安装,增加安全性,提高部署体验。 使用下面的办法,可以确保编译/安装成功。不喜欢编译的同学,可使用附件提供的二进制rpm安装包,请直接从第8步开始,请优先选择附件目录中日期较新的文件目录,新的文件通常包含bug修复和功能提升。 1、请确保系统为CentOS 7 最小安装并且禁用了selinux(由于gcc版本问题,官方推荐centos7),并且以root身份登录,将附件中的srpm目录中的文件下载到/root,本文假设所有服务都安装在同一台机器上。 2、建立基本的编译环境 yum install gcc gcc-c++ make cmake libtool rpm-build redhat-rpm-config yum-utils -y 3、安装epel软件源 (centos官方仓库里没有的依赖包,通常这里都可以找到) yum install epel-release -y 4、安装基本的环境依赖包 yum install mariadb-devel gtest-devel log4cxx-devel curl-devel apr-devel apr-util-devel libuuid-devel openssl-devel hiredis-devel rsync wget -y 5、安装teamtalk.XXXX.src.rpm rpm -ivh teamtalk.xxxx.src.rpm # 会在/root目录下生成一个目录rpmbuild 6、检查和解决软件包依赖 cd /root/rpmbuild/SPEC yum-builddep teamtalk.spec 7、编译teamtalk (编译过程实际并不需要root权限) rpmbuild -ba teamtalk.spec #根据机器配置,耗时约5-10分钟不等 编译完成,会在/root/rpmbuild/RPMS/ 下生成一些后缀为rpm的软件包 8、使用下面的命令安装rpm包 cd /root/rpmbuild/RPMS/x86_64/ rm -rf teamtalk-debuginfo* #我们不需要debug包 yum localinstall teamtalk-*.rpm -y yum localinstall /root/rpmbuild/RPMS/noarch/teamtalk-web*.rpm -y #teamtalk-web这个包依赖nginx和php-fpm,会通过yum一并安装直接使用二进制rpm包的同学,请下载附件地址的RPMS目录中的文件到服务器的同一目录下, 比如/tmp/teamtalk/,以root身份安装 cd /tmp/teamtalk yum install epel-release -y yum localinstall teamtalk-*.rpm -y 9、至此,teamtalk这块算是安装完成了,teamtalk 安装在/opt/teamtalk 目录下。 10、安装LNMP+redis环境 yum install epel-release -y #如果前面你已经安装,这步可省略 yum install nginx mariadb-server php-mysql php-fpm php-xml php-gd php-pecl-zendopcache redis -y 11、mariadb的基本配置 如果你安装了teamtalk-web这个软件包的话,可以在/opt/teamtalk/www下看到一个teamtalk.sql文件,那就是teamtalk的数据库结构. systemctl enable mariadb systemctl start mariadb mysql mysql> create database teamtalk; mysql> use teamtalk; mysql> source /opt/teamtalk/www/teamtalk.sql; mysql> grant all on teamtalk.* to teamtalk@'localhost' identified by '123456'; mysql> flush privileges; 如果你使用了其他用户名和密码,请酌情修改下列文件中的对应配置: /opt/teamtalk/www/application/config/database.php /opt/teamtalk/db_proxy_server/dbproxyserver.conf 12、nginx+php-fpm的基本配置 systemctl enable nginx systemctl enable php-fpm systemctl start nginx systemctl start php-fpm 修改/etc/nginx/nginx.conf 文件: user nginx; worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid; events { use epoll; worker_connections 1024; } http { log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; server_tokens off; keepalive_timeout 30; types_hash_max_size 2048; gzip on; gzip_min_length 1k; gzip_disable "MSIE [1-6]\."; gzip_types text/plain application/x-javascript text/css application/xml; include /etc/nginx/mime.types; default_type application/octet-stream; server { listen 80 ; server_name localhost ; index index.html index.htm index.php ; root /opt/teamtalk/www ; location ~ \.php($|/) { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_split_path_info ^(.+\.php)(.*)$; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 7d;} location ~ .*\.(js|css)?$ { expires 12h; } if (!-e $request_filename) { rewrite ^/(.*)$ /index.php/$1 last; break; } } } php-fpm可无需配置,默认监听在127.0.0.1:9000,直接启动服务就好了。 如果想使用unix socket,请修改配置文件/etc/php-fpm.d/www.conf,并重启服务,不详述。 修改nginx配置后需要重启nginx systemctl restart nginx 至此,你应该至少应该能够通过浏览器登录web管理后台了,默认用户名和密码均是admin,后台功能并不完整,因为有一个配置文件需要配置后端的服务,后面会讲到,详见:/opt/teamtalk/www/application/config/config.php 14、配置redis redis也可以不需配置,直接启动就好。 systemctl enable redis systemctl start redis 15、配置teamtalk 执行下面的命令,查找配置需要修改的地方 find /opt/teamtalk -type f -iname "*conf*" |xargs grep --color CHANGEME 将搜索到的文件中的CHANGEME 字眼改为你的服务器本地实际IP,理论上也可以写域名,但不要填127.0.0.1 。 16、开启teamtalk服务 teamtalk 的服务端分的很细,好多个不同的模块,rpm安装过程中会自动创建一个用户teamtalk,由于root身份过于安全敏感,我做了一些限制,需要使用普通用户teamtalk登陆来运行服务。 通用的启动方法是这样的,比如:file_server cd /opt/teamtalk/file_server ../daeml file_server 服务启动后会在当前目录生成一个文件server.pid,里面是进程号 关闭服务的话就是杀进程号 cd /opt/teamtalk/file_server kill `cat server.pid` 官方带有两个脚本。restart.sh 和monitor.sh,我进行了些许改造,但是效果不是很好,依然保留。 另外我自己重新实现了一套启动脚本。位于/usr/bin/teamtalk,使用方法如下: teamtalk start file_server teamtalk stop file_server teamtalk restart file_server 下列服务都可以通过命令直接 start/stop/restart。 teamtalk start db_proxy_server teamtalk start file_server teamtalk start msfs teamtalk start http_msg_server teamtalk start login_server teamtalk start route_server teamtalk start push_server teamtalk start msg_server 17、根据我的理解,简单介绍一下模块的功能 msg_server:消息服务器,用户登录成功后,就和指定的消息服务器交互。端口8000,需对外开放 login_server :登录服务器,负责身份验证,负责给登录成功的客户端分配msg_server。 这个服务监听在两个端口,一个是tcp端口8100,用于和后端的服务器交互,另一个是http端口8080,需对外开放 route_server:消息转发,不同msg_server上用户交互需要中转站来转发消息。端口8200 http_msg_server:主要提供对外的web api,端口8400 push_server: 消息群发,端口8500 file_server:文件中转站,临时存储,端口8600 msfs:小文件永久存储,聊天的图片、表情等,端口8700,需对外开放 db_proxy_server:数据库中间件,后端为存储层,mysql和redis, 端口10600 lnmp:后台管理系统,企业架构,用户添加删除等,端口80 18、防火墙问题 示例防火墙如下,请逐条执行: /sbin/iptables -P INPUT ACCEPT /sbin/iptables -P OUTPUT ACCEPT /sbin/iptables -F /sbin/iptables -X /sbin/iptables -Z /sbin/iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT /sbin/iptables -A INPUT -i lo -j ACCEPT /sbin/iptables -A INPUT -p icmp -j ACCEPT /sbin/iptables -A INPUT -p tcp --dport 22 -j ACCEPT /sbin/iptables -A INPUT -p tcp --dport 80 -m comment --comment "web" -j ACCEPT /sbin/iptables -A INPUT -p tcp --dport 8000 -m comment --comment "msg_server" -j ACCEPT /sbin/iptables -A INPUT -p tcp --dport 8080 -m comment --comment "login_server" -j ACCEPT /sbin/iptables -A INPUT -p tcp --dport 8700 -m comment --comment "msfs" -j ACCEPT /sbin/iptables -P INPUT DROP 如果是测试环境的话,为了方便调试,可以关闭防火墙。 systemctl stop firewalld 19、登录后台,新建用户,并使用客户端登录 客户端指定的登录服务器地址为 http://IP:8080/msg_server wKiom1Wl-TGiZvnZAAB9-v0R1CQ383.jpg 20、其他说明 (未完待续,保持更新) 注:本文不代表官方。 附件有点大,博客无法上传,见: http://pan.baidu.com/s/1jGkZZW6 转载请保留固定链接: https://linuxeye.com/Linux/teamtalk.html |