搭建自己的聊天室平臺、公司內(nèi)部聊天平臺,Rocket.Chat搭建使用
一,簡介
rocket.chat是一個開源的社交軟件,即可以直接在web頁面使用,也可以下載APP(Android,IOS,Windows,Mac OS)
主要功能:群組聊天,直接通信,私聊群,桌面通知,媒體嵌入,鏈接預(yù)覽,文件上傳,語音/視頻 聊天,截圖等,還支持實時翻譯,實現(xiàn)用戶之間的自動實時消息轉(zhuǎn)換。
也可以作為公司的內(nèi)部聊天平臺,所有數(shù)據(jù)都在自己的服務(wù)器上。
官方??github地址??
二,下載安裝
安裝方式有好幾種方式,這里采取docker-compose容器安裝方式,快速幾分鐘即可搭建完成。前提已安裝好docker和docker-compose。
參考官方文檔:https://docs.rocket.chat/
#創(chuàng)建一個目錄
mkdir rocketchat
#進(jìn)入目錄
cd rocketchat
#獲取官方docker-compose.yml文件
curl -L https://go.rocket.chat/i/docker-compose.yml -O
以下是獲取到的官方docker-compose.yml,默認(rèn)端口3000,使用mongo數(shù)據(jù)庫,根據(jù)自己需求更改。
我這里不需要更改什么,直接使用即可。
version: '2'
services:
rocketchat:
image: registry.rocket.chat/rocketchat/rocket.chat:latest
command: >
bash -c
"for i in `seq 1 30`; do
node main.js &&
s=$$? && break || s=$$?;
echo \"Tried $$i times. Waiting 5 secs...\";
sleep 5;
done; (exit $$s)"
restart: unless-stopped
volumes:
- ./uploads:/app/uploads
environment:
- PORT=3000
- ROOT_URL=http://localhost:3000
- MONGO_URL=mongodb://mongo:27017/rocketchat
- MONGO_OPLOG_URL=mongodb://mongo:27017/local
- REG_TOKEN=${REG_TOKEN}
# - MAIL_URL=smtp://smtp.email
# - HTTP_PROXY=http://proxy.domain.com
# - HTTPS_PROXY=http://proxy.domain.com
depends_on:
- mongo
ports:
- 3000:3000
labels:
- "traefik.backend=rocketchat"
- "traefik.frontend.rule=Host: your.domain.tld"
mongo:
image: mongo:4.0
restart: unless-stopped
volumes:
- ./data/db:/data/db
#- ./data/dump:/dump
command: mongod --smallfiles --oplogSize 128 --replSet rs0 --storageEngine=mmapv1
labels:
- "traefik.enable=false"
# this container's job is just run the command to initialize the replica set.
# it will run the command and remove himself (it will not stay running)
mongo-init-replica:
image: mongo:4.0
command: >
bash -c
"for i in `seq 1 30`; do
mongo mongo/rocketchat --eval \"
rs.initiate({
_id: 'rs0',
members: [ { _id: 0, host: 'localhost:27017' } ]})\" &&
s=$$? && break || s=$$?;
echo \"Tried $$i times. Waiting 5 secs...\";
sleep 5;
done; (exit $$s)"
depends_on:
- mongo
#traefik:
# image: traefik:latest
# restart: unless-stopped
# command: >
# traefik
# --docker
# --acme=true
# --acme.domains='your.domain.tld'
# --acme.email='your@email.tld'
# --acme.entrypoint=https
# --acme.storagefile=acme.json
# --defaultentrypoints=http
# --defaultentrypoints=https
# --entryPoints='Name:http Address::80 Redirect.EntryPoint:https'
# --entryPoints='Name:https Address::443 TLS.Certificates:'
# ports:
# - 80:80
# - 443:443
# volumes:
# - /var/run/docker.sock:/var/run/docker.sock
下載完成后,直接運行即可
sudo docker-compose up -d
注意,開放3000端口 or 關(guān)閉防火墻,如果你是公有云服務(wù)器,記得修改你的安全組!
瀏覽器輸入IP:3000,即可訪問。
三,登錄使用
第一次登錄,需要創(chuàng)建管理員相關(guān)信息,及組織公司相關(guān)信息(不重要),只有郵件地址有效即可。之后進(jìn)入自己的郵箱確認(rèn)鏈接驗證即可。
創(chuàng)建完成后,就可以登錄賬號,也可以創(chuàng)建新的普通用戶。當(dāng)然相關(guān)設(shè)置只能第一個管理員賬號才能設(shè)置。
登錄進(jìn)去,默認(rèn)進(jìn)入# general公共頻道,可以自己創(chuàng)建頻道和拉人。剩下的功能自己用管理員賬號研究。
四,SSL配置及nginx反向代理
rocket.chat有官方APP,在相關(guān)應(yīng)用商店或者直接下載安裝即可。
但是app連接服務(wù)器可能出現(xiàn)問題,導(dǎo)致連接不上。如下:
SSL配置
問題1:安卓app必須需要SSL連接才可,即 https://
所以要么自己在服務(wù)器上采用自簽證,要么用域名商的ssl,如Cloudflare配置域名自動免費簽證。
為了簡單,直接給自己IP配置域名,開啟SSL即可。簡單可自行設(shè)置即可。
Cloudflare配置完域名,記得開啟‘始終使用 HTTPS’功能。
注:如果直接配置域名,請將自己docker映射端口3000改為80端口,否則不生效,
即將docker-compose.yml中ports端口3000:3000,改為80:3000
nginx反向代理
問題2:采用nginx反向代理后,app提示websocket已于此伺服器上禁止
采用nginx反向代理情況:
- 其他安裝方式不能改3000端口的情況下(rocket.chat默認(rèn)端口)。
- docker服務(wù)被其他nginx的80端口占用的情況下,不能改80端口,用其他nginx反向代理給docker的3000端口。
- 或者為了服務(wù)器安全,采用其他服務(wù)器nginx反向代理給真實服務(wù)器。
如果直接配置如下:
server {
listen 80;
server_name ywbj.cc;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
app連接顯示會提示:websocket已于此伺服器上禁止
原因是nginx需要開啟websocket,加入這重要的兩行配置即可。
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
更換后配置如下:
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 80;
server_name ywbj.cc;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
}
再次連接app成功登錄。