Retour à [[doc:formations:hebergement:service:mattermost]]. ====== Installation d'un mattermost sur un serveur existant ====== ([[https://docs.mattermost.com/install/install-ubuntu-1804.html|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 [[doc:formations:hebergement:service:mattermost:sql_upgrade|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 ''; 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 ''-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'[[doc:formations:hebergement:service:mattermost|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 [[doc:formations:hebergement:service:apache#reverse_proxy|cette page]]. Voir le site officiel pour [[https://docs.mattermost.com/install/install-ubuntu-1604.html#installing-nginx-server|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 [[https://httpd.apache.org/docs/2.4/mod/mod_proxy_wstunnel.html|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 # dl=$(curl -s https://mattermost.com/deploy/?ref=download | sed -n 's/.* 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** * [[https://github.com/seansackowitz/mattermost-plugin-jitsi/blob/master/README.md|jisti pour mattermost]] * {{:doc:formations:hebergement:serveur:nginx-mattermost-plus-dokuwiki.conf.zip|fichier de configuration}} nginx pour mattermost + dokuwiki Suite sur [[doc:formations:hebergement:service:mattermost]].