Rocket Chat – IM &+

Avec mes quelques cheveux blancs, je suis d’une génération qui téléphone et qui trouve ce système de communication plutôt efficace. Malgré tout, nombre de jeunes développeurs avec qui je collabore trouve que c’est un système intrusif. Alors vive la messagerie instantané…Oui mais quel système ?

Évidemment le premier à être proposé, c’est Skype (version standard pas très « secure » ou version Entreprise; oui mais payant), en plus les utilisateurs mac n’en sont pas fans.

Bref en faisant le tour, Slack revient en boucle dans les conversations.

Après plusieurs mois d’utilisation, tout le monde s’accorde à dire que c’est plutôt pas mal sauf que: Slack en version gratuite se limite à un certain nombre de messages et que c’est hébergé hors union européenne.

Ma réflexion est donc celle-ci: existe t’il une solution équivalente à Slack, qui fonctionne ne mode web, ou avec un client multi plate-forme PC, Mac, Android et IOS, et que je puisse héberger pour garder le contrôle de données et de la sécurité.

La réponse est dans le titre: Rocket Chat.

Si la solution Rocket.Chat vous intéresse mais vous ne souhaitez pas l’hégerger ou si vous avez besoin de la mise à disposition de ressource, contactez moi.

Retour d’expérience

Il y a 2 ans environ, j’ai donc mis en place RocketChat sur un serveur Ubuntu avec une trentaine d’utilisateurs. Le serveur est derrière un reverse proxy Nginx, et ça marche vraiment bien. La connection LDAP sur les première version est un peu capricieuse et la partie video délégué à des plate-formes tierce marche moyen.

En revanche pour ce qui est de la communication IM au sein de l’entreprise et du transfert de fichiers, ça répond pleinement au cahier des charges.

Coté sécurité, les première version étaient un peu légères. Heureusement il y a le support du TLS mais on voyait des mots de passe en clair dans la console d’admin…En revanche au bout d’un certain temps j’ai été obligé de refaire une machine car les mises à jour ne passaient plus en raison d’incompatibilités de version entre rocketchat node et npm. Rien de bien grave, les version snap et docker apporte une solution à ces problématiques…

De plus Rocket.Chat intègre un livechat avec une gestion des agents par département. Les premières versions étaient déjà bien abouties mais la version 0.59.3 apporte encore plus de fonctionnalités et d’interaction avec des plates-formes applicatives tierces.

 

Environnement

Rocketchat est développé en Meteor, il faut donc un environnement NPM et NodeJS installé sur la machine

La base de donnée utilisée est MongoDB

Il est possible de lancer très simplement plusieurs instances de Rocket.chat sur la même machine. L’avantage de l’architecture de Rocket.Chat, c’est que les mises à jour de database se font automatiquement.

 

Architecture proposée

Les requêtes vont donc passer par une entrée DNS qui pointe vers mon firewall. Sur le firewall, les requêtes http et https sont redirigées vers le Nginx.

C’est le Nginx qui va dire au 80 (http) de que tout est en 443 (https), il charge les certificats (merci letsencrypt) et redirige les flux vers mon serveur rocket.chat vers le port 3000.

Comme un schéma vaut mieux qu’un long discours:

Installation

Je pars donc sur une configuration Ubuntu 16.04 serveur 64 bits. Je lance les commandes en root, si ce n’est pas votre cas, ajoutez sudo au début de chaque ligne

les paquets de base:

apt-get update
 apt-get install -y curl graphicsmagick
 apt-get install build-essential
 apt-get install npm
 apt-get install nodejs
 npm install -g n
 n 4.8.4
 curl -L https://download.rocket.chat/stable -o rocket.chat.tgz

Voilà à ce stade, nous avons tout ce qu’il faut pour mettre en place Rocket.Chat

Comme je veux pouvoir gérer plusieurs groupes complètement dissociés, je vais créer 2 instances sur 2 bases différentes:

Les sources Rocket.Chat

tar xzvf rocket.chat.tgz
 mv bundle rock-info
 tar xzvf rocket.chat.tgz
 mv bundle rock-perso

La décompression me créé un répertoire bundle dans le répertoire courant, comme je veux 2 instances, je le décompresse 2 fois et je créée 2 répertoires différents. Dans mon cas rock-info et rock-perso.

La compilation

cd rock-info/programs/server/
 npm install
 cd ../../..
 cd rock-perso/programs/server/
 npm install

 

Outils pour le lancement automatique

Nos instances sont désormais prêtes à être lancées, mais je ne vaux pas avoir à lancer manuellement les instances à chaque fois que je redémarre. Je vais donc utiliser forever et forever-service.

npm install -g forever
npm install -g forever-service

Vous allez avoir quelques « warning » mais pas d’inquiétudes.

Configuration des accès extérieurs

Pointage DNS

faite un pointage de type A si c’est vers une adresse IP et un pointage de type CNAME si c’est vers un nom de machine.

Reverse Proxy

Je vous invite à visiter cette page pour voir comment configurer le reverse proxy NGINX

Mise en place sur service

forever-service install -s main.js -e "ROOT_URL=https://rock.infos-reseau.com/ MONGO_URL=mongodb://10.180.10.100:27017/rock-info PORT=3000" rock-info

qu’est ce que ça veut dire:

forever-service       le code qui va générer le service et le démarrage auto

-s                              appel un fichier ou un script

main.js                   le fameux script en question

-e                             avec les variables d’environnement

Les variables d’environnement:

ROOT_URL=      l’url qui va utilisée par le navigateur. Même si votre serveur rocket.chat écoute sur http et se trouve derrière un proxy qui fait du https mettez https – c’est notre cas.

MONGO_URL=mongodb://LE HOST:LE PORT/LE NOM DE LA BASE      Dans mon cas, je n’ai pas tout mis sur le même serveur, d’ou l’adresse IP, si tout est sur le même serveur vou pouvez mettre localhost. Pour le port à moins de l’avoir changé, mongo ecoute sur 27017, donc ne pas changer. Pour Le nom de la base, c’est le nom de l abase qui sera créé automatiquement lors du premier lancement si vous avez plusieurs instances, mettez un nom différent à chaque fois..

PORT= NUMERO DU PORT             c’est le port d’écoute du serveur Rocket.Chat, 300 par défaut, idem si vous avez plusieurs instance, mettez un port différent à chaque fois.

       enfin pour finir, après le  » de fin de variable mettez le nom du service qui va appeler ce paramètre. Dans mon cas:  rock-info .Toujours pareil, si vous avez plusieurs instance vous changez. C’es ce nom de service que l’on retrouve ci-dessous.

 

la machine répond:

Platform - Ubuntu 16.04.2 LTS
 rock-info provisioned successfully

Commands to interact with service rock-info
 Start - "sudo service rock-info start"
 Stop - "sudo service rock-info stop"
 Status - "sudo service rock-info status"
 Restart - "sudo service rock-info restart"

on est bon, tout est prêt.

Premier lancement

service rock-info start

Il faut attendre quelques minutes, car au premier lancement la base va se créer et se générer, mais quelques minutes plus tard, voilà le résultat:

A suivre… La configuration de Rocket.Chat:

Configuration du livechat Rocket.Chat sur un site WordPress ou Drupal.