====== 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}}