Installer rocketchat sur un Rock64 – arm64 – Un serveur privé de messagerie en auto-hébergement.

Installer rocketchat sur un Rock64 – arm64 – Un serveur privé de messagerie en auto-hébergement.

19 février 2019 chat privé Support 0

Cette procédure va vous permettre de disposer d’un service de messagerie entièrement PRIVé (chat privé), que vous pourrez utiliser avec vos “vrais” amis :).
Activiste sur le grand principe de l’auto-hébergement et de la décentralisation du WEB, je dispose d’un chat privé installé sur un MytinyDC situé dans mon domicile en Inde, avec lequel je communique tous les jours avec ma famille, amis situés dans le monde entier.
Le niveau de qualité de cet outil est impressionnant puisque plusieurs types de “devices” sont supportées (Android, PC, Mac, IOS). Les fonctionnalités de chat, notifications, upload d’images sont opérationnelles, aucun crash depuis la mise en place et l’impressionnante réactivité de l’application.
Les alertes prometheus du mini-datacenter (MytinyDC) sont également interceptées par l’application rocketchat.

Pré-requis

  • nodeJS 8-LTS

Récupérer les sources :
curl -L https://releases.rocket.chat/latest/download -o /tmp/rocket.chat.tgz

Installation Rocket Chat

connecté root :


mkdir /opt/rocketchat
useradd -M rocketchat
usermod -L rocketchat -d /opt/rocketchat
cd /opt/rocketchat
tar xvfz /tmp/rocket.chat.tgz
chown -R rocketchat:rocketchat /opt/rocketchat
su – rocketchat
cd /opt/rocketchat/bundle/program/server
npm install
Et le programme va s’arrêter brutalement, impossible d’aller plus loin, car cette application a été écrite pour des processeurs “amd64” et pas prévu pour arm64

A partir de cet instant je décide de démarrer quand même rocketchat, en regardant les log : tail -f /var/log/syslog

Création du service rocketchat

vi /etc/systemd/system/rocketchat.service
Et j’ajoute :

[Unit]
Description=The Rocket.Chat server
After=network.target remote-fs.target nss-lookup.target nginx.target mongod.target
[Service]
ExecStart=/usr/bin/node /opt/rocketchat/bundle/main.js
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=rocketchat
User=rocketchat
Environment=MONGO_URL=mongodb://localhost:27017/rocketchat ROOT_URL=[url:port] PORT=3000
[Install]
WantedBy=multi-user.target

(*) [url:port] PORT=3000 : ex : http://rocketchat.mtdc:3000/
PORT=3000 est la référence au port de la websocket que le client doit utilisé

!!!! La ligne Environnement est sur une seule ligne !!!!

Si vous utilisez un load balancer (haproxy) vous pouvez utiliser une url sans port, et utiliser le port 80 ou 443 pour la websocket.
Ex : http://rocketchat.mtdc/ PORT=80
ou avec ssl
https://rocketchat.mtdc PORT=443
HAPROXY sait très bien différencier et gérer les websockets

Démarrage du service

systemctl start rocketchat
Les traces montrent des erreurs pour deux packages npm : bcryp et sharp
su – rocketchat
cd /opt/rocketchat/bundle/program/server/npm
npm install bcrypt sharp

Paramétrage du service

Une fois démarré, il faut être patient avec ce type d’unité, vous pourrez vous connecter à l’aide de votre navigateur à l’url de votre rocketchat. Le processus d’initialisation se fait par la présentation de formulaires, très bien fait et permettant l’initialisation de ce système de messagerie

Stockage des fichiers joints

Créer le répertoire /var/lib/rocketchat, et attribuez lui les autorisations (connecté root) :
mkdir /var/lib/rocketchat
chmod 755 /var/lib/rocketchat
chown rocketchat:rocketchat /var/lib/rocketchat

Rendez-vous dans l’administration de rocketchat : Administation – envoi de fichiers – changer le type de stockage par “Filesystem”. Scroller jusqu’a Filesystem et indiquer dans la zone “Chemin d’accès” : /var/lib/rocketchat
Enregistrez les modifications, qui sont prises immédiatement en compte, pas besoin de redémarrer rocketchat.

Paramétrage haproxy

#section defaults

defaults
log global
mode http
option httplog
option dontlognull
retries 3
option redispatch
option contstats
option http-server-close
maxconn 2000
timeout connect 5000
timeout client 7200000
timeout server 7200000
default-server inter 3s rise 2 fall 3

#Création d’un frontend pour la socket port 3000

frontend 192.168.10.141:3000http
mode http
bind 192.168.10.141:3000
enabled
acl rocketchat.mtdc_iswebsocket hdr(Upgrade) -i websocket
acl ws_rocketchat.mtdc hdr_end(host) -i rocketchat.mtdc
use_backend ws_rocketchat.mtdc if rocketchat.mtdc_iswebsocket ws_rocketchat.mtdc
backend ws_rocketchat.mtdc
timeout server 600s
server rock64-25 172.28.10.57:3000 check cookie rocketchatws1
server rock64-26 172.28.10.58:3000 check cookie rocketchatws2

#Création d’un frontend pour l’application port 80
frontend 192.168. 10.141:80http
mode http
bind 192.168.10.141:80
enabled
acl rocketchat.mtdc hdr(host) -i rocketchat.mtdc
use_backend rocketchat.mtdc if rocketchat.mtdc
backend rocketchat.mtdc
mode http
enabled
balance roundrobin
server rock64-25 172.28.10.57:3000 check cookie rocketchat1
server rock64-26 172.28.10.58:3000 check cookie rocketchat2


Package Debian en l’état…

En cours de conception… je fais aussi des tests d’installation sur Raspberry PI3

Monitoring

Rocket chat est livré avec une sonde de type Prometheus. Recherchez “logs” dans le panneau d’administration, et activez “Prometheus”, qui écoute par défaut sur le port 9458 (pour la configuration Prometheus, voir https://www.mytinydc.com/index.php/2018/12/26/monitoring-prometheus-grafana/ ).
J’ai conçu rapidement un dashboard Grafana (très basique pour le POC)

Problèmes rencontrés

Applications Desktop

La fonction “trayicon” ne fonctionne pas sur KDE Plasma – Debian. Pour résoudre le problème, “kill” des processus rocketchat sur la station (ps -ef|grep rocketchat puis utiliser la commande kill pour terminer les processus découverts). Exécutez la commande suivante qui installera les paquets nécessaires :
apt install libappindicator3-1

Redémarrer l’application Desktop Rocketchat…

Aller plus loin

  • Router les logs vers un log spécifique rocketchat
  • Passer en écoute https
  • Intégrer les alertes prometheus dans rocketchat (voir le billet concernant prometheus)
  • Passer mongodb sur un serveur tiers
  • Scaler avec plusieurs Rock64 et peut être Raspberry PI3…

Licence de ce documentCreative Commons(CC BY-NC-ND 4.0)
CETTE DOCUMENTATION EST LIVRÉE “EN L’ÉTAT”, SANS GARANTIE D’AUCUNE SORTE ET DISTRIBUÉE DANS UN BUT ÉDUCATIF EXCLUSIVEMENT. L’AUTEUR, CONTRIBUTEURS DE CETTE DOCUMENTATION OU ©MYTINYDC.COM NE SAURAIENT EN AUCUN CAS ÊTRE TENUS RESPONSABLES DES DOMMAGES DIRECTS OU INDIRECTS POUVANT RÉSULTER DE L’APPLICATION DES PROCÉDURES MISES EN ŒUVRE DANS CETTE DOCUMENTATION, OU DE LA MAUVAISE INTERPRÉTATION DE CE DOCUMENT.