Docker 部署聊天软件(Rocket.Chat)

8,511 阅读4分钟

我正在参与掘金创作者训练营第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后,重新创建一遍容器。启动应用成功。

参考