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

(寫在前面:teamtalk目前處於開源的早期,程序功能不完整或有bug 屬正常現象,用於生產環境請慎重。本文介紹的是我的摸索出的簡便安裝方法,在本文限定的條件下,能夠保證安裝配置正確,使用win/安卓客戶端鏈接正常,本人主業爲運維而非開發,條件有限,除非安裝問題,不接受程序bug反饋。)javascript


teamtalk 是由蘑菇街開源的一款IM 軟件,包含完整的服務端和各類客戶端(windows,andriod,IOS等),至關給力,進羣討論,氣氛也十分活躍。藍狐兄弟低調的同時也十分客氣。php


因爲官方沒有提供rpm包,我這裏暫且自做聰明,打了一個src.rpm 包。css


官方對於權限分配沒有作處理,幾個腳本都是root編譯root運行,編譯和下載過程混亂,我因而從新實現了一套編譯腳本和服務啓動腳本,用於一站式安裝,增長安全性,提升部署體驗。html


使用下面的辦法,能夠確保編譯/安裝成功。不喜歡編譯的同窗,可以使用附件提供的二進制rpm安裝包,請直接從第8步開始,請優先選擇附件目錄中日期較新的文件目錄,新的文件一般包含bug修復和功能提高。java


一、請確保系統爲CentOS 7 最小安裝而且禁用了selinux(因爲gcc版本問題,官方推薦centos7),而且以root身份登陸,將附件中的srpm目錄中的文件下載到/root,本文假設全部服務都安裝在同一臺機器上。node


二、創建基本的編譯環境mysql

yum install gcc gcc-c++ make cmake libtool rpm-build redhat-rpm-config yum-utils -y


三、安裝epel軟件源 (centos官方倉庫裏沒有的依賴包,一般這裏均可以找到)linux

yum install epel-release -y


四、安裝基本的環境依賴包nginx

yum install mariadb-devel gtest-devel log4cxx-devel curl-devel apr-devel apr-util-devel libuuid-devel openssl-devel hiredis-devel rsync wget -y

五、安裝teamtalk.XXXX.src.rpm (見附件)c++

rpm -ivh teamtalk.xxxx.src.rpm  # 會在/root目錄下生成一個目錄rpmbuild


六、檢查和解決軟件包依賴

cd /root/rpmbuild/SPEC
yum-builddep teamtalk.spec

 

七、編譯teamtalk (編譯過程實際並不須要root權限)

rpmbuild -ba teamtalk.spec  #根據機器配置,耗時約5-10分鐘不等

 

編譯完成,會在/root/rpmbuild/RPMS/ 下生成一些後綴爲rpm的軟件包


八、使用下面的命令安裝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


九、至此,teamtalk這塊算是安裝完成了,teamtalk 安裝在/opt/teamtalk 目錄下。

 

----------------------華麗的分界線-------------------------------------------


十、安裝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


十一、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


十二、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


1四、配置redis

redis也能夠不需配置,默認使用 127.0.0.1:6379 ,直接啓動就好。

systemctl enable redis
systemctl start redis


1五、配置teamtalk

執行下面的命令,查找配置須要修改的地方

find /opt/teamtalk -type f -iname "*conf*" |xargs grep -n --color CHANGEME

將搜索到的文件中的CHANGEME 字眼改成你的服務器本地實際IP,理論上也能夠寫域名,但不要填127.0.0.1 。


1六、開啓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


下列服務均可以經過命令直接 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


利用系統的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


1七、根據個人理解,簡單介紹一下模塊的功能

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


1八、防火牆問題

示例防火牆以下,請逐條執行:

/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


1九、登陸後臺,新建用戶,並使用客戶端登陸

客戶端指定的登陸服務器地址爲 http://IP:8080/msg_server


wKiom1Wl-TGiZvnZAAB9-v0R1CQ383.jpg


20、其餘說明 (未完待續,保持更新) 


----------------------華麗的分界線-------------------------------------------

FAQ

Q一、折騰出錯,想從新玩起,怎麼辦?

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

不用回到解放前,只需從新安裝rpm包便可,請分別執行第8/15/16步


Q二、我想使用高版本的rpm包,怎麼辦?

rpm -Uvh teamtalk-*


Q三、我是開發人員,我要一邊改代碼,一邊測試?

首先,你得安裝好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

相關文章
相關標籤/搜索