【编译打包】teamtalk 在CentOS 7 上的安装

【编译打包】teamtalk 在CentOS 7 上的安装,第1张

【编译打包】teamtalk在CentOS7上的安装

(写在前面:teamtalk目前处于开源初期,程序出现功能不全或bug是正常的。在生产环境中使用时请小心。本文介绍一种个人探索的简单安装方法。在本文规定的条件下,可以保证安装配置正确,与win/Android客户端连接正常。我的主业是运维而不是开发,条件有限。除非有安装问题,否则我不接受程序bug的反馈。)


Teamtalk是蘑菇街的一款开源IM软件,包括完整的服务器和各种客户端(windows、andriod、IOS等。).挺厉害的,分组讨论的时候气氛很热闹。蓝狐兄弟低调的同时也很有礼貌。


由于没有官方的rpm包,我很聪明,暂时在这里键入一个src.rpm包。


官方权限分配没有处理,用root编译运行了几个脚本,编译下载过程比较混乱。于是我重新实现了一套一站式安装的编译脚本和服务启动脚本,增加了安全性,改善了部署体验。


使用以下方法确保编译/安装成功。不喜欢编译的同学可以使用附件中提供的二进制rpm安装包。请直接从第8步开始。请优先考虑附件目录中较新的文件目录。新文件通常包含错误修复和功能改进。


1.请确保系统至少安装了centos7,并且禁用了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/,作为根用户安装

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的基本配置


/etc/my.cnf参考配置

[mysql] port = 3306 socket = /var/lib/mysql/mysql.sock default-character-set = utf8 [mysqld] datadir = /var/lib/mysql socket = /var/lib/mysql/mysql.sock pid-file = /var/run/mariadb/mariadb.pid symbolic-links = 0 character-set-server = utf8 innodb_buffer_pool_size = 1G innodb_open_files = 65535 innodb_file_per_table = 1 innodb_flush_log_at_trx_commit = 1 innodb_flush_method = O_DIRECT thread_handling = pool-of-threads [mysqld_safe] log-error = /var/log/mariadb/mariadb.log pid-file = /var/run/mariadb/mariadb.pid


如果安装了teamtalk-web软件包,可以在/opt/teamtalk/www下看到一个teamtalk.sql文件,这是teamtalk的数据库结构。

systemctl enable mariadb systemctl start mariadb mysql mysql> create database teamtalk character set utf8; 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。直接启动服务就可以了。

如果要使用unixsocket,请修改配置文件/etc/php-fpm.d/www.conf,并重启服务,不做赘述。


修改Nginx配置后需要重启nginx。

systemctl restart nginx

此时,你至少应该可以通过浏览器登录web管理后台了。默认用户名和密码是admin。

后端功能不完整,因为有一个配置文件需要配置后端服务,后面会讲到。详见:/opt/teamtalk/www/application/config/config.PHP。


14.配置redis

Redis不需要配置。默认情况下,使用127.0.0.1:6379。直接启动就好了。

systemctl enable redis systemctl start redis


15.配置teamtalk

执行以下命令,找出需要修改配置的地方

find /opt/teamtalk -type f -iname "*conf*" |xargs grep -n --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。按如下方式使用它:

su - teamtalk teamtalk start file_server teamtalk stop file_server teamtalk restart file_server


以下服务可以通过命令直接启动/停止/重新启动。

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


使用系统的rc.local脚本启动teamtalk的相关服务。

chmod u+x /etc/rc.d/rc.local sed -i '/requiretty$/{s/^/#/g}' /etc/sudoers echo "sudo -u teamtalk /usr/bin/teamtalk  start xxx_server" >> /etc/rc.local


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 -s 10.0.0.0/8 -p tcp --dport 22 -j ACCEPT /sbin/iptables -A INPUT -s 172.16.0.0/12 -p tcp --dport 22 -j ACCEPT /sbin/iptables -A INPUT -s 192.168.0.0/16 -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。



20.其他说明(未完待续,保持更新)


-华丽的分界线-华丽的分界线

常见问题解答

Q1。我折腾出错了,想再玩一次。我该怎么办?

yum remove teamtalk -y rm  -rf /opt/teamtalk/*

不用回到解放前,直接重装rpm包就行了。请分别执行步骤8/15/16。


Q2。我想用高版本的rpm包。我该怎么办?

rpm -Uvh teamtalk-*


Q3,我是开发者。我必须同时修改代码和测试它?

首先,你得安装teamtalk。请从步骤1开始一步一步地进行,直到完成。

如果你是c++开发人员,请进入/root/rpmbuild/teamtalk/目录,这是一个完整的编译环境。

以msfs为例,修改代码,然后重新编译覆盖新生成的二进制文件msfs/opt/teamtalk/msfs/msfs。

cd /root/rpmbuild/BUILD/teamtalk/server/src/msfs #此处省略修改代码内容 cmake . make cp msfs /opt/teamtalk/msfs/msfs make clean teamtalk restart msfs

如果你是php开发人员,请直接修改/opt/teamtalk/www中的内容。php是解释性语言,不用多说。


注:本文不代表官方。



附件有点大,博客无法上传。参见:http://pan.baidu.com/s/1jGkZZW6.



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/779996.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-04
下一篇 2022-05-04

发表评论

登录后才能评论

评论列表(0条)

保存