Microservices Setup [beta]

This guide is currently only valid for a special distribution of the Rocket.Chat.

The feature will be release for General Availability on the Enterprise Edition v4.0

Pre-requisites

Micro services

Rocket.Chat micro services are composed by a few Docker containers:

Accounts

Can be scaled to multiple containers

Responsible for user authentications

docker run \
--name accounts-service \
-e MONGO_URL=mongodb://mongo/rocketchat?replicaSet=rs01 \
-e TRANSPORTER=nats://nats:4222 \
registry.rocket.chat/microservices_accounts-service:latest

Authorization

Can be scaled to multiple containers

Responsible for validate access to features

docker run \
--name authorization-service \
-e MONGO_URL=mongodb://mongo/rocketchat?replicaSet=rs01 \
-e TRANSPORTER=nats://nats:4222 \
registry.rocket.chat/microservices_authorization-service:latest

DDP Streamer

Can be scaled to multiple containers

Web socket interface between server and clients

docker run \
--name ddp-streamer \
-e MONGO_URL=mongodb://mongo/rocketchat?replicaSet=rs01 \
-e TRANSPORTER=nats://nats:4222 \
registry.rocket.chat/microservices_ddp-streamer:latest

MongoDB Stream Hub

Receives real time data from MongoDB and emits that data to the system.

docker run \
--name mongodb-stream-hub \
-e MONGO_URL=mongodb://mongo/rocketchat?replicaSet=rs01 \
-e TRANSPORTER=nats://nats:4222 \
registry.rocket.chat/microservices_mongodb-stream-hub:latest

Presence

Can be scaled to multiple containers

Controls and update users presence status.

docker run \
--name presence-service \
-e MONGO_URL=mongodb://mongo/rocketchat?replicaSet=rs01 \
-e TRANSPORTER=nats://nats:4222 \
registry.rocket.chat/microservices_presence-service:latest

Reverse proxy

Once all services are up and running the web socket connections should be targeted to "ddp-streamer" containers, the configuration depends on the reverse proxy you have set up, but you need to change the following routes:

  • /sockjs

  • /websocket

If using Kubernetes, an Ingress like the following can be used:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ddp-streamer
spec:
rules:
- host: your-hostname.rocket.chat
http:
paths:
- backend:
serviceName: ddp-streamer
servicePort: 3000
path: /(sockjs|websocket)