Installer Rocket.Chat avec Docker

Au sommaire :

  • 1-Qu'est-ce que Rocket.Chat ?
  • 2-Prérequis
  • 3-Pré-configuration
  • 4-Déploiement

Si vous cherchez à mettre en place une messagerie collaborative, jetez un œil à ces deux autres tutoriels.

Installer Synapse et Element avec Docker
Guide d’installation de Synapse et Element sous Docker.
Installer Mattermost avec Docker
Guide d’installation de Mattermost sous Docker.

1-Qu'est-ce que Rocket.Chat ?

Rocket.Chat est une messagerie collaborative open-source d'origine brésilienne conçue par la société Konecty concurrente à Slack, Mattermost et Microsoft Teams.

Cette solution est née du fait que Konecty avait besoin d'un module de chat pour leur application de CRM avant que le code de ce module soit partagé pour devenir un projet à part entière.

Cette messagerie collaborative est depuis devenu extrêmement populaire avec plus de 35.000 développeurs qui apportent leur contribution sur GitHub et la plateforme d'évaluation Capterra a désigné Rocket.Chat comme l'un des 5 logiciels de Live Chat les plus populaires et l'un des 20 logiciels de travail à distance les plus populaires.

Il dispose d'un marketplace pour pouvoir installer toutes sortes de modules (5 maximum pour la version communautaire) et d'une API ouverte pour pouvoir être intégré à tout type écosystème.

C'est la solution que j'utilise pour le serveur Rocket2Rue qui est le serveur officiel du blog Tech2Rue et prochainement pour le blog RetroHack.

Votre serveur de chat auto-hébergé avec Rocket.Chat | Connect - Editions Diamond
Les applications de chat sont présentes depuis longtemps, et les canaux IRC encore très utilisés. Chatter est tellement populaire, que des dizaines d’applications existent. Malgré cette concurrence, Slack, une application relativement récente, a réussi à percer, et a largement conquis le monde de l’…

2-Prérequis

Il vous faudra une machine virtuelle sous Ubuntu Server 22.04 LTS.

Voici le guide pour ceux qui veulent repartir de zéro.

Virtualiser Ubuntu Server 22.04 LTS sur Proxmox VE
Guide d’installation de Ubuntu Server 22.04 LTS sur Proxmox VE avec mes meilleurs réglages.

Si vous voulez gagner du temps, utilisez un template cloud-init.

Initialiser vos machines virtuelles avec Cloud-init sur Proxmox VE
Guide d’installation de Cloud-Init qui va vous permettre d’automatiser vos déploiements

Ensuite, suivez ce guide pour installer Docker, Docker Compose et préparer vos variables d'environnement.

Installer Docker
Guide d’installation de Docker.

Enfin, pour exposer l'application sur l'internet public, il vous faudra déployer Traefik.

Installer Traefik avec Docker
Guide d’installation de Traefik.

3-Pré-configuration

Avant de déployer l'application, il y a quelques réglages à effectuer.

Réglage n°1

Comme on ne souhaite pas exposer MongoDB sur l'internet public et qu'il est important de s'organiser, il va falloir créer un réseau dédié aux bases de données qui ne sera pas géré par Traefik et confiné au réseau local.

Utilisez la commande "docker network create" et indiquez le nom que vous souhaitez (database pour l'exemple).

docker network create database

Dans votre fichier docker-compose, en plus du réseau "web" dédié aux applications exposés sur internet via Traefik, ajoutez le réseau "database".

version: "3.9"

networks:
  web:
  database:

Donc si je résume :

  • Rocket.Chat : réseaux "web" et "database".
  • MongoDB : réseau "database" uniquement.

Réglage n°2

L'image Docker de MongoDB provenant de chez Bitnami ne disposant pas de compte root, il va falloir ajuster les permissions pour que MongoDB puisse écrire des données dans son dossier.

Créez un dossier "mongodb"

mkdir mongodb

Puis tapez la commande suivante pour faire en sorte que le dossier appartient au groupe et utilisateur nommé "1001".

sudo chown -R 1001:1001 mongodb

Cela permettra à MongoDB d'écrire des données persistantes dans son dossier.

How to fix bitnami mariadb ‘mkdir: cannot create directory ‘/bitnami/mariadb’: Permission denied’ - TechOverflow
Problem: You are trying to run a docker bitnami/mariadb container but when you try to start it up, you see an error message like mariadb_1 | mkdir: cannot create directory ‘/bitnami/mariadb’: Permission denied Solution: bitnami containers mostly are non-root-containers, hence you need to adjust the…

Réglage n°3

Depuis la version 5.0, Rocket.Chat nécessite d'ajouter la ligne "&directConnection=true" aux variables "MONGO_URL" et "MONGO_OPLOG_URL" lorsqu'on l'utilise dans sa version Docker.

Ça donne ceci.

On verra ça plus bas dans la configuration docker-compose.

Release 5.0.0 · RocketChat/Rocket.Chat
2022-07-22 · 14 ️️️⚠️ · 33 🎉 · 20 🚀 · 110 🐛 · 389 🔍 · 63 👩‍💻👨‍💻 Engine versions Node: 14.19.3 NPM: 6.14.17 MongoDB: 4.2, 4.4, 5.0 ⚠️ BREAKING CHANGES Remove support to old MongoDB v…

Réglage n°4

MongoDB a besoin des instructions AVX. Si sur PVE, votre machine virtuelle est configuré avec le flag "kvm64", la base de donnée ne fonctionnera pas donc sélectionnez le mode "host" pour que MongoDB puisse s'initialisé.

Dans Hardware/Processors, allez dans "Type" et sélectionnez "host".

[bitnami/mongodb] libos.sh: line 344 error when installing ReplicaSet · Issue #12834 · bitnami/charts
Name and Version bitnami/mongodb 13.1.7 What steps will reproduce the bug? basic cluster setup Kubernetes version: v1.25.2 Helm version: v3.9.4 Cluster setup with kubeadm CNI: Weavenet Loadbalancer…

Conseil

Pensez à ne JAMAIS déployer la dernière version de MongoDB. Indiquez toujours le numéro de version (5.0 actuellement) et ne jamais mettre comme tag "latest" car en cas de mise à jour majeure, vous risquez d'avoir des soucis de fonctionnement.

3-Déploiement

Commencez par créer un dossier "docker" à la racine du dossier utilisateur"

mkdir -p ~/docker

Créez un fichier nommé "compose.yml"

touch ~/docker/compose.yml

Ouvrez le fichier "compose.yml" et copiez cette configuration.

C'est la configuration préconisé par le site officiel.

version: "3.9"

networks:
  web:

services:

  traefik:
    container_name: traefik
    image: traefik:latest
    restart: always
    networks:
      - web
    ports:
      - 80:80
      - 443:443
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ${APPDATA}/traefik/traefik.yml:/traefik.yml
      - ${APPDATA}/traefik/dynamic.yml:/dynamic.yml
      - ${APPDATA}/traefik/letsencrypt/acme.json:/acme.json
      - ${APPDATA}/traefik/shared:/shared
    labels:
      - traefik.enable=true
      - traefik.http.routers.traefik.entrypoints=websecure
      - traefik.http.routers.traefik.rule=Host(`votre_nom_de_domaine`)
      - traefik.http.routers.traefik.service=api@internal
      - "traefik.http.routers.traefik.middlewares=middlewares-basic-auth@file"

  rocketchat:
    image: registry.rocket.chat/rocketchat/rocket.chat:latest
    container_name: rocketchat
    restart: unless-stopped
    environment:
      - MONGO_URL=mongodb://mongodb:27017/rocketchat?replicaSet=rs0&directConnection=true
      - MONGO_OPLOG_URL=mongodb://mongodb:27017/local?replicaSet=rs0&directConnection=true
      - ROOT_URL=https://<votre_nom_de_domaine>
      - PORT=3000
      - DEPLOY_METHOD=docker
    depends_on:
      - mongodb
    networks:
      - web
      - database
    labels:
      - traefik.enable=true
      - traefik.http.routers.rocketchat.entrypoints=websecure
      - traefik.http.routers.rocketchat.tls.certresolver=letsencrypt
      - traefik.http.routers.rocketchat.rule=Host(`votre_nom_de_domaine`)
      - traefik.http.routers.rocketchat.service=rocketchat-svc
      - traefik.http.services.rocketchat-svc.loadbalancer.server.port=3000

  mongodb:
    image: docker.io/bitnami/mongodb:5.0
    container_name: mongodb
    restart: unless-stopped
    volumes:
      - ${APPDATA}/mongodb:/bitnami/mongodb
    networks:
      - database
    environment:
      - MONGODB_REPLICA_SET_MODE=primary
      - MONGODB_REPLICA_SET_NAME=rs0
      - MONGODB_PORT_NUMBER=27017
      - MONGODB_INITIAL_PRIMARY_HOST=mongodb
      - MONGODB_INITIAL_PRIMARY_PORT_NUMBER=27017
      - MONGODB_ADVERTISED_HOSTNAME=mongodb
      - MONGODB_ENABLE_JOURNAL=true
      - ALLOW_EMPTY_PASSWORD=yes

Regardons du côté de Rocket.Chat. Avec "depends_on", on indique que l'application est dépendante de MongoDB et qu'il doit démarrer seulement après que ce dernier est démarré.

    depends_on:
      - mongodb

On indique les réseaux "web" pour Traefik et "database" pour l'accés à MongoDB.

networks:
  - web
  - database

Ensuite, passons aux variables d’environnement :

  • MONGO_URL et MONGO_OPLOG_URL: l'adresse de la base de données MongoDB. Indiquez "mongodb:27017" (nom et port du conteneur), "rs0" (le nom du replica set) et "directConnection=true" (spécifique à la version Docker).
  • ROOT_URL : le nom de domaine de l'instance Rocket.Chat
  • PORT : le numéro de port (3000 par défaut)
  • DEPLOY_METHOD : indiquez "docker" vu qu'on va le déployer sous cette forme
    environment:
      - MONGO_URL=mongodb://mongodb:27017/rocketchat?replicaSet=rs0&directConnection=true
      - MONGO_OPLOG_URL=mongodb://mongodb:27017/local?replicaSet=rs0&directConnection=true
      - ROOT_URL=https://rocket2rue.sussudio.ovh
      - PORT=3000
      - DEPLOY_METHOD=docker

Ensuite passons à la base de données MongoDB.

On indique que ce dernier doit être sur le réseau "database".

    networks:
      - database

Enfin, voyons à quoi correspondent ces variables d'environnement.

  • MONGODB_REPLICA_SET_MODE : indiquez "primary"
  • MONGODB_REPLICA_SET_NAME : le nom du replicaset (rs0). Par défaut, c'est "replicaset".
  • MONGODB_PORT_NUMBER : le port que MongoDB utilise. indiquez 27017 qui est le port par défaut.
  • MONGODB_INITIAL_PRIMARY_HOST : le nom d'hôte de l'hôte principal une fois que les réplicats sont crées.
  • MONGODB_INITIAL_PRIMARY_PORT_NUMBER : indiquez 27017 comme port de l'hôte principal
  • MONGODB_ADVERTISED_HOSTNAME : le nom d'hôte du conteneur, utile si
  • MONGODB_ENABLE_JOURNAL : active les logs
  • ALLOW_EMPTY_PASSWORD : autorise les mots de passe vide
environment:
  - MONGODB_REPLICA_SET_MODE=primary
  - MONGODB_REPLICA_SET_NAME=rs0
  - MONGODB_PORT_NUMBER=27017
  - MONGODB_INITIAL_PRIMARY_HOST=mongodb
  - MONGODB_INITIAL_PRIMARY_PORT_NUMBER=27017
  - MONGODB_ADVERTISED_HOSTNAME=mongodb
  - MONGODB_ENABLE_JOURNAL=true
  - ALLOW_EMPTY_PASSWORD=yes

Si vous avez besoin d'en savoir plus sur les variables, cliquez sur le lien suivant :

containers/bitnami/mongodb/README.md at main · bitnami/containers
Bitnami container images. Contribute to bitnami/containers development by creating an account on GitHub.

Si vous avez suivi le guide de Traefik, il vous faudra ajouter les labels adéquat pour pouvoir exposer l'application sur l'internet public.

Suivez les parties 6 et 7 du guide de ce dernier pour ouvrir les ports de votre box internet et ajouter les entrées DNS pour pouvoir accéder à l'application.

Déployez l'application avec la commande suivante.

docker compose up -d

Si je tape la commande "docker logs rocketchat" pour mon instance, j'ai ce message qui s'affiche qui indique "SERVER RUNNING".

Tapez le nom de domaine de votre instance, vous devriez y accéder au bout de quelques minutes.

Renseignez les champs suivants :

  • Full name : le nom complet de l'administrateur
  • Username : le pseudo de l'administrateur
  • Email : l'adresse mail d el'administrateur
  • Password : le mot de passe de l'administrateur

Rocket.Chat va vous demander des informations pour personnaliser votre serveur (ça change rien) :

  • Nom de l'organisation : le nom de votre société ou de votre communauté
  • Secteur de l'organisation : le secteur quel vous appartenez
  • Taille de l'organisation : le nombre d'employés ou de membres de votre communauté
  • Pays : le pays où vous vous trouver

Ensuite, Rocket.Chat va vous envoyer un mail pour vérifier votre identité.

Cliquez sur le lien du mail pour confirmer et félicitation, votre instance est désormais opérationnelle!!!!!

Veuillez vous référer à la documentation pour administrer votre instance.

Workspace Administration - Rocket.Chat Docs

Sources :

Rocket.Chat : Une plateforme de communication en laquelle vous pouvez avoir entièrement confiance
Découvrez Rocket.Chat, où nous intégrons la confidentialité des données dans chaque conversation et permettons aux équipes de collaborer en toute transparence.
GitHub - RocketChat/Rocket.Chat: The communications platform that puts data protection first.
The communications platform that puts data protection first. - GitHub - RocketChat/Rocket.Chat: The communications platform that puts data protection first.
Rocketchat fails after upgrade with index error
Upgrading rocketchat to version 5.0 resulted in some minor issues that prevented the system from starting - both are related to the database and can easily be fixed.