(写在前面: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 -y3.安装epel软件源(centos官方仓库中没有的依赖包,通常可以在这里找到)
yum install epel-release -y4.安装基本环境依赖包。
yum install mariadb-devel gtest-devel log4cxx-devel curl-devel apr-devel apr-util-devel libuuid-devel openssl-devel hiredis-devel rsync wget -y5.安装teamtalk。XXXX.src.rpm(见附件)
rpm -ivh teamtalk.xxxx.src.rpm # 会在/root目录下生成一个目录rpmbuild6.检查并解决软件包依赖性。
cd /root/rpmbuild/SPEC yum-builddep teamtalk.spec7.编译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 -y9.至此,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 -y11.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.conf12.nginx+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 redis15.配置teamtalk
执行以下命令,找出需要修改配置的地方
将搜索文件中的单词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.local17.根据我的理解,简单介绍一下模块的功能。
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:后台管理系统,企业架构,用户添加删除等,端口8018.防火墙问题
防火墙示例如下,请逐一实施:
/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 firewalld19.登录后台,创建一个新用户,使用客户端登录。
客户端指定的登录服务器地址是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。
如果你是php开发人员,请直接修改/opt/teamtalk/www中的内容。php是解释性语言,不用多说。
注:本文不代表官方。
附件有点大,博客无法上传。参见:http://pan.baidu.com/s/1jGkZZW6.
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)