【编译打包】teamtalk 在CentOS 7 上的安装
(写在前面:teamtalk目前处于开源的早期,程序功能不完整或有bug 属正常现象,用于生产环境请慎重。本文介绍的是个人摸索出的简便安装方法,在本文限定的条件下,可以保证安装配置正确,使用win/安卓客户端连接正常,本人主业为运维而非开发,条件有限,除非安装问题,不接受程序bug反馈。)
teamtalk 是由蘑菇街开源的一款IM 软件,包含完整的服务端和各种客户端(windows,andriod,IOS等),相当给力,进群讨论,气氛也十分活跃。蓝狐兄弟低调的同时也十分客气。
由于官方没有提供rpm包,我这里暂且自作聪明,打了一个src.rpm 包。
官方对于权限分配没有做处理,几个脚本都是root编译root运行,编译和下载过程混乱,我于是重新实现了一套编译脚本和服务启动脚本,用于一站式安装,增加安全性,提高部署体验。
使用下面的办法,可以确保编译/安装成功。不喜欢编译的同学,可使用附件提供的二进制rpm安装包,请直接从第8步开始,请优先选择附件目录中日期较新的文件目录,新的文件通常包含bug修复和功能提升。
1、请确保系统为CentOS 7 最小安装并且禁用了selinux(由于gcc版本问题,官方推荐centos7),并且以root身份登录,将附件中的srpm目录中的文件下载到/root,本文假设所有服务都安装在同一台机器上。
2、建立基本的编译环境
1
|
yum install gcc gcc-c++ make cmake libtool rpm-build redhat-rpm-config yum-utils -y
|
3、安装epel软件源 (centos官方仓库里没有的依赖包,通常这里都可以找到)
1
|
yum install epel-release -y
|
4、安装基本的环境依赖包
1
|
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 (见附件)
1
|
rpm -ivh teamtalk.xxxx.src.rpm # 会在/root目录下生成一个目录rpmbuild
|
6、检查和解决软件包依赖
1
2
|
cd /root/rpmbuild/SPEC
yum-builddep teamtalk.spec
|
7、编译teamtalk (编译过程实际并不需要root权限)
1
|
rpmbuild -ba teamtalk.spec #根据机器配置,耗时约5-10分钟不等
|
编译完成,会在/root/rpmbuild/RPMS/ 下生成一些后缀为rpm的软件包
8、使用下面的命令安装rpm包
1
2
3
4
5
|
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身份安装
1
2
3
|
cd /tmp/teamtalk
yum install epel-release -y
yum localinstall teamtalk-*.rpm -y
|
9、至此,teamtalk这块算是安装完成了,teamtalk 安装在/opt/teamtalk 目录下。
----------------------华丽的分界线-------------------------------------------
10、安装LNMP+redis环境
1
2
|
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 参考配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
[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的数据库结构.
1
2
3
4
5
6
7
8
|
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;
|
如果你使用了其他用户名和密码,请酌情修改下列文件中的对应配置:
1
2
|
/opt/teamtalk/www/application/config/database .php
/opt/teamtalk/db_proxy_server/dbproxyserver .conf
|
12、nginx+php-fpm的基本配置
1
2
3
4
|
systemctl enable nginx
systemctl enable php-fpm
systemctl start nginx
systemctl start php-fpm
|
修改/etc/nginx/nginx.conf 文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
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
1
|
systemctl restart nginx
|
至此,你应该至少应该能够通过浏览器登录web管理后台了,默认用户名和密码均是admin,后台功能并不完整,因为有一个配置文件需要配置后端的服务,后面会讲到,详见:/opt/teamtalk/www/application/config/config.php
14、配置redis
redis也可以不需配置,直接启动就好。
1
2
|
systemctl enable redis
systemctl start redis
|
15、配置teamtalk
执行下面的命令,查找配置需要修改的地方
1
|
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
1
2
|
cd /opt/teamtalk/file_server
.. /daeml file_server
|
服务启动后会在当前目录生成一个文件server.pid,里面是进程号
关闭服务的话就是杀进程号
1
2
|
cd /opt/teamtalk/file_server
kill ` cat server.pid`
|
官方带有两个脚本。restart.sh 和monitor.sh,我进行了些许改造,但是效果不是很好,依然保留。
另外我自己重新实现了一套启动脚本。位于/usr/bin/teamtalk,使用方法如下:
1
2
3
4
|
su - teamtalk
teamtalk start file_server
teamtalk stop file_server
teamtalk restart file_server
|
下列服务都可以通过命令直接 start/stop/restart。
1
2
3
4
5
6
7
8
|
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相关服务开机启动
1
2
3
|
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、根据我的理解,简单介绍一下模块的功能
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
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、防火墙问题
示例防火墙如下,请逐条执行:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
/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
|
如果是测试环境的话,为了方便调试,可以关闭防火墙。
1
|
systemctl stop firewalld
|
19、登录后台,新建用户,并使用客户端登录
客户端指定的登录服务器地址为 http://IP:8080/msg_server
20、其他说明 (未完待续,保持更新)
----------------------华丽的分界线-------------------------------------------
FAQ
Q1、折腾出错,想重新玩起,怎么办?
1
2
|
yum remove teamtalk -y
rm -rf /opt/teamtalk/ *
|
不用回到解放前,只需重新安装rpm包即可,请分别执行第8/第15/第16步
Q2、我想使用高版本的rpm包,怎么办?
1
|
rpm -Uvh teamtalk-*
|
Q3、我是开发人员,我要一边改代码,一边测试?
首先,你得安装好teamtalk,请从第1步开始逐步进行,直至完成。
如果你是c++开发人员,请进入/root/rpmbuild/teamtalk/ 目录,那里是一个完整的编译环境,以msfs为例,修改代码,然后重新编译,将新生成的二进制文件msfs覆盖/opt/teamtalk/msfs/msfs 。
1
2
3
4
5
6
7
|
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属解释性语言,无需多讲。
注:本文不代表官方。
【编译打包】teamtalk 在CentOS 7 上的安装相关推荐
- Redis在CentOS 7上的安装部署
http://www.linuxidc.com/Linux/2017-05/143312.htm 不能更赞了 简介: Redis是一种高级key-value数据库.它跟memcached类似,不过 ...
- CentOS 7 上 Docker 安装
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. Docker支持以下的CentOS版本: CentOS 7 (64-bit) CentOS 6.5 ...
- 2021-08-15 minikube在阿里云centos系统上的安装实践
教程原文链接,我这里用阿里云服务器上的Centos8系统做一下教程.这里发现CPU必须两个核以上! 在ssh工具登录自己的阿里云服务器 我就直接用Pycharm连接了 安装docker docker以 ...
- centos 7上ambari安装试用
2019独角兽企业重金招聘Python工程师标准>>> 1.有三台centos7,名字分别是ws11.localdomain, ws12.localdomain, ws13.loca ...
- Redis 在CentOS 6上的 安装和部署以及redis的主从复制sentinel实现HA
一.简介 Redis是基于内存的存储,所有数据都工作与内存中,基于键值存储(key-value store),经常拿来跟memcached做比较:memcached没有持久能力,Redis有持久能力, ...
- linux qtopia-2.2.0编译,qtopia-2.2.0在linux上的安装(基于mini2440)
环境: fedora9.ubuntu10.04 x86-qtopia.arm-qtopia gcc-4.3.x.g++-4.3.x arm-linux-4.3.2 一.x86-qtopia的安装 x8 ...
- 数据可视化组件Grafana详细解读--RedHat/Fedora/CentOS/Oracle上的安装
数据可视化演示: PS:您可以在目标服务器上运行数据可视化组件,监控数据服务器,Web服务器,网络文件服务器等等服务器的各种运行状态,DevOps的必不可少的组件. 在基于RPM的Linux的上安装版 ...
- CentOS 6上配置安装MariaDB,二进制文件,非源码
准备数据存储盘 添加一块磁盘用来存放MySQL以后所产生的数据 #fdisk /dev/sdc Command (m for help): n Command action e extended p ...
- 阿里云服务器 CentOS 7上-- Docker 安装 网关(API-Getway)--KONG
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 全程操作按官方文档来就可以了. 1.将 Kong 连接到 Cassandra 或 PostgreSQ ...
最新文章
- 数据挖掘竞赛指南:曾经的数据挖掘少年,如今的阿里算法大佬
- 网站SEO优化之如何提升访客量?
- python做电脑软件-程序员带你十天快速入门Python,玩转电脑软件开发(二)
- Servlet 全局验证是否登录
- GOOGLE HACKING 系列文章 【FreeXploiT整理收集】
- Nginx 禁止猜测路径上传恶意代码
- 常用基础Linux操作命令总结与hadoop基础操作命令
- d3d9 抓取windows屏幕
- Essential C++中文版——满汉全席之外
- java读取properties文件详解
- SAP 独立系统的传输请求
- javasript |仿百度换肤效果
- 完美黑苹果clover EFI BigSur11.2 神舟K580c i5 BCM94360HMB WIFI蓝牙二合一网卡
- Matlab200以内所有质数,用matlab编写一个程序:求出200以内的质数,求!!!!急!!!!!...
- 房地产开发建设项目管理(全程房地产典范企业案例)
- 区块链赋能医疗产业报告
- mysql的sqlyog学习笔记(高级查询部分)(代码用命令行显示 )
- linux 内存大页,Linux大页内存管理等---菜鸟初学
- 安装ActivePerl
- 共路信令(CCS),随路信令(CAS)简介
热门文章
- 从零实现RPC框架1:RPC框架架构设计
- idea关闭多个项目合并在tab栏显示
- ❀TCP/IP协议面试题总结❀
- css 调字符间距和段首缩进
- 为什么煲鸡汤给病人喝?
- 传神助力进博会语言服务全覆盖 专业译员、翻译神器齐上阵
- #榜样的力量#天玑数据大脑疫情风险感知预警平台“智疫通”丨数据猿新冠战“疫”公益策划...
- echarts文字换行----淘干货找坏男人
- spring @RequestBody注解无法接收x-www-form-urlencoded 解决方案
- ldap服务器配置信息错误,技巧:排除LDAP主机服务器故障的两种方法