Pourquoi self-héberger Mattermost sur un VPS
Les messageries SaaS facturent par utilisateur actif et conservent l'historique de vos échanges sur leurs serveurs. Mattermost renverse cette logique : une instance auto-hébergée sur VPS abrite des équipes entières sans coût par siège sur l'édition Team, avec l'historique complet et un stockage de fichiers que vous contrôlez. Pour une agence ou une entreprise soumise à des contraintes de confidentialité, héberger la messagerie en propre signifie que ni les messages, ni les fichiers partagés, ni les métadonnées ne transitent par un tiers. Mattermost s'intègre par ailleurs nativement avec des forges Git, des outils de CI/CD et des webhooks entrants/sortants, ce qui en fait un hub de communication central pour les équipes techniques.
Contrairement à Slack qui impose son infrastructure et ses tarifs par palier, une instance Mattermost vous donne un contrôle total sur la rétention des messages, les politiques d'archivage, les journaux d'audit et les intégrations. C'est particulièrement important pour les équipes soumises à des réglementations sectorielles — santé, finance, défense — où les données ne peuvent pas quitter un périmètre défini.
Bénéfices concrets d'un Mattermost auto-hébergé
- Historique complet sur l'édition Team — l'édition gratuite Entry plafonne l'historique consultable à 10 000 messages depuis la version 11 (voir section dédiée).
- Stockage des fichiers partagés sur votre VPS ou un bucket S3 que vous maîtrisez.
- Webhooks entrants/sortants et slash commands pour brancher CI, monitoring et alertes.
- Authentification entreprise : LDAP/AD, SAML et OAuth selon l'édition.
- Applications desktop et mobiles officielles pointant vers votre propre domaine.
- Conformité et souveraineté des données : aucune conversation hors de votre infrastructure.
- Plugin Boards intégré (v10+) pour la gestion de projets Kanban/Tableau directement dans la messagerie.
- Appels audio/vidéo HD via le plugin Calls — conférences sans outil tiers.
Prérequis matériels et logiciels
Mattermost est plus exigeant qu'une forge Git car il maintient des connexions WebSocket persistantes. Comptez 2 vCPU et 4 Go de RAM pour une équipe jusqu'à 50 utilisateurs actifs ; visez 8 Go au-delà ou si vous activez la recherche avancée (Elasticsearch). Pour une organisation de 100 à 500 utilisateurs ou si vous activez les appels vidéo HD via le plugin Calls, comptez 16 Go de RAM et 4 vCPU. PostgreSQL est la base recommandée depuis la v10 — MySQL est toujours supporté mais PostgreSQL est plus adapté aux gros volumes et à la recherche plein-texte. Prévoyez 30 Go de SSD minimum, davantage si vous stockez beaucoup de fichiers localement.
Côté logiciel : Docker Engine 24+ et Docker Compose v2, un sous-domaine chat.votredomaine.com avec enregistrement A, et un reverse proxy capable de relayer correctement les connexions WebSocket (Upgrade/Connection). Un certificat TLS valide est requis — les clients mobiles refusent les connexions HTTP. Pensez également à ouvrir le port 8443 si vous activez les appels vidéo (plugin Calls/RTCD) et à configurer le serveur TURN pour les connexions derrière NAT.
Déployer Mattermost avec Docker et SSL
Préparer le VPS
Installez Docker et Compose, puis récupérez le dépôt officiel
mattermost-dockerou créez/opt/mattermost. Augmentez si besoinvm.max_map_countet les limites de fichiers ouverts — Mattermost ouvre de nombreuses connexions simultanées :sysctl -w vm.max_map_count=262144echo 'vm.max_map_count=262144' >> /etc/sysctl.confConfigurer PostgreSQL et les volumes
Dans le
docker-compose.yml, déclarez un servicepostgresavec un mot de passe fort et des volumes persistants pour/var/lib/postgresql/data. Pour Mattermost, montez des volumes dédiés àconfig,data,logsetpluginsafin de tout conserver hors du conteneur.Lancer la stack Mattermost
Renseignez les variables
MM_SQLSETTINGS_DATASOURCEetMM_SERVICESETTINGS_SITEURL(en HTTPS), puis exécutezdocker compose up -d. Suivezdocker compose logs -fjusqu'au message indiquant que le serveur écoute sur le port 8065.Configurer le reverse proxy HTTPS avec WebSocket
Avec Nginx, proxifiez vers
http://127.0.0.1:8065et ajoutez impérativement ces en-têtes WebSocket :proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";proxy_read_timeout 86400;
Sans ces lignes, la messagerie temps réel ne fonctionnera pas. Avec Caddy,reverse_proxy localhost:8065gère le WebSocket automatiquement.Activer le certificat SSL (Let's Encrypt)
Obtenez le certificat avec
certbot --nginx -d chat.votredomaine.comou laissez Caddy le provisionner seul. Vérifiez queSiteURLest bien enhttps://dans la configuration, sinon les clients mobiles refuseront de se connecter.Créer l'équipe et durcir l'instance
Ouvrez
https://chat.votredomaine.com, créez le compte administrateur système et votre première équipe. Désactivez l'inscription ouverte (Allow Email Invitationsuniquement), configurez SMTP pour les e-mails de notification, et restreignez la création d'équipes aux administrateurs.Se connecter la première fois
Ouvrez l'URL dès la fin de l'installation : Mattermost affiche un écran de création de compte, et le TOUT PREMIER compte créé reçoit automatiquement le rôle d'administrateur système. Créez-le immédiatement.
Mattermost v10 : les nouveautés clés
Mattermost v10 (sorti fin 2024, branche Extended Support active en 2025–2026) a introduit plusieurs améliorations significatives pour les instances auto-hébergées :
Boards intégré en GA — le plugin Boards (Kanban/Tableau de bord) est désormais pré-packagé et activé par défaut. Vos équipes gèrent leurs projets directement depuis Mattermost sans outil externe.
Calls HD (plugin Calls v0.x) — conférences audio et vidéo HD directement dans les canaux, avec partage d'écran. L'installation Docker inclut le plugin ; il suffit d'activer MM_PLUGINSETTINGS_ENABLE=true.
SAML AES-256-GCM — chiffrement des assertions SAML renforcé pour les environnements Enterprise.
Connected Workspaces en GA — les canaux partagés entre plusieurs instances Mattermost passent de béta à disponibilité générale, permettant des espaces de travail fédérés.
Fin du support E10/E20 — si vous migrez depuis une ancienne licence, vérifiez votre plan avant de mettre à jour.
Intégrations : webhooks, Gitea, Jira et Zoom
Mattermost excelle comme hub centralisé pour les équipes techniques. Les intégrations les plus courantes en self-hosted :
Webhooks entrants — chaque canal dispose d'une URL webhook. Votre CI envoie un POST JSON quand un déploiement réussit ou échoue ; Mattermost l'affiche dans #ci-alerts. Configuration dans Intégrations → Webhooks entrants.
Webhooks sortants — Mattermost envoie une requête HTTP lorsqu'un message contient un mot-clé défini. Utile pour déclencher des pipelines depuis une conversation.
Gitea et GitLab — le plugin officiel Mattermost pour GitLab (compatible Gitea via webhooks JSON) notifie push, merge requests et issues dans les canaux de vos dépôts.
Jira — le plugin Jira permet de créer des tickets directement depuis un message Mattermost et de recevoir les mises à jour de statut dans les canaux.
Zoom — le plugin Zoom génère un lien de réunion en une commande slash /zoom dans n'importe quel canal. Alternative : utilisez le plugin Calls natif pour des réunions entièrement on-premise.
Sauvegardes : base de données et fichiers
Une instance Mattermost repose sur deux composants à sauvegarder régulièrement : la base PostgreSQL et le dossier de données.
Sauvegarde PostgreSQL avec pg_dump (depuis l'hôte, avec le conteneur en cours) :docker exec mattermost-postgres pg_dump -U mmuser mattermost | gzip > /backups/mm-$(date +%Y%m%d).sql.gz
Sauvegarde du dossier data — montez le volume mattermost/data en externe et archivez-le :tar czf /backups/mm-data-$(date +%Y%m%d).tar.gz /opt/mattermost/data
Restauration — pour restaurer : stoppez les conteneurs, importez le dump SQL dans un conteneur Postgres propre, remplacez le dossier data, puis docker compose up -d.
Pensez à tester la restauration au moins une fois : une sauvegarde non testée n'est pas une sauvegarde.
Ce que l'édition gratuite limite depuis la version 11
À partir de Mattermost 11, l'édition gratuite auto-hébergée — appelée Entry — plafonne l'historique consultable à 10 000 messages, tous canaux confondus et pour l'ensemble du serveur. Le point important est souvent mal compris : les messages plus anciens ne sont pas supprimés. Ils restent dans votre base de données, sur votre machine — ils cessent simplement d'être affichables et cherchables depuis l'application. Le changement a été mal reçu par la communauté, précisément parce qu'il porte sur des données que l'utilisateur héberge lui-même. Deux issues existent : passer à une édition payante pour lever le plafond, ou choisir un outil dont l'édition libre ne limite pas l'historique. Si votre usage est une messagerie d'équipe au long cours, mesurez votre volume mensuel avant de vous engager : 10 000 messages se consomment vite à plusieurs. Il existe une troisième voie, souvent ignorée : l'édition Team, gratuite elle aussi, ne plafonne PAS l'historique — mais elle ne gère pas le SSO et s'arrête à 250 utilisateurs. Le choix se fait donc entre un plafond d'historique (Entry) et un plafond d'utilisateurs sans SSO (Team).
Mattermost vs Slack vs Rocket.Chat
Faites défiler le tableau
| Critère | Mattermost (Team) | Slack (gratuit) | Rocket.Chat (CE) |
|---|---|---|---|
| Self-hosted | Oui | Non (SaaS) | Oui |
| Historique messages | Aucun plafond | 90 jours | Aucun plafond |
| Coût par siège | Gratuit jusqu'à 250 utilisateurs | Gratuit / 7,25 $/u/mois Pro | Gratuit (open source) |
| Appels vidéo natifs | Plugin Calls (HD) | Intégration Huddles | Plugin Jitsi |
| Boards / PM intégré | Plugin Boards (GA v10) | Non (Canvases) | Non |
| LDAP/SAML | Éditions payantes | Non (SAML Enterprise+) | Oui (inclus CE) |
| API & webhooks | Oui (entrants/sortants) | Oui | Oui |
| Mobile (iOS/Android) | Apps officielles | Apps officielles | Apps officielles |
Dépannage : erreurs courantes
WebSocket SSL ne s'établit pas — vérifiez que votre bloc Nginx inclut proxy_set_header Upgrade $http_upgrade; et proxy_set_header Connection "upgrade";. Si le proxy est derrière Cloudflare, activez le mode WebSocket dans le dashboard Cloudflare (Network → WebSockets).
Erreur de connexion à la base de données — contrôlez que MM_SQLSETTINGS_DATASOURCE pointe bien vers le service postgres du Compose (postgres://mmuser:motdepasse@db:5432/mattermost). Le conteneur Mattermost doit être sur le même réseau Docker que postgres.
Mise à jour entre versions majeures — ne sautez pas de versions majeures. De v9 à v11 : passez d'abord par v10, attendez que la migration de schéma se termine (vérifiez les logs), puis montez vers v11. Consultez CHANGELOG.md officiel pour les breaking changes avant chaque saut.
Clients mobiles refusent de se connecter — SiteURL doit être en https:// et le certificat valide. Un certificat auto-signé est refusé par les apps iOS/Android sans configuration MDM.
Pour les fichiers partagés, ne stockez pas tout sur le disque du VPS à long terme : configurez Mattermost en mode stockage objet S3 compatible. Cela découple le volume de données de la taille de votre VPS, simplifie radicalement les sauvegardes (le bucket est versionné indépendamment) et facilite une éventuelle montée en charge horizontale. Pensez aussi à activer la rétention des données pour purger automatiquement les vieux messages et maîtriser la croissance de PostgreSQL.
La documentation officielle
Pour la configuration avancée et les options propres à l'outil, référez-vous à la documentation officielle de Mattermost. Ce guide couvre la mise en ligne sur VPS ; la doc éditeur reste la référence pour les réglages fins, les mises à jour majeures et les cas d'usage spécifiques.