Table des matières
Mattermost ? Installation et configuration dans un container LXC
Installation de Mattermost dans un container LXC
On commence par installer un container sur le serveur hote
lxc-create -t download -n tlcvl -- -d debian -r buster -a amd64
On démarre le container et on regarde son IP :
lxc-start tlcvl lxc-ls -f NAME STATE AUTOSTART GROUPS IPV4 IPV6 UNPRIVILEGED tlcvl RUNNING 0 - 10.0.3.200 - false
On fait en sorte que le container démarre tout seul en ajoutant à la fin du fichier
nano /var/lib/lxc/tlcvl/config # Autostart lxc.start.auto = 1
On rentre dans le container pour installer Mattermost
lxc-attach tlcvl root@tlcvl apt update apt install wget curl nano iotop nload htop locate curl gnupg
Installation bdd et Mattermost
Ensuite il s'agit de suivre la procédure d'installation décrite ici :
On crée un utilisateur spécifique
sudo useradd --system --user-group mattermost sudo usermod -a -G sudo mattermost
Installation du système de base de données
sudo apt-get install mariadb-server
Sécurisation
mysql_secure_installation
Configuration bdd et user
mysql -u root -p mysql> create user 'mmuser'@'localhost' identified by 'mmuser-password'; mysql> create database mattermost; mysql> grant all privileges on mattermost.* to 'mmuser'@'localhost'; mysql> exit
On télécharge la dernière version de Mattermost
wget https://releases.mattermost.com/5.32.1/mattermost-5.32.1-linux-amd64.tar.gz tar -xvzf mattermost*.gz sudo mv mattermost /opt sudo mkdir /opt/mattermost/data sudo chown -R mattermost:mattermost /opt/mattermost sudo chmod -R g+w /opt/mattermost
On opère des modifications dans le fichier de config
sudo nano /opt/mattermost/config/config.json
Il faut modifier le driver pour la base de données + accès à la bdd, informer un serveur smtp, activer les notifications par mail, indiquer des champs reply-to et autres pour que l'envoi de mail marche bien, cela donne :
- config.json
... "SqlSettings": { "DriverName": "mysql", "DataSource": "mmuser:*******************@tcp(localhost:3306)/mattermost?charset=utf8mb4,utf8\u0026readTimeout=30s\u0026writeTimeout=30s", "DataSourceReplicas": [], "DataSourceSearchReplicas": [], "MaxIdleConns": 20, "ConnMaxLifetimeMilliseconds": 3600000, "MaxOpenConns": 300, "Trace": false, "AtRestEncryptKey": "*********************", "QueryTimeout": 30, "DisableDatabaseSearch": false }, ... "EmailSettings": { "EnableSignUpWithEmail": true, "EnableSignInWithEmail": true, "EnableSignInWithUsername": true, "SendEmailNotifications": true, "UseChannelInEmailNotifications": false, "RequireEmailVerification": false, "FeedbackName": "TL-CVL Gentil Robot", "FeedbackEmail": "febot@futuretic.fr", "ReplyToAddress": "febot@futuretic.fr", "FeedbackOrganization": "mm.mondomaine.org", "EnableSMTPAuth": true, "SMTPUsername": "febot@futuretic.fr", "SMTPPassword": "******************************", "SMTPServer": "mail.gandi.net", "SMTPPort": "465", "SMTPServerTimeout": 10, "ConnectionSecurity": "TLS", "SendPushNotifications": true, "PushNotificationServer": "https://push-test.mattermost.com", "PushNotificationContents": "full", "PushNotificationBuffer": 1000, "EnableEmailBatching": false, "EmailBatchingBufferSize": 256, "EmailBatchingInterval": 30, "EnablePreviewModeBanner": false, "SkipServerCertificateVerification": false, "EmailNotificationContentsType": "full", "LoginButtonColor": "#0000", "LoginButtonBorderColor": "#2389D7", "LoginButtonTextColor": "#2389D7" },
Test du mattermost
cd /opt/mattermost sudo -u mattermost bin/mattermost curl http://localhost:8065
Création d'un fichier systemd pour lancement automatique
nano /lib/systemd/system/mattermost.service
- mattermost.service
[Unit] Description=Mattermost After=network.target After=postgresql.service BindsTo=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
On lance mattermost automatiquement :
systemctl start mattermost.service systemctl status mattermost.service systemctl enable mattermost.service
On peut désormais sortir du container pour configurer le vhost proxy
root@tlcvl ~ #exit
Configuration du vhost sur le serveur hote pour proxy du traffic vers le container
On génère déjà un certificat avec certbot avec un vhost temporaire qui contient l'adresse du serveur et pointe vers /var/www/html
certbot certonly --http-01-address 135.181.129.123 -d mm.mondomaine.org --verbose
Une fois le certificat généré, config du vhost, on redirige les requêtes sur port 80 vers 443 et
nano /etc/apache2/sites-available/mm.mondomaine.org-le-ssl.conf
- mm.mondomaine.org-le-ssl.conf
<IfModule mod_ssl.c> <VirtualHost *:443> ServerAdmin moi@mondomaine.org ServerName mm.mondomaine.org # Headers for security <IfModule mod_headers.c> Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains; preload" Header set X-XSS-Protection "1; mode=block" Header set X-Frame-Options "sameorigin" Header set X-Content-Type-Options "nosniff" </IfModule> # SSL config SSLEngine on SSLProxyEngine On # ajout suite a default ssl handshake et suite à AH01097: pass request body failed SSLProxyVerify none SSLProxyCheckPeerCN off SSLProxyCheckPeerName off SSLProxyCheckPeerExpire off # SSL certificates SSLCertificateFile /etc/letsencrypt/live/mm.mondomaine.org/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/mm.mondomaine.org/privkey.pem Include /etc/letsencrypt/options-ssl-apache.conf # Proxy base parameters ProxyPreserveHost On ProxyRequests Off # Proxy pour cetificat DocumentRoot /var/www/html ProxyPass /.well-known ! # Set web sockets RewriteEngine On RewriteCond %{REQUEST_URI} /api/v[0-9]+/(users/)?websocket [NC,OR] RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC,OR] RewriteCond %{HTTP:CONNECTION} ^Upgrade$ [NC] RewriteRule .* ws://10.0.3.200:8065%{REQUEST_URI} [P,QSA,L] # Proxy to container ProxyPass / http://10.0.3.200:8065/ ProxyPassReverse / http://10.0.3.200:8065/ ProxyPassReverseCookieDomain 10.0.3.200 mm.mondomaine.org # Logs ErrorLog /var/log/apache2/mm.mondomaine.org.error.log LogLevel error CustomLog /var/log/apache2/mm.mondomaine.org.access.log vhost_combined </VirtualHost> </IfModule>
Ajouter ensuite ce vhost ainsi que celui pour port 80 et reload
a2ensite mm.mondomaine.org.conf mm.mondomaine.org-le-ssl.conf systemctl reload apache2
Configuration de Mattermost
On doit maintenant pouvoir se rendre à l'url pour accéder à l'interface de Mattermost et créer ainsi le premier utilisateur administrateur du site
Notamment la configuration SMTP pour que les mails soient bien envoyés
Et configurer les notifications pour qu'elles aient un expéditeur, …
Configurations complémentaires
On règle les locales pour être en français par défaut
dpkg-reconfigure locales
Choisir FR UTF8 par défaut et régler dans l'interface d'amin de Mattermost le français par défaut
Ajout du plug-in jitsi pour permettre l'intégration de visioconf dans les canaux de discussion Mattermost
Désactiver la télémétrie de Mattermost qui envoie des datas anonymisés
Modifier à la ligne 168 dans
nano /opt/mattermost/config/config.json "EnableDiagnostics": false, "EnableSentry": false,
Voir https://docs.mattermost.com/administration/telemetry.html
Configurer les Headers pour la CSP Content-Security Policy
Utilitaire en ligne de commande pour supprimer un canal ou une équipe et plus
Depuis Mattermost 6, l'utilitaire mattermost a été complété par mmctl, voir la documentation
Pour faire marcher cet utilitaire mmctl, il faut faire plusieurs choses :
éditer Mattermost's config.json file,et mettre EnableLocalMode to “true”
nano /opt/mattermost/config/config.json
vérifier le chemin de la socket locale dans ce fichier et ajouter dans le /root/.bashrc
export PATH=$PATH:/opt/mattermost/bin/ export MMCTL_LOCAL=true export MMCTL_LOCAL_SOCKET_PATH=/var/tmp/mattermost_local.socket
Se relogguer et relancer mattermost
systemctl restart mattermost
Gestion d'équipe
mmctl team archive - Archive some teams mmctl team create - Create teams mmctl team delete - Delete teams mmctl team list - List teams mmctl team modify - Modify teams mmctl team rename - Rename teams mmctl team restore - Restore teams mmctl team search - Search teams mmctl team users - Manage team users
Intégrer les nouveaux utilisateurs dans les canaux publics
Modifier en utilisant l'url du canal : config supprimée le 1er juin 2022 car s'appliquait à toutes les équipes qui n'ont pas les mêmes noms de canaux
nano /opt/mattermost/config/config.json "ExperimentalDefaultChannels": [ "chantier-formation-professionnelle", "chantier-accompagnement-de-projet-essis", "chantier-transition-numerique", "chantier-formation-des-facilitateurs-de-tiers-lieux", "chantier-formation-professionnelle", "chantier-formation", "appel-a-projets", "cest-quoi-un-tiers-lieux", "culture-du-faire" ]
Désactiver les messages système (annonce de qui a rejoint le canal ...)
Voir cette documentation, à voir si cela ne s'applique qu'au canal centre ville
nano /opt/mattermost/config/config.json "ExperimentalEnableDefaultChannelLeaveJoinMessages": false
Activer / Désactiver le plug-in Jitsi si marche plus
Essayer ceci si le plug-in jitsi ne marche plus
Chaque utilisateur a la possibiltié de désactiver ces messages dans les paramètres avancés de son compte :