歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 【編譯打包】teamtalk在CentOS 7上的安裝

【編譯打包】teamtalk在CentOS 7上的安裝

日期:2017/2/27 15:47:46   编辑:Linux教程
teamtalk 是由蘑菇街開源的一款IM軟件,包含完整的服務端和各種客戶端(windows,andriod,IOS等),相當給力,進群討論,氣氛也十分活躍。藍狐兄弟低調的同時也十分客氣。

由於官方沒有提供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
Copyright © Linux教程網 All Rights Reserved