Outils pour utilisateurs

Outils du site


doc:formations:hebergement:serveur:mattermost:installation

Ceci est une ancienne révision du document !


Retour à mattermost.

Installation d'un mattermost sur un serveur existant

(ref.)

Mattermost nécessite un serveur mysql (mariadb), ainsi qu'un serveur web nginx. Notez qu'il est possible d'installer ce serveur en parallèle d'un serveur apache2 existant, tant qu'on sert le service sur un port non standard.

apt install mysql-server   # ou mariadb-server (identique)

MySQL

:!: début 2025, mysql n'est plus supporté. Voyez cette page pour une migration

 pwd='GlLY52KffLM6'  # mot de passe de l'utilisateur interne associé à mattermost (à changer)
mysql -u root
create database mattermost;
create user 'matteruser'@'%' identified by '<motdepassecidessus>';
grant all privileges on mattermost.* to 'matteruser'@'%';
quit;

Installation

Via dépot apt externe

Note: nouveau (6/23), il est possible d'utiliser un dépot de package debian:

curl -o- https://deb.packages.mattermost.com/repo-setup.sh | sudo bash -s mattermost
apt update
apt install mattermost -y

Ou bien manuellement

Aller sur https://mattermost.com/download/ et copier l'URL figurant sous le bouton "Get Download".

:!: Attention à prendre le meme format exécutable que votre serveur (AMD vs Intel…). A ce jour il semblerait qu'ils ne supportent que la plateforme Intel!

cd /opt
wget https://releases.mattermost.com/5.24.2/mattermost-5.24.2-linux-amd64.tar.gz
tar xvzf mattermost*.tar.gz
rm mattermost*.tar.gz
mkdir /opt/mattermost/data  # vous pourrez en faire un lien symbolique vers un autre endroit ensuite

Puis

useradd --system --user-group mattermost
chown -R mattermost:mattermost /opt/mattermost
chmod -R g+w /opt/mattermost

Configuration

Modifiez alors la section SqlSettings du fichier /opt/mattermost/config/config.json (avec le meme mot de passe que ci-dessus bien sûr):

  "SqlSettings": {
      "DriverName": "mysql",
      "DataSource": "matteruser:GlLY52KffLM6@tcp(127.0.0.1:3306)/mattermost?charset=utf8mb4,utf8\u0026readTimeout=30s\u0026writeTimeout=30s",

Vous pouvez aussi changer le ListenAddress du bloc ServiceSettings sur un port non standard (et une adresse 127.0.0.1 si vous voulez empêcher un accès externe, cf. bas de cette page).

Enfin on démarre mattermost (sous l'utilisateur bridé mattermost):

cd /opt/mattermost
runuser -u mattermost ./bin/mattermost

Et observez le journal affiché.

Service unix associé

A ce stade on est censé voir un Server is listening on…. Arrêter le serveur avec <Control>-C puis on crée un service automatisé de lancement:

cat > /lib/systemd/system/mattermost.service << EOF
[Unit]
Description=Mattermost
After=network.target
After=mysql.service
Requires=mysql.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=mysql.service
EOF

On le lance et on vérifie le statut "active (running)":

service mattermost start
service mattermost status

Dans ce cas on devrait voir du contenu HTML sur cette adresse (précisez le port configuré s'il a été changé):

curl http://localhost:8065

On active alors le lancement automatique au démarrage:

systemctl enable mattermost.service

Note: pour lister tous les services actifs, systemctl --type=service --state=running

Et désormais, vous devriez avoir accès à la console mattermost via:

http://mondomaine.com:8065

Si ce n'est pas le cas (accès local mais refus distant), vérifiez plutôt sur le serveur les règles de pare-feu, HSTS, etc.

De là on peut créer le premier utilisateur (qui aura le status d'administrateur), puis la première équipe, etc (voir l'usage de mattermost).

Redirection extérieure

Pour le moment on accède à Mattermost via une URL "bizarre", puisqu'il propose lui-même son service web qui ne peut résider sur le même port que celui du serveur web existant.

Une solution élégante est de recourir à un reverse proxy afin de corriger cette URL étrange, par exemple en lui dédiant https://mondomaine.com/mattermost ou https://mattermost.mondomaine.com. C'est précisément ce que font les exemple de cette page.

Voir le site officiel pour un exemple de configuration nginx, chapitre Configuring NGINX as a proxy for Mattermost Server, notamment pour une résolution "propre" des websockets si vous avez une erreur qui apparaît en haut de votre écran lorsque vous êtes connectés.

Une fois fonctionnel, il est utile de fermer à l'extrieur le port d'écoute non protégé de mattermost. Pour cela il existe plusieurs solutions:

  • modifier /opt/mattermost/config/config.json avec un "ListenAddress": "127.0.0.1:28365, et en faisant de meme pour le reverse proxy: proxy_pass http://127.0.0.1:8065
  • ou ajouter une règle de pare-feu sur la console Scaleway ou sur le serveur lui-meme afin de bloquer le port associé

Proxy de mattermost pour sécurisation par HTTPS

Cas d'usage:

  • mattermost est installé pour écouter localement sur http://localhost:8065
  • votre serveur web Apache prééexiste sur le serveur
  • et il est est déjà protégé par un certificat HTTPS (ex. sur https://service.monsite.com)
  • mattermost n'est pas affecté à un sous-domaine dédié (je le recommande!), mais il doit être visible comme s'il était "dans" un sous-dossier particulier, tel que https://service.monsite.com/mm

Alors:

  • déjà, configurez aussi ce /mm dans la console Mattermost, section Serveur Web
  • ensuite il va nous falloir configurer le proxy https→http interne, mais ne règle pas tout (seule la partie HTTP(S) fonctionnera, les websockets donneront une erreur)
  • et donc configurer le proxy aussi pour l'établissement des websockets
Le protocole websocket est un mécanisme utile et intéressant qui transforme une communication sous protocole HTTP initiale, vers le protocole websocket tout en restant sur le meme port. Le serveur et le client doivent coopérer pour cela. Dans notre cas, on doit aussi faire du proxy car on doit transformer les wss:service.monsite.com/mm/… (externes sécurisés) en des ws:127.0.0.1:8065/mm/… (internes non sécurisés).

Voila alors le bloc "proxy" équivalent dans votre configuration Apache2:

# Set web sockets: external  as internal 

# Configuration du proxy pour le service websocket (wss->ws):
RewriteEngine On
RewriteCond %{REQUEST_URI} /mm/api/v[0-9]+/(users/)?websocket [NC,OR]
RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC,OR]
RewriteCond %{HTTP:CONNECTION} ^Upgrade$ [NC]
RewriteRule .* ws://127.0.0.1:8065%{REQUEST_URI} [P,QSA,L]

# Configuration habituelle du proxy pour le service HTTP
ProxyPass         /mm http://127.0.0.1:8065/mm
ProxyPassreverse  /mm http://127.0.0.1:8065/mm

:!: Sur votre serveur vous aurez à activer quelques modules, notamment wstunnel qui réduit la quantité de configuration manuelle:

a2enmod proxy proxy_wstunnel proxy_http rewrite

Notez l'usage additionnel de RewriteEngine qui permet de réécrire en amont certaines URL, puisque l'on mélange ici HTTP et WS.

Log

Pour séparer les logs verbeux de ce mattermost sur /mm sous Apache, on peut configurer:

SetEnvIf Request_URI /mm/ mattermostlog
CustomLog ${APACHE_LOG_DIR}/mattermost.log common env=mattermostlog

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined env=!mattermostlog

Upgrade, mise à jour de mattermost

#!/bin/bash -feu
# Seamlessly upgrade mattermost by reproducing the manual steps
# of https://docs.mattermost.com/administration/upgrade.html

# Check https://mattermost.com/download/ for the latest
# Ex: wget https://releases.mattermost.com/5.25.1/mattermost-5.25.1-linux-amd64.tar.gz or https://releases.mattermost.com/6.0.1/mattermost-6.0.1-linux-amd64.tar.gz

# <input type="text" name="tl" id="tl" readonly value="https://releases.mattermost.com/5.25.1/mattermost-5.25.1-linux-amd64.tar.gz">
dl=$(curl -s https://mattermost.com/deploy/?ref=download | sed -n 's/.*<input.*name="tl".*value="\([^"]*\)".*/\1/p')

echo "We will use this release: $dl"
echo -n "Is this OK (Y| )? "
read ans
if [[ $ans != 'Y' ]]; then
	echo "Bailing out"
	exit 1
fi

cd /tmp
wget $dl
mb=$(basename $dl)
tar -xf $mb --transform='s,^[^/]\+,\0-upgrade,'
rm /tmp/$mb
chown -hR mattermost:mattermost /tmp/mattermost-upgrade/


systemctl stop mattermost

echo "Backuping mattermost SQL"
BAKD=$(date +'%Y%m%d-%H%M%S')

cd /opt/

# Back the SQL databse up (bypasses root password if any)
/etc/init.d/mysql stop
mkdir -p /var/run/mysqld; chown mysql:mysql /var/run/mysqld
mysqld_safe --skip-grant-tables &
sleep 5
mysqldump mattermost | gzip > mattermost-backup-for-upgrade-$BAKD.sql.tgz
kill %1
service mysql start

echo "Backuping mattermost data"
tar czf mattermost-backup-for-upgrade-$BAKD.files.tgz mattermost

echo -n "Ready to override existing mattermost (Y| )? "
read ans
if [[ $ans != 'Y' ]]; then
	echo "Bailing out"
	exit 1
fi


find mattermost/ mattermost/client/ -mindepth 1 -maxdepth 1 \! \( -type d \( -path mattermost/client -o -path mattermost/client/plugins -o -path mattermost/config -o -path mattermost/logs -o -path mattermost/plugins -o -path mattermost/data \) -prune \) | sort | sudo xargs rm -r

cp -an /tmp/mattermost-upgrade/. mattermost/

# This provokes DB migration (better than restarting the service, wth?)
/opt/mattermost/bin/mattermost version

# You may check synchronously the (slow!) schema upgrades with:
#   tail -F /opt/mattermost/logs/mattermost.log

systemctl start mattermost

rm -r /tmp/mattermost-upgrade/

:!: Il arrive souvent qu'on aie un problème de "collation" lors des mises à jour. Vous pouvez tenter ceci pour débloquer :

ALTER DATABASE `mattermost-dev` CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
DROP PROCEDURE IF EXISTS RenameSolarizedThemeWithUnderscore;

Plugins

TODO

Suite sur mattermost.

doc/formations/hebergement/serveur/mattermost/installation.1743269924.txt.gz · Dernière modification : 2025/03/29 17:38 de jeremie