我正在参与掘金创作者训练营第5期, 点击了解活动详情
前言
在私网环境不能联网,所以急需一个协同办公的软件,需要满足即时通信,文件传输,找了很多开源的软件,但很多都是长时间没有维护的老项目了,这个项目在社区的活跃度很高,然后技术是使用的node+mongo,比较适合前端人员摸索,其次是部署简单。
不想看本文想直接体验一下的可以点击下面连接,创建了一个供掘友们摸鱼的频道。
体验地址:聊天室
体验账号:
zhangsan
zhangsan
当然注册也很简单。
欢迎JYM来体验一下。
简介
RocketChat 是一款优秀的开源聊天软件。支持各种平台,IOS、Android、Web、Mac、Windows 以及 Linux,安装部署简单,功能简单易用,目前部分功能还在完善当中,特别适合小公司自建聊天平台。
他的频道功能,群组功能,很不错,有点像slack。还能针对频道中的一句话开启一个讨论,相当nice。
docker 部署
前置条件
本文是记录使用docker安装的过程记录,所以前提条件是你需要有一个安装了docker 虚拟机环境,我这边使用的是阿里云的服务器。
- 虚拟机一台
- 安装 docker环境
- 安装 docker-compose
创建 Rocket.Chat 所需的文件夹
mkdir /home/rocketchat
cd /home/rocketchat
mkdir data
mkdir dump
创建 docker-compose.yml 并做配置
version: '2'
services:
rocketchat:
image: rocket.chat:latest
restart: unless-stopped
volumes:
- ./uploads:/app/uploads
environment:
- PORT=3000
- ROOT_URL=http://chat.inumio.com # 改为你自己的服务器的ip
- MONGO_URL=mongodb://mongo:27017/rocketchat
- MONGO_OPLOG_URL=mongodb://mongo:27017/local
- Accounts_UseDNSDomainCheck=True
depends_on:
- mongo
ports:
- 8818:3000 # 容器映射出去的端口,根据自己的需要调整
mongo:
image: mongo
restart: unless-stopped
volumes:
- $PWD/data:/data/db
- $PWD/dump:/dump
command: mongod --smallfiles --oplogSize 128 --replSet rs0 --storageEngine=mmapv1
# 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
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
拉取docker images
下载所需的docker镜像,可能会花费一些时间。
只用在第一次安装时或者想要更新应用时执行命令即可。
docker pull mongo:4.0
docker pull registry.rocket.chat/rocketchat/rocket.chat
注意拉取4.0 的镜像,新版本的Mongo没有 --smallFile 命令,会导致在创建副本集时出错,如要使用新版的Mongo需要设置docker-compose.ym 中的 command 。
创建MongoDB容器
docker-compose up -d mongo
Mongo 支持全天候备份,注意不要频繁的启动它。等几分钟,等它完全起来。
创建mongodb replica
docker-compose up -d mongo-init-replica
这个容器将创建MongoDB副本集,创建成功后它自己就停了。
点火发射 Rocket.Chat
docker-compose up -d rocketchat
Rocket.Chat should be ready in a minute or two.
部署成功
有点像slack。能够发图片,文件,代码片段等。功能还是很强的。
体验地址:
http://124.223.215.206:9001/channel/yZxshmR4r2A5YaxhF
报错
安装报错1
[root@gzslm app]# docker logs cb5c2e92b23d
$MONGO_OPLOG_URL must be set to the 'local' database of a Mongo replica set
LocalStore: store created at
LocalStore: store created at
LocalStore: store created at
Browserslist: caniuse-lite is outdated. Please run:
npx browserslist@latest --update-db
Why you should do it regularly:
https://github.com/browserslist/browserslist#browsers-data-updating
ufs: temp directory created at "/tmp/ufs"
Loaded the Apps Framework and loaded a total of 0 Apps!
+---------------------------------------------------------------------------+
| SERVER ERROR |
+---------------------------------------------------------------------------+
| |
| Rocket.Chat Version: 4.3.0 |
| NodeJS Version: 12.22.8 - x64 |
| MongoDB Version: 5.0.5 |
| MongoDB Engine: wiredTiger |
| Platform: linux |
| Process Port: 3000 |
| Site URL: http://124.223.215.206 |
| ReplicaSet OpLog: Disabled |
| Commit Hash: 9161223c6b |
| Commit Branch: HEAD |
| |
| OPLOG / REPLICASET IS REQUIRED TO RUN ROCKET.CHAT, MORE INFORMATION AT: |
| https://go.rocket.chat/i/oplog-required |
| |
+---------------------------------------------------------------------------+
Rocket.Chat 使用MongoDB 副本集通过 Meteor Oplog tailing 提高性能。大概是因为副本集没有创建成功的原因。
docker 中一共起了三个应用,其中一个没有起来:
[root@gzslm app]#
[root@gzslm app]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cb5c2e92b23d rocket.chat:latest "node main.js" 7 minutes ago Up 7 minutes 0.0.0.0:9001->3000/tcp app-rocketchat-1
6e9f0daca935 mongo "docker-entrypoint.s…" 7 minutes ago Exited (0) 7 minutes ago app-mongo-init-replica-1
18711a835a99 mongo "docker-entrypoint.s…" 8 minutes ago Up 8 minutes 27017/tcp app-mongo-1
查看一下这个服务的日志:
[root@gzslm app]# docker logs 6e9f0daca935
MongoDB shell version v5.0.5
connecting to: mongodb://mongo:27017/rocketchat?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("9d5bf03e-f790-49c9-af80-a57ab9135aae") }
MongoDB server version: 5.0.5
{
"ok" : 0,
"errmsg" : "This node was not started with the replSet option",
"code" : 76,
"codeName" : "NoReplicationEnabled"
}
大致原因是不能创建副本集,更换mongodb的版本为4.0后,重新创建一遍容器。启动应用成功。