Kane BlueriverKane Blueriver

Slack 的开源替代品——RocketChat

在使用 RocketChat 之前,公司内部一只使用的微信和 QQ 进行沟通和交流,但是这两者的易用性和开放性着实很差,对于开发者而言尤其如此!让人不由得怀念起使用 Slack 的日子(虽然经常遇到掉线问题)。

不过 Slack 在国内的可用性也是个大问题,毕竟连其它开发同事都不能保证能够正常使用,自己部署更是不可能。

好在开源社区的开发者贡献了一个叫做 RocketChat 的应用,提供了 Slack 的基础功能、开放的 API、与 GitLab 的良好集成——这正是我们所想要的!

RocketChat 是什么?

一个开源、开放、功能强大、基于 Meteor 和 MongoDB 的 Slack 替代软件。

特色功能

在线聊天 LiveChat

提供在线客服一样的在线聊天功能,支持游客登录等基本功能。

RocketChat LiveChat

第三方平台支持

内置了常见代码托管服务比如 GitHub、GitLab、BitBucket 的支持,内置了错误管理系统 Sentry 的支持,内置了 bug 管理系统 ReviewBoard 的支持。

语音和视频支持

配置好 HTTPS 之后,将可以开启 RocketChat 的在线视频以及发送语音信息功能。

全平台客户端

客户端使用了 Hybrid 技术,因此兼容 Mac、Linux、Windows、iOS、Android 等主流操作系统。

iOS 平台的消息推送需要配置自己的凭证信息。

bot 支持

官方提供了Hubot 的支持

OAuth

内置了 WordPress、GitHub、Google 等网站的支持,也支持自定义 OAuth 系统的支持,可以据此将其与内部其它系统打通。

安装 RocketChat

跟人比较喜欢通过 docker 安装,官方也提供了 Heroku、GCE 等平台的一键部署配置。详见官方文档就可以了。

配置

SSL 证书设置

由于视频、语音等功能仅支持 HTTPS 情况下开启,因此 SSL 整数是少不了的,推荐使用 Let's Encrypt 配置

Nginx 配置 WebSocket 代理

完整的 Nginx 配置文件:

upstream chat {
        server 127.0.0.1:8818;      # RocketChat 默认端口
}

server {
      listen 80 default;
      server_name chat.example.com;    ## 修改为你的域名
      rewrite ^ https://$server_name$request_uri? permanent;      ## 将所有 http 请求转发到 https
}

server {
    listen 443 ssl;
    server_name chat.example.com;      ## 修改为你的域名
    client_max_body_size 20m;

    gzip on;
    gzip_vary on;
    gzip_http_version 1.0;
    gzip_comp_level 6;
    gzip_min_length 1000;
    gzip_types text/plain text/css application/json text/javascript;

    ssl_certificate /etc/letsencrypt/live/chat.example.com/fullchain.pem;      ## 根据证书配置修改
    ssl_certificate_key /etc/letsencrypt/live/chat.example.com/privkey.pem;

    ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;

    location / {
        proxy_pass https://chat;
        proxy_set_header Host $http_host;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

一些问题

  • 更新部分配置需要重启服务器。暂时没有解决办法,不过社区正在设法解决。
  • 音、视频服务强制要求 SSL。推荐 Lets Encrypt 免费证书。
  • 配置要求高。Meteor 的缺点,不过得益于 Node.js 的异步特性,可以支持比较高的并发。