blog-image

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

  • dHENRY
  • 19/02/2019
  • (Durée de lecture : 4 mn)

Update : Attention cette documentation est obsolète

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 les grands principes de l’auto-hébergement et de la décentralisation du WEB, je dispose d’un chat privé installé sur un MytinyDC situé à 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.

N.B. : Néanmoins si vous souhaitez mettre en place une messagerie de ce type, sur des unités tels que les Raspberry PI ou Rock64, je vous conseille FORTEMENT l’installation du produit : Matrix/Element.io, beaucoup, mais vraiment beaucoup plus performant (voir /blog/matrix-synapse-installationserveur-clientelement/)

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évue 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

!!! 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

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…

Serveur

Grosse latence au démarrage du service, prend parfois plus de 4 minutes, présente de nombreux pics de charge durant la journée, parfois sans utilisateurs connectés…

Aller plus loin

  • Passer mongodb sur un serveur tiers
  • Scaler avec plusieurs Rock64 et peut être Raspberry PI3…

Licence de ce document : Creative 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.