Comment installer Mattermost sur un Serveur Gandi Cloud

Mattermost est un service de discussion instantanée open source en auto-hébergement. Il est conçu comme un chat interne pour les organisations et les entreprises.

Nous allons voir ici comment l’installer et le rendre disponible rapidement.

Cette installation a été réalisée avec les outils suivants :
  • Debian 10.3

  • Postgresql

  • Mattermost 5.21

  • Nginx 1.14.2

Selon les versions utilisées, les différentes étapes peuvent varier

Étape 1 : Installation des dépendances et préparation du serveur

Nous supposons ici que vous avez déjà créé votre serveur (https://docs.gandi.net/fr/cloud/gestion_serveur/creer.html), et que celui-ci a pour adresse IP 1.2.3.4 .

Connectez-vous à votre serveur : $ ssh admin@1.2.3.4

Et mettez d’abord à jour les paquets existants :

# apt update
# apt upgrade

Installez ensuite Postgresql, sudo et Nginx, qui nous seront nécessaires au bon fonctionnement de Mattermost:

# apt-get install postgresql postgresql-contrib sudo nginx

Enfin, installez Node.js et npm : https://github.com/nodesource/distributions/blob/master/README.md#installation-instructions

# curl -sL https://deb.nodesource.com/setup_13.x | bash -
# apt install -y nodejs

Il est également recommandé de créer un utilisateur dédié à l’exécution de Mattermost :

# /sbin/useradd --system --user-group mattermost

Le serveur est maintenant configuré, passons à la création de la base de données.

Étape 2 : Préparation de la base de données

Il est possible d’utiliser Mysql ou Postgresql pour l’utilisation de Mattermost, nous ne traiterons ici que le cas de l’utilisation de Postgresql

Connectez-vous à l’utilisaliseur postgres et lancez psql:

# sudo --login --user postgres
$ psql

Créez ensuite la base de données mattermost avec l’utilisateur mmuser et le mot de passe mmuser-password, à adapter selon vos besoins

postgres=# CREATE DATABASE mattermost;
postgres=# CREATE USER mmuser WITH PASSWORD 'mmuser-password';
postgres=# GRANT ALL PRIVILEGES ON DATABASE mattermost to mmuser;
postgres=# \q
postgres=# exit

La base de données est prête, il ne reste qu’à installer Mattemost, et le rendre accessible à l’adresse de votre choix.

Étape 3 : Installation et configuration de Mattermost

Téléchargez la dernière version de Mattermost :

# wget https://releases.mattermost.com/5.21.0/mattermost-5.21.0-linux-amd64.tar.gz

Puis procédez à l’extraction du contenu de l’archive dans le répertoire /opt/

# tar -xvzf mattermost-5.21.0-linux-amd64.tar.gz
# mv mattermost /opt

Créez le répertoire /opt/mattermost/data et donnez les droits sur ces répertoires à l’utilisateur système mattermost

# mkdir /opt/mattermost/data
# chown -R mattermost:mattermost /opt/mattermost

Modifiez le fichier de configuration afin de prendre en compte la base de données que vous avez créé précédemment en remplaçant dans le fichier /opt/mattermost/config/config.json

"DriverName": "mysql",

par

"DriverName": "postgres",

puis

"DataSource": "mmuser:mostest@tcp(localhost:3306)/mattermost_test?charset=utf8mb4,utf8\u0026readTimeout=30s\u0026writeTimeout=30s",

par

"DataSource": "postgres://mmuser:<mmuser-password>@<host-name-or-IP>:5432/mattermost?sslmode=disable&connect_timeout=10",

Placez vous dans le répertoire /opt/mattermost et testez le lancement de Mattermost :

# cd /opt/mattermost
# sudo -u mattermost ./bin/mattermost

Si tout est correct, vous devriez observer la sortie suivante :

{"level":"info","ts":1585299574.1884124,"caller":"app/server.go:538","msg":"Server is listening on [::]:8065","address":"[::]:8065"}

Mattermost est bien lancé et en écoute sur le port 8065.

Nous allons maintenant créer un service systemd afin de pouvoir gérer plus facilement les actions sur Mattermost :

# touch /lib/systemd/system/mattermost.service
# vim /lib/systemd/system/mattermost.service

Copier le contenu suivant dans le fichier et sauvegardez le :

[Unit]
Description=Mattermost
After=network.target
After=postgresql.service
Requires=postgresql.service

[Service]
Type=notify
ExecStart=/opt/mattermost/bin/mattermost
TimeoutStartSec=3600
Restart=always
RestartSec=10
WorkingDirectory=/opt/mattermost
User=mattermost
Group=mattermost
LimitNOFILE=49152

[Install]
WantedBy=multi-user.target

Rechargez systemd et testons à présent cet unit systemd :

# systemctl daemon-reload
# systemctl status mattermost.service
# systemctl start mattermost.service

Vérifiez que Mattermost écoute bien sur le port 8065 :

# curl http:​//localhost:8065

Si tout est ok, activez-leservice Mattermost, celui-ci sera alors lancé automatiquement au démarrage de votre serveur

systemctl enable mattermost.service

Étape 4 : Configuration de Nginx

Nous supposons ici que vous disposez d’un certificat SSL (https://docs.gandi.net/fr/ssl/index.html), et configurons Nginx pour que Mattermost soit accessible depuis l’adresse de votre choix.

En tant que root :

# vim /etc/nginx/sites-available/mattermost.example.com.conf

Contenu :

  upstream backend {
  server 127.0.0.1:8065;
  keepalive 32;
  }

  proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=mattermost_cache:10m max_size=3g inactive=120m use_temp_path=off;

  server {
   listen 80 default_server;
   server_name   mattermost.example.com;
   return 301 https://$server_name$request_uri;
   }

  server {
   listen 443 ssl http2;
       server_name    mattermost.example.com;
   ssl on;
       ssl_certificate /path/to/fullchain.cer;
       ssl_certificate_key /path/to/mattermost.example.com.key ;
       ssl_dhparam /etc/ssl/certs/dhparam.pem;
       ssl_session_cache shared:SSL:10m;
       ssl_session_tickets off;
       ssl_protocols TLSv1.2 TLSv1.3;
       ssl_ecdh_curve sect571r1:secp521r1:brainpoolP512r1:secp384r1:prime256v1:X25519;
       ssl_ciphers EECDH+AESGCM:EECDH+CHACHA20:EECDH+AES:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-256-GCM-SHA384:TLS13-AES-128-GCM-SHA256;
       ssl_prefer_server_ciphers on;
   ssl_session_timeout 1d;
       ssl_stapling on;
   ssl_stapling_verify on;
       add_header Strict-Transport-Security max-age=15768000;

  location ~ /api/v[0-9]+/(users/)?websocket$ {
   proxy_set_header Upgrade $http_upgrade;
   proxy_set_header Connection "upgrade";
   client_max_body_size 50M;
   proxy_set_header Host $http_host;
   proxy_set_header X-Real-IP $remote_addr;
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_set_header X-Forwarded-Proto $scheme;
   proxy_set_header X-Frame-Options SAMEORIGIN;
   proxy_buffers 256 16k;
   proxy_buffer_size 16k;
   client_body_timeout 60;
   send_timeout 300;
   lingering_timeout 5;
   proxy_connect_timeout 90;
   proxy_send_timeout 300;
   proxy_read_timeout 90s;
   proxy_pass http:​//backend;
  }

  location / {
   client_max_body_size 50M;
   proxy_set_header Connection "";
   proxy_set_header Host $http_host;
   proxy_set_header X-Real-IP $remote_addr;
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_set_header X-Forwarded-Proto $scheme;
   proxy_set_header X-Frame-Options SAMEORIGIN;
   proxy_buffers 256 16k;
   proxy_buffer_size 16k;
   proxy_read_timeout 600s;
   proxy_cache mattermost_cache;
   proxy_cache_revalidate on;
   proxy_cache_min_uses 2;
   proxy_cache_use_stale timeout;
   proxy_cache_lock on;
   proxy_http_version 1.1;
   proxy_pass http:​//backend;
    }
}

Veillez à modifier les valeurs mattermost.example.com par votre nom de domaine ainsi que le chemin du certificat SSL.

Il ne vous reste plus qu’à activer le site :

# ln -s /etc/nginx/sites-available/mattermost.example.com.conf /etc/nginx/sites-enabled/mattermost.example.com

Vérifier que la configuration est correcte :

nginx -t

Et à redémarrer Nginx :

# systemctl restart nginx

Si tout s’est bien passé, votre installation de Mattermost est disponible à l’adresse https:​//ceci.estun.example.com, et vous pouvez accéder à l’interface d’administration à partir de https:​//pad.ceci.est-un.example.com/admin, félicitations !