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 為客戶端配置的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