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)

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/Riot.im, beaucoup, mais vraiment beaucoup plus performant (voir https://www.mytinydc.com/index.php/2019/04/23/installer-un-serveur-matrix-client-riot-im-messagerie-instantanee-decentralisee-arm64-rock64/)

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.

Poster un commentaire

Désolé, la réponse à la question Captcha est incorrecte
Merci. le message est dans le tuyau :)
Désolé, il y a un problème dans le tuyau, veuillez réessayer plus tard :(
Un champs est invalide

Commentaires (non traduits)

Pas de commentaires