Ceci est une ancienne révision du document !
Déployer un serveur Mattermost
Introduction
Mattermost est un système de messagerie instantanée open source conçu pour un usage privé. Ce tutoriel explique le mettre en place un afin d'échanger des messages au sein d'un même réseau local ou via Internet.
Contrairement à Microsoft Teams ou Slack, Mattermost ne supporte que les messages texte, et non les appels audio ou vidéo. Il a néanmoins l'avantage de pouvoir être personnalisé grâce à l'intégration d'applications tierces, et de permettre l'authentification via LDAP dans la version Entreprise.
On utilisera ici la version Team de Mattermost, qui est gratuite et propose moins de fonctionnalités que la version Entreprise. Elle sera installée sous Debian 12 et les clients pour les tests seront sous Windows 10.
Topologie du LAB
Pré-requis
Nous aurons besoin de :
- Une machine (virtuelle ou physique) sous Linux (de préférence Debian 12 qui sera utilisé dans ce tutoriel) avec au moins 2Go de RAM.
- Deux machines (virtuelles ou physiques) sous n'importe quel OS compatible avec le client lourd Mattermost et connectées au même réseau local que la première machine.
Instructions
Configuration de la base de données
Tout d'abord, installer un SGBD tel que mariadb :
apt install mariadb-server
Sécuriser le serveur en utilisant le script mysql_secure_installation qui permet de supprimer les utilisateurs anonymes et d'interdire la connexion à distance avec l'utilisateur root :
mysql_secure_installation
Suivre les instructions jusqu'au bout, puis se connecter à la CLI du SGBD :
mysql -u root -p
Executer les requêtes SQL suivantes afin de créer la base de données et un utilisateur dédié :
CREATE SCHEMA mattermost;
CREATE USER 'mattermost'@'%';
SET PASSWORD FOR 'mattermost'@'%' = PASSWORD('MyPassword!');
GRANT ALL ON mattermost.* TO 'mattermost'@'%' IDENTIFIED BY 'MyPassword!' WITH GRANT OPTION;
FLUSH PRIVILEGES;
Attention à bien remplacer
MyPassword! dans les commandes ci-dessus par le mot de passe qui sera utilisé pour la connexion à la BDD.
Taper quit pour sortir de la CLI mariadb.
La configuration de la base de données est réalisée. Passons à l'installation du serveur Mattermost.
Installation et configuration du serveur
Installation
Télécharger Mattermost sur le serveur au format tarball :
wget https://releases.mattermost.com/9.1.1/mattermost-9.1.1-linux-amd64.tar.gz
L'URL de l'archive à jour peut être trouvée sur la page suivante : https://docs.mattermost.com/install/install-tar.html
Décompresser l'archive dans le répertoire /opt/ qui sera le chemin d'installation de Mattermost :
tar xvzf mattermost-9.1.1-linux-amd64.tar.gz -C /opt/
Ajouter un répertoire data dans le répertoire de Mattermost afin de stocker les fichiers que les utilisateurs s'échangeront :
mkdir /opt/mattermost/data
Et créer un utilisateur système qui aura tous les droits sur le répertoire d'installation :
useradd --system --user-group mattermost chown -R mattermost:mattermost /opt/mattermost chmod -R g+w /opt/mattermost
Configuration
Maintenant que Mattermost est installé, éditer sa configuration :
nano /opt/mattermost/config/config.json
C'est là que sont stockés tous les paramètres du serveur.
D'abord, modifier l'URL du serveur en mettant l'IP ou un nom de domaine associé à la machine :
"SiteURL": "https://192.168.1.201",
Changer les paramètres SQL pour correspondre à la BDD que l'on a préparée avant :
"SqlSettings": {
"DriverName": "mysql",
"DataSource": "mattermost:MyPassword!@tcp(localhost:3306)/mattermost?charset=utf8mb4,utf8&readTimeout=30s&writeTimeout=30s",
Puis adapter les autres paramètres comme nécessaire.
Explication de certains paramètres :
- ServiceSettings
- SiteURL : URL de votre application. Vous pouvez utiliser l'IP du serveur si vous ne disposez pas de domaine.
- SqlSettings
- DriverName : nous utilisons le driver mysql
- DataSource : information de connexion à la base de données. Adaptez le nom de l'utilisateur et le mot de passe
- FileSettings
- Directory : adaptez si vous utilisez un emplacement spécifique pour le stockage des fichiers, sinon laisser la valeur par défaut.
- PluginSettings
- Directory : chemin des plugins, la valeur par défaut provoque chez moi des erreurs au démarrage du serveur, il semble préférable d'indiquer le chemin absolu.
- ClientDirectory : chemin des plugins client, la valeur par défaut provoque chez moi des erreurs au démarrage du serveur, il semble préférable d'indiquer le chemin absolu.
Création du service
On va désormais créer le service Linux qui exécutera Mattermost, via systemd :
nano /lib/systemd/system/mattermost.service
Y insérer ceci :
[Unit] Description=Mattermost After=network.target After=mysql.service Requires=mysql.service [Service] Type=notify User=mattermost Group=mattermost ExecStart=/opt/mattermost/bin/mattermost TimeoutStartSec=3600 Restart=always RestartSec=10 WorkingDirectory=/opt/mattermost LimitNOFILE=49152 [Install] WantedBy=mariadb.service
Ensuite recharger systemd et activer le service au lancement de la machine :
systemctl daemon-reload systemctl enable mattermost
On peut enfin démarrer Mattermost par le biais de ce service :
systemctl start mattermost
Vérifier que le service a bien démarré :
systemctl status mattermost.service
Il doit être dans l'état Active : active (running), sinon c'est qu'il y a eu une erreur de commise lors des étapes précédentes.
Configuration du serveur Web
Pour fonctionner, Mattermost a besoin d'un serveur web. Ici on utilisera Apache, mais il est possible d'en utiliser un autre (Caddy, Nginx…).
Installer d'abord le paquet :
apt-get install apache2
Ensuite, on active les modules apache suivants :
a2enmod ssl a2enmod rewrite a2enmod expires a2enmod headers a2enmod http2 a2enmod proxy a2enmod proxy_http a2enmod proxy_wstunnel
Puis, créer un nouveau VHost (site virtuel) :
nano /etc/apache2/sites-available/mattermost.conf
Insérer dans le fichier le code suivant, en prenant soin de modifier les directives ServerAdmin, ServerName, ProxyPassReverseCookieDomain et RewriteCond avec les bons paramètres (commentés) :
<VirtualHost *:80>
ServerAdmin webmaster@localhost #adresse mail administrateur
ServerName 192.168.1.201 #URL de l'appli
ProxyPreserveHost On
RewriteEngine On
RewriteCond %{REQUEST_URI} /api/v[0-9]+/(users/)?websocket [NC]
RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
RewriteCond %{HTTP:CONNECTION} \bUpgrade\b [NC]
RewriteRule .* ws://127.0.0.1:8065%{REQUEST_URI} [P,QSA,L]
<Location />
Require all granted
ProxyPass http://127.0.0.1:8065/
ProxyPassReverse http://127.0.0.1:8065/
ProxyPassReverseCookieDomain 127.0.0.1 192.168.1.201 #URL de l'appli (à la fin)
</Location>
RewriteCond %{SERVER_NAME} =192.168.1.201 #URL de l'appli (à la fin)
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
Si on veut rester en HTTP (par exemple pour un usage en local sans certificat SSL autosigné), garder uniquement les 3 premières lignes et la dernière.
Et activer le site comme ceci :
a2ensite mattermost systemctl reload apache2
On peut aussi installer Certbot pour activer SSL, dans le cas où on aurait besoin d'un certificat SSL pour un serveur accessible depuis l'extérieur avec un nom de domaine :
apt-get install certbot python3-certbot-apache
Certbot ne permet de générer des certificats SSL que pour des noms de domaines. Le site doit être accessible depuis Internet pour que ça fonctionne.
La configuration de Mattermost est terminée.
Rétention des données
Dans le cas où on Mattermost serait mis en place dans une entreprise, on peut automatiser la suppression des anciens messages à l'aide d'une requêtes SQL toute simple :
DELETE FROM Posts WHERE CreateAt > DATE_FORMAT(NOW() - INTERVAL 30 DAY, "%Y-%m-%d 00:00:00");
Ici, la commande supprime tous les messages de plus de 30 jours. Évidemment, c'est ajustable.
