Installer Rocket.Chat avec Docker
Guide d'installation de Rocket.Chat sous 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.
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.
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.
Si vous voulez gagner du temps, utilisez un template cloud-init.
Ensuite, suivez ce guide pour installer Docker, Docker Compose et préparer vos variables d'environnement.
Enfin, pour exposer l'application sur l'internet public, il vous faudra déployer 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.
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.
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".
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 :
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.
Sources :