====== Mattermost ? Installation et configuration dans un container LXC ======
* [[https://mattermost.com/|Site officiel de Mattermost]]
* [[https://docs.mattermost.com/|Mattermost documentation générale]]
===== Installer un container LXC 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, mais avant, on install quelques outils pratiques.
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 [[https://docs.mattermost.com/install/install-debian.html#installing-debian-buster|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 :
...
"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
[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
ServerAdmin moi@mondomaine.org
ServerName mm.mondomaine.org
# Headers for security
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"
# 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
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
{{::mattermost-smtp.png|}}
Et configurer les notifications pour qu'elles aient un expéditeur, ...
{{::mattermost-notifications.png|}}
===== 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 ====
* https://forum.mattermost.org/t/set-custom-headers-for-content-security/11093/3
==== Utilitaire en ligne de commande pour supprimer un canal ou une équipe et plus ====
Depuis Mattermost 6, l'utilitaire [[https://medium.com/@santosjs/plugging-in-to-the-mattermost-cli-8cdcef2bd1f6|mattermost]] a été complété par mmctl, [[https://docs.mattermost.com/manage/mmctl-command-line-tool.html|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 [[https://docs.mattermost.com/administration/config-settings.html#enable-default-channel-leave-join-system-messages|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 ====
[[https://github.com/mattermost/mattermost-plugin-jitsi/issues/6|Essayer ceci]] si le plug-in jitsi ne marche plus
Chaque utilisateur a la possibiltié de désactiver ces messages dans [[https://docs.mattermost.com/help/settings/account-settings.html#enable-join-leave-messages|les paramètres avancés de son compte]] :
===== Mise à jour de Mattermost =====
Voir [[https://docs.mattermost.com/upgrade/upgrading-mattermost-server.html|la doc officielle]].
En résumé :
Telecharger puis décompresser la version de [[https://docs.mattermost.com/upgrade/extended-support-release.html#what-are-the-current-supported-extended-support-release-versions|Mattermost ESR]] désirée ou la [[https://docs.mattermost.com/upgrade/version-archive.html#mattermost-enterprise-edition|toute dernière]] dans /tmp :
cd /tmp
wget https://releases.mattermost.com/7.9.1/mattermost-7.9.1-linux-amd64.tar.gz
tar -xf mattermost*.gz --transform='s,^[^/]\+,\0-upgrade,'
Arrêter Mattermost :
systemctl stop mattermost
Nettoyer le dossier du mattermost actuel :
cd /opt
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
Appliquer la mise à jour des fichiers et remettre les droits :
cp -an /tmp/mattermost-upgrade/. mattermost/
chown -R mattermost:mattermost /opt/mattermost
Redémarrer Mattermost :
systemctl start mattermost
Supprimer les fichiers temporaires :
rm -rf /tmp/mattermost-upgrade && rm -i /tmp/mattermost*.gz
{{tag>bj serveur lxc mattermost futuretic}}