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
- 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 https://www.mytinydc.com/index.php/2018/12/26/installer-serveur-monitoring-prometheus-grafana/)
- 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.
Commentaires (non traduits)
Pas de commentaires
Poster un commentaire