Linux系統安裝IM相關服務


1、安裝MongoDB

MongoDB是一中非關系型數據庫(NoSql)。
    易擴展: NoSQL有很多種,有一個共同特點就是去掉關系數據庫的關系特性,數據之間無關系,易於擴展。
    高性能: 在大數據量下,有很優秀的讀寫性能,因為數據庫的結構簡單。
    靈活性:無須事先建立字段、表。如果數據量非常大,字段非常多,建表很苦難。
    高可用: 在不太影響性能的情況,可以方便的實現高可用的架構。

MongoDB三元素:
    1 數據庫: 和關系型數據庫中數據庫的層次相同,內部可以有多個集合。
    2 集合: 相當於關系型數據庫中的表,存儲若干文檔,結構不固定
    3 文檔: 相當於關系型數據庫中的行,是Json擴展的Bson類型鍵值對數據

這個下載太慢,因此先下載了再上傳

鏈接:https://pan.baidu.com/s/1dK8M6LPX6phS0pmd1pw8Xg  密碼:zksw

 

上傳 mongoDb安裝包:

cd /opt
tar -zxvf tar -zxvf mongodb-linux-x86_64-4.0.13.tgz
mv  mongodb-linux-x86_64-3.4.0  mongodb

 

在/opt/mongodb目錄下創建mongo.conf文件內容如下:

cd   mongodb
vim  mongo.conf

 

配置模板:

systemLog:

   destination: file
   path: "/opt/mongodb/logs/mongodb.log"
   logAppend: true

storage:
   dbPath: "/data/mongodb"
   journal:
      enabled: true
   mmapv1:
     smallFiles: true
   wiredTiger:
      engineConfig:
        configString: cache_size=1G

processManagement:
      fork: true

net:
   #bindIp: 127.0.0.1
   port: 28018

setParameter:
   enableLocalhostAuthBypass: false

 

#注 加上下面的配置權限驗證,需要的可以加,灰常坑
security:
   authorization: enabled

 

然后創建mongodb數據目錄,和日志目錄

mkdir  -p  /data/mongodb
mkdir  logs

 

在/opt/mongodb目錄下創建start啟動腳本

vim start

內容如下:

 /opt/mongodb/bin/mongod --config=/opt/mongodb/mongo.conf

 

執行start腳本,出現如下圖所示內容則啟動成功

 

 

創建stop腳本:

vim stop

內容如下

ps -ef|grep mongo.conf|grep -v grep|awk '{printf $2}'|xargs kill -9

 

*設置用戶名密碼,這里只建議參考不建議使用

特別注意:mongodb和spring-mongodb默認的認證機制不同,會導致項目中mongo連接不上!

1、mongodb的認證機制有2種:SCRAM-SHA-1和MONGODB-CR。3.0之后版本默認為:SCRAM-SHA-1;

2、spring-mongodb默認為:MONGODB-CR,並不支持設置認證方式;

登錄

普通登錄:bin/mongo 127.0.0.1:28018

認證登錄: bin/mongo -u admin -p 123 --authenticationDatabase admin

查看當前認證機制。為5則需要修改成3,但是改成3新版本的monggo認證模式無法啟動。

use admin

db.system.version.findOne({"_id":"authSchema"});
db.system.users.remove({});#刪除用戶

#先刪除再插入
db.system.version.remove({});
db.system.version.insert({"_id":"authSchema","currentVersion":3});

#直接修改
db.system.version.update({"_id":"authSchema"},{$set:{"currentVersion":3}});

 

 用戶是和庫綁定的,每一個庫都需要增加用戶且驗證

use admin
db.createUser({ user: "root", pwd: "zaixiu!@#$%^", roles:[{role:"userAdminAnyDatabase",db: "admin"}]});
db.auth("root","zaixiu!@#$%^");

use addressbook
db.createUser({user:"root",pwd:"zaixiu!@#$%^",roles:[{role:"read", db:"addressbook"},{role:"readWrite", db:"addressbook"},{role:"dbAdmin",db:"addressbook"}]});
db.auth("root","zaixiu!@#$%^");

 

啟動正常springboot也無法正常連接。因此測試環境不再深究取消認證模式,采用數據備份。

創建mongodb備份腳本 

vim mongodb_bak

內容如下

#!/bin/bash
#backup MongoDB

#mongodump命令路徑
DUMP=/data/mongodb/bak/mongodump

#臨時備份目錄
OUT_DIR=/data/mongodb_bak/mongodb_bak_now

#備份存放路徑
TAR_DIR=/data/mongodb_bak/mongodb_bak_list

#獲取當前系統時間
DATE=`date +%Y_%m_%d`

#數據庫賬號
DB_USER=root

#數據庫密碼
DB_PASS=123456

#DAYS=15代表刪除15天前的備份,即只保留近15天的備份
DAYS=15

#最終保存的數據庫備份文件
TAR_BAK="mongodb_bak_$DATE.tar.gz"


cd $OUT_DIR
rm -rf $OUT_DIR/*

mkdir -p $OUT_DIR/$DATE

#備份全部數據庫
$DUMP -h 127.0.0.1:28018 -u $DB_USER -p $DB_PASS --authenticationDatabase "admin" -o $OUT_DIR/$DATE

#壓縮為.tar.gz格式
tar -zcvf $TAR_DIR/$TAR_BAK $OUT_DIR/$DATE

#刪除15天前的備份文件
find $TAR_DIR/ -mtime +$DAYS -delete

exit

 

授權,使其可執行

chmod +x mongodb_bak

 

修改/etc/crontab,添加計划任務

vi /etc/crontab

 

編輯 /etc/crontab 文件只有 root 用戶才行
查看當前用戶是否為root

whoami

 

檢測系統是否安裝crond服務和運行狀態,如果是運行狀態可跳過下面帶 * 的步驟

service crond status

 

*安裝命令,一般系統都有

#vixie-cron 軟件包是 cron 的主程序;
#crontabs 軟件包是用來安裝、卸裝、或列舉用來驅動 cron 守護進程的表格的程序。
yum -y install vixie-cron
yum -y install crontabs

 

*啟動服務

service crond start //啟動服務
service crond stop //關閉服務
service crond restart //重啟服務
service crond reload //重新載入配置
service crond status //查看crontab服務狀態

 

*設置開機自動啟動

chkconfig --level 345 crond on

 

每天晚上23:50開始執行MongoDB數據庫備份腳本,考慮數據量和備份時間取50

#分 時 日 月 周  命令
50 23 * * * root /opt/mongodb/mongodb_bak

 

附錄:MongoDB數據庫恢復,注意linux系統使用絕對路徑,否則 -bash: mongorestore: command not found

#恢復全部數據庫
/mongodbpath/mongorestore -u $DB_USER -p $DB_PASS --authenticationDatabase "admin" --noIndexRestore --dir /data/mongodb_bak/mongodb_bak_now/2016_12_17/
#恢復單個數據庫
/mongodbpath/mongorestore -u $DB_USER -p $DB_PASS --authenticationDatabase "admin" --noIndexRestore -d dbname --dir /data/mongodb_bak/mongodb_bak_now/2016_12_17/dbname

實例1 先刪庫再恢復
/mongodbpath/bin/mongorestore -h 127.0.0.1:27017 --drop /data/mongodb_bak/mongodb_bak_now/2021_10_27
實例2 恢復
/mongodbpath/bin/mongorestore -h 127.0.0.1:27017 /data/mongodb_bak/mongodb_bak_now/2021_10_27

更多請參考MongoDB的備份與恢復

 

 

測試服允許遠程訪問放通對應端口,生產環境不能放通

netstat  -tunlp

 

28018端口沒有開放,查看防火牆狀態。

firewall-cmd --state  #查看防火牆狀態。

 

得到結果是running或者not running, 如果沒開啟

systemctl start firewalld

 

在running 狀態下,向firewall 添加需要開放的端口

firewall-cmd --permanent --zone=public --add-port=28018/tcp  #永久的添加該端口。去掉--permanent則表示臨時。

 

與之對應關閉的命令為

firewall-cmd --zone=public --remove-port=28018/tcp --permanent

 

加載配置,使得修改有效。

firewall-cmd --reload 

 

 

2、安裝Redis

下載、解壓、安裝,參考https://redis.io/download

wget https://download.redis.io/releases/redis-6.2.6.tar.gz
tar xzf redis-6.2.6.tar.gz
cd redis-6.2.6
make

 

修改redis目錄下redis.conf文件中配置項:

daemonize yes(進程后台運行)

#允許遠程訪問,注意這個是測試環境才允許
注釋掉 #bind 127.0.0.1

將protected-mode no #改為no關閉保護模式,外網可以直接訪問

requirepass 123456 #設置密碼

 

在redis目錄下創建start啟動腳本內容如下:

/opt/redis-6.2.6/src/redis-server  /opt/redis-6.2.6/redis.conf

 

執行sh start 命令啟動腳本,查看redis是否啟動成功

 

 

 

 同上創建stop腳本用於關閉redis

ps -ef|grep  /opt/redis-6.2.6/src/redis-server|grep -v grep|awk '{printf $2}'|xargs kill -9
ps -ef|grep  /opt/redis-6.2.6/src/redis-server

 

測試環境6379對外開放

查看6379端口,安全組也要放通6379端口

netstat –tunlp

 

6379端口沒有開放,查看防火牆狀態。

firewall-cmd --state  #查看防火牆狀態。

 

在running 狀態下,向firewall 添加需要開放的端口

firewall-cmd --permanent --zone=public --add-port=6379/tcp  #永久的添加該端口。去掉--permanent則表示臨時。

 

加載配置,使得修改有效。

firewall-cmd --reload 

 

外部連接redis,測試成功

 

 

 

 

3、安裝Jdk1.8+

安裝java環境,直接命令:

yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel

 

配置環境變量

vim /etc/profile

 

i (進入編輯狀態),將下面行代碼放在文件末尾

JAVA_HOME=/usr/lib/jvm//usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-0.el7_9.x86_64
JRE_HOME=/usr/lib/jvm//usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-0.el7_9.x86_64/jre
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$JAVA_HOME/bin:$PATH
export PATH JAVA_HOME CLASSPATH

 

按Esc(退出編輯狀態)

:wq(保存並退出)

 

 讓設置立即生效

source /etc/profile

 

 查看JDK 是否安裝成功

java -version

 

 

 

4、安裝RocketMQ 隊列

下載地址:建議使用最新版,低版本有fastjson低版本jar包的漏洞

https://www.apache.org/dyn/closer.cgi?path=rocketmq/4.9.1/rocketmq-all-4.9.1-bin-release.zip

 

上傳,安裝

cd  /opt
unzip rocketmq-all-4.9.1-bin-release.zip
mv rocketmq-all-4.9.1-bin-release rocketmq
 
        

根據內存的大小調整rocketmq的內存,默認的大了些

vim  bin/runbroker.sh

 

JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn125m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
 JAVA_OPT="${JAVA_OPT} -XX:MaxDirectMemorySize=256m"

 

vim bin/runserver.sh

 

 

創建腳本啟動

vim mqStart

 

寫入如下內容:

#!/bin/sh
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-0.el7_9.x86_64
nohup sh /opt/rocketmq /bin/mqnamesrv > /opt/rocketmq /logs/rocketmqlogs/namesrv.log  2>&1 &
echo "Start Name Server End"
nohup sh /opt/rocketmq /bin/mqbroker -n localhost:9876 > /opt/rocketmq /logs/rocketmqlogs/broker.log  2>&1  &
echo "Start  Broker End"

 

創建腳本停止

vim mqStop

寫入內容

#!/bin/sh
sh /opt/rocketmq/bin/mqshutdown broker &
sh /opt/rocketmq/bin/mqshutdown namesrv
echo "Please wait process to exit! check it type jps"

 

執行jps 命令 查看正常應該能看到NamesrvStaup 和 BrokerStartup

jps

 

注冊推送消息、用戶狀態話題

sh  bin/mqadmin updateTopic -n localhost:9876  -c DefaultCluster  -t  pushMessage
sh  bin/mqadmin updateTopic -n localhost:9876  -c DefaultCluster  -t  xmppMessage
sh  bin/mqadmin updateTopic -n localhost:9876  -c DefaultCluster  -t  userStatusMessage
sh  bin/mqadmin updateTopic -n localhost:9876  -c DefaultCluster  -t  HWPushMessage
sh  bin/mqadmin updateTopic -n localhost:9876  -c DefaultCluster  -t  fullPushMessage
sh  bin/mqadmin updateTopic -n localhost:9876  -c DefaultCluster  -t  keywordMessage

 

 

 

*查看所有消費組group(進入bin目錄下)

 sh mqadmin consumerProgress -n 127.0.0.1:9876

* 查看指定消費組下的所有topic數據堆積情況:

    sh mqadmin consumerProgress -n 127.0.0.1:9876 -g groupname

* 查看所有topic :

  sh mqadmin topicList -n 127.0.0.1:9876

* 查看topic信息列表詳情統計

   sh mqadmin topicstatus -n 127.0.0.1:9876 -t topicWarning

*  新增topic

   sh mqadmin updateTopic –n 127.0.0.1:9876 –c DefaultCluster –t topicWarning

* 刪除topic

  sh mqadmin deleteTopic –n 127.0.0.1:9876 –c DefaultCluster –t topicWarning

*查詢集群消息

sh mqadmin  clusterList -n 127.0.0.1:9876

 

5、安裝Spring-boot-imapi  api 接口服務

這里才有復制的安裝包上傳到服務器再解壓

cd  /opt
unzip spring-boot-imapi.zip
cd  spring-boot-imapi

 

修改application.properties配置文件

vim  application.properties

 

在spring-boot-imapi目錄下執行sh start命令運行imapi接口服務

 

 

 

 

啟動完成后,在瀏覽器打開鏈接“http://localhost:8092/console/login”,出現如下圖所示內容即酷聊接口部署成功:

 

將系統配置---> 客戶端配置里的地址修改為部署的服務器的地址,這些地址用於在客戶端啟動時返回給客戶端使用,請參考下圖

 

 

 

 

6、安裝IMServer   Mp-Server 通訊服務

同上,復制壓縮包,解壓即可。

 

7、安裝 shiku-push 推送服務

shiku-push服務為離線消息推送服務,去消費tigase 放到RocketMq 隊列里的離線消息。

shiku-push 部署包各個文件說明

這里采用復制壓縮包上傳的方式安裝

unzip shiku-push.zip
cd  shiku-push

 

修改application.properties 配置文件

vim  application.properties

目前ios 支持anps和極光推送 ,安卓目前集成了華為、小米、魅族、vovo、oppo,谷歌六種推送,如果手機有谷歌框架且能訪問外網,會使用谷歌推送,否則根據機型來,非以上機型使用小米推送

如已經申請好相關配置,將申請好的小米、華為、極光 等平台的key   secret 配置到對應的位置。也可以后續在配置,加上配置重啟shiku-push 服務即可

ios  apns 推送配置。替換ios   apns推送證書,個人版和企業版選擇一個使用即可,需要注意在申請ios  apns 證書的時候必須要設置密碼

修改完配置后使用 sh start 命令啟動shiku-push服務

 

8、安裝message-push服務

說明: Message-push 是從 imapi 中獨立出來的服務,用於發送系統Xmpp 消息。

Imapi 服務里面群組等部分接口操作后,需要發一條xmpp 消息通知用戶,

此時imapi 將需要發送的xmpp 消息放到rocketMq 隊列下,由Message-push 服務獲取隊列里的消息然后把消息經過tigage-server 發送到設備端

 

這里下載地址無法下載,采用復制壓縮包的方式

 

unzip message-push.zip
cd  message-push

 

參照如下示例,修改配置文件

vim  application.properties

 

啟動 message-push 服務

sh start

 

9、安裝Upload文件上傳服務

這里下載地址無法下載,采用復制壓縮包的方式

unzip upload.zip

 

參照如下示例修改配置:說明:/data/www/resources:文件上傳成功后存儲的根目錄

beginIndex:根目錄“/data/www/resources”的字符串長度(從0開始)用於分隔字符串生成文件鏈接用(需要注意,如果修改了相關路徑,beginIndex 的數值也要相應修改)

 

 

 

在文件上傳服務所在機器創建存儲目錄(例如“/data/www/resources”)並初始化目錄結構

可以直接將以下命令全部拷貝到Linux服務器一次性執行

mkdir  -p  /data/www/resources
cd /data/www/resources
mkdir audio
mkdir avatar
mkdir avatar/o
mkdir avatar/t
mkdir avatar_r
mkdir avatar_r/o
mkdir avatar_r/t
mkdir gift
mkdir image
mkdir image/o
mkdir image/t
mkdir other
mkdir preview
mkdir temp
mkdir u
mkdir video

 

 啟動 upload

cd  /opt/upload
sh  start

 

10、安裝Nginx,配置文件訪問

首先安裝 nginx 所需的依賴 

yum install -y  pcre  pcre-devel  zlib  zlib-devel openssl  openssl-devel  

 

安裝 Nginx-1.21.3

直接下載.tar.gz安裝包,地址:https://nginx.org/en/download.html

tar  -zxvf  nginx-1.21.3.tar.gz
mv  nginx-1.21.3  nginx-install

cd nginx-install
./configure --prefix=/opt/nginx-1.21.3   --with-http_ssl_module  --with-stream

make && make install
rm  -rf  ../nginx-install

 

在nginx目錄下創建start、stop腳本:

start腳本:

 vim  start

 

寫入如下內容

./sbin/nginx
ps -ef|grep nginx

 

stop腳本: 

vim  stop

 

寫入如下內容

 

./sbin/nginx -s stop
ps -ef|grep nginx

 

2)在upload 所在的機器上 配置頭像訪問

說明:由於FastDfs 不支持對上傳文件的自定義命名,而目前用戶頭像是根據userId 命名的,所以目前用戶頭像沒有使用FastDfs 儲存。

修改Nginx 配置文件 nginx.conf ,添加如下內容(域名配置示例

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    #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  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;
    #keepalive_timeout  0;
    keepalive_timeout  65;
    client_max_body_size 1000M;
    #gzip  on;

    server {
        listen       80;
        server_name  aaa.com;#你的域名
        rewrite ^(.*)$  https://$host$1 permanent;

        location / {
            root   html;
            index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }

    server{
        listen            443 ssl;
        server_name       ts-test.tnshow.com;  #后台接口域名
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 SSLv2;
        ssl_prefer_server_ciphers on;
        ssl_certificate       /ott/nginx-1.21.3/ssl/aaa.com.pem;
        ssl_certificate_key  /ott/nginx-1.21.3/ssl/aaa.com.key;
        ssl_session_timeout 30m;


               location / {
                    proxy_set_header X-Real-IP $remote_addr;
                    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                    proxy_pass          http://127.0.0.1:8099; #接口端口

        }

        location /ms {
                  proxy_set_header X-Real-IP $remote_addr;
                  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                  proxy_pass          http://127.0.0.1:8098; #接口端口

        }

        location /public {
                  proxy_set_header X-Real-IP $remote_addr;
                  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                  proxy_pass          http://127.0.0.1:8097; #接口端口

        }

     }

    

     #加載其他配置
    include /ott/nginx-1.21.3/conf/vhosts/*.conf;
 
}

 

執行start、stop腳本,查看nginx是否啟動、停止成功:

如按IP方式配置即得到文件訪問、下載路徑 為 ip:8089

至此服務端相關服務已經部署完成

如出現nginx無法訪問的情況,需要安全組、防火牆開通相應的端口,例如80、443等。

最后修改后台配置

Imapi服務啟動完成后,在瀏覽器打開鏈接“http://localhost:8092/console/login”

將系統配置---> 客戶端配置里的地址修改為部署的服務器的地址,這些地址用於在客戶端啟動時返回給客戶端使用,請參考下圖

 

修改配置保存后訪問

http://localhost:8092/config

 

最后

http://localhost:8092/config 為客戶端配置的apiurl  將 apiurl和 apikey(在imapi服務配置文件中配置) 提供 給客戶端,客戶端打包需要的,至此大功告成。

 

11.安裝騰訊雲主機安全客戶端

wget http://u.yd.tencentyun.com/ydeyes_linux64.tar.gz -O ydeyes_linux64.tar.gz && tar -zxvf ydeyes_linux64.tar.gz && ./self_cloud_install_linux64.sh

檢測是否安裝成功, 查看 YDService,YDLive進程是否有運行,有運行則安裝成功。

ps -ef | grep YD

 

IM各服務啟動順序

1.mongoDB

2.redis 

3.roketmq 

4.imapi 

5.IMserver

6.mp-server

7.shiku-push 

8.message-push 

9.nginx-1.9.11 

10.upload 

 

常見問題排除

1.socket連接不上

檢查jks證書和密碼是否正確

檢查nginx代理配置IM模塊是否加載正確

檢查端口是否是IPV6類型,當IPV4和6同時存在會超時

netstat –ant

 

禁用IPV6

vim /etc/sysctl.conf

 

寫入 

net.ipv6.conf.all.disable_ipv6 = 1

net.ipv6.conf.default.disable_ipv6 = 1

net.ipv6.conf.lo.disable_ipv6 = 1

 

加載讓其生效

sudo sysctl -p /etc/sysctl.conf

 

查看狀態:

cat /proc/sys/net/ipv6/conf/all/disable_ipv6

顯示1說明生效

 

vim  /etc/modprobe.conf

在文檔中加入如下的兩條:

alias net-pf-10 off
alias ipv6 off

保存退出,並且重新啟動系統

重啟系統,運行lsmod|grep ipv6,看不到結果說明ipv6已經關閉。此時APP也可以正常發消息了。

如出現PC端能上傳圖片,而app端不能,則需要關閉防火牆

systemctl  stop  firewalld

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM