Skip to content

Mattermost Docker : chat d'équipe auto-hébergé (alternative Slack)

brandon
Date de publication:

💡 TL;DR

  • Mattermost est un chat d’équipe open-source que tu déploies en 10 minutes avec Docker.
  • Stack minimale : conteneur Mattermost + PostgreSQL + reverse proxy HTTPS.
  • Tu gardes le contrôle total de tes données, sans dépendre de Slack ou Teams.

Tu en as marre de payer Slack à 8$ par utilisateur et par mois pour un historique de messages qui finit dans un cloud américain ? Tu veux une messagerie d’équipe où tu décides où tes données dorment ? Mattermost est la réponse. C’est un logiciel de chat d’équipe open-source, développé en Go et React, qui tourne parfaitement dans un conteneur Docker. Ce guide te montre comment le monter de zéro, le sécuriser avec HTTPS et le rendre utilisable par ton équipe en moins d’une demi-heure.

Pourquoi Mattermost plutôt que Slack ou Teams ?

Slack, c’est pratique. Microsoft Teams aussi. Le problème, c’est le prix, la souveraineté des données et la dépendance à un tiers. Quand tu cliques sur “Accepter” chez Slack, tu acceptes que tes conversations, fichiers et métadonnées transitent par leurs serveurs. Avec Mattermost, tout reste sur ta machine.

Voici ce que tu obtiens gratuitement avec la Team Edition :

La version Enterprise ajoute l’authentification LDAP/AD, la conformité avancée et le support officiel. Pour un homelab ou une petite équipe, la Team Edition suffit largement.

Prérequis

Avant de commencer, assure-toi d’avoir :

Si Docker Compose est encore flou pour toi, jette un œil au guide Docker pour débutants avant de continuer.

Architecture de la stack

Notre déploiement repose sur trois briques :

  1. PostgreSQL : base de données principale de Mattermost. MySQL est supporté, mais PostgreSQL est recommandé par les développeurs pour de meilleures performances.
  2. Mattermost Team Edition : le serveur de messagerie lui-même.
  3. Caddy : reverse proxy qui gère le HTTPS automatiquement avec Let’s Encrypt.

Chaque service vit dans son propre conteneur. Les données persistent dans des volumes Docker. Rien ne touche le système hôte.

Le docker-compose.yml

Crée un répertoire dédié et un fichier docker-compose.yml :

mkdir -p ~/mattermost-docker
cd ~/mattermost-docker

Voici le fichier complet :

version: "3.8"

services:
  postgres:
    image: postgres:16-alpine
    container_name: mattermost-postgres
    restart: unless-stopped
    environment:
      POSTGRES_USER: mmuser
      POSTGRES_PASSWORD: mmuser-password-change-me
      POSTGRES_DB: mattermost
    volumes:
      - postgres_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U mmuser -d mattermost"]
      interval: 10s
      timeout: 5s
      retries: 5
    networks:
      - mattermost-net

  mattermost:
    image: mattermost/mattermost-team-edition:10.1
    container_name: mattermost-app
    restart: unless-stopped
    depends_on:
      postgres:
        condition: service_healthy
    environment:
      MM_SQLSETTINGS_DRIVERNAME: postgres
      MM_SQLSETTINGS_DATASOURCE: postgres://mmuser:mmuser-password-change-me@mattermost-postgres:5432/mattermost?sslmode=disable&connect_timeout=10
      MM_SERVICESETTINGS_SITEURL: https://chat.tondomaine.com
      MM_SERVICESETTINGS_LISTENADDRESS: :8065
      MM_FILESETTINGS_DIRECTORY: /mattermost/data/
      MM_LOGSETTINGS_FILELOCATION: /mattermost/logs/
    volumes:
      - mattermost_data:/mattermost/data
      - mattermost_logs:/mattermost/logs
      - mattermost_config:/mattermost/config
      - mattermost_plugins:/mattermost/plugins
      - mattermost_client_plugins:/mattermost/client/plugins
    networks:
      - mattermost-net
    ports:
      - "127.0.0.1:8065:8065"

  caddy:
    image: caddy:2-alpine
    container_name: mattermost-caddy
    restart: unless-stopped
    depends_on:
      - mattermost
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile:ro
      - caddy_data:/data
      - caddy_config:/config
    networks:
      - mattermost-net

volumes:
  postgres_data:
  mattermost_data:
  mattermost_logs:
  mattermost_config:
  mattermost_plugins:
  mattermost_client_plugins:
  caddy_data:
  caddy_config:

networks:
  mattermost-net:
    driver: bridge

Quelques points importants :

Configuration du Caddyfile

Dans le même répertoire, crée le fichier Caddyfile :

chat.tondomaine.com {
    reverse_proxy mattermost:8065
    encode gzip zstd
}

Caddy va automatiquement générer et renouveler le certificat SSL via Let’s Encrypt. Si tu préfères utiliser Traefik ou Nginx Proxy Manager, l’adaptation est simple, il suffit de rediriger le trafic vers le port 8065 du conteneur Mattermost.

Premier lancement

Lance la stack :

docker compose up -d

Attends 30 secondes que PostgreSQL initialise la base et que Mattermost démarre. Puis ouvre ton navigateur sur https://chat.tondomaine.com.

Tu vas tomber sur l’écran de configuration initiale. Crée ton compte administrateur, choisis un nom d’équipe et configure les paramètres de base. Ce compte sera le System Admin, garde-le précieusement.

Configuration post-installation recommandée

Une fois connecté, va dans System Console (menu hamburger en haut à gauche > System Console) et applique ces réglages :

Sécurité

Fichiers et stockage

Notifications et intégrations

Les applications mobiles

Mattermost fournit des applications officielles gratuites sur l’App Store et Google Play. Par défaut, elles se connectent aux serveurs cloud Mattermost. Pour ton instance auto-hébergée :

  1. Installe l’app Mattermost
  2. Au premier lancement, tape l’URL de ton serveur : https://chat.tondomaine.com
  3. Connecte-toi avec tes identifiants

Pas besoin de Google Firebase Cloud Messaging (FCM) ou d’Apple Push Notification Service (APNS) pour la base. Les notifications push fonctionnent en mode local, mais elles seront moins instantanées. Pour des notifications push fiables, Mattermost propose un serveur de notification push qu’il faut configurer séparément, ou utiliser le service push gratuit de Mattermost (les données de notification transitent alors par leurs serveurs, sans le contenu des messages).

Sauvegarde de ton instance

Tes données vivent dans deux endroits : la base PostgreSQL et les volumes Mattermost. Pour sauvegarder complètement ton serveur, il te faut les deux.

Dump PostgreSQL :

docker exec mattermost-postgres pg_dump -U mmuser -d mattermost > mattermost-backup-$(date +%F).sql

Volumes Mattermost :

tar czvf mattermost-volumes-$(date +%F).tar.gz /var/lib/docker/volumes/mattermost-docker_mattermost_data/ /var/lib/docker/volumes/mattermost-docker_mattermost_config/

Automatise ça avec un cron quotidien qui pousse les archives vers un stockage distant (S3, rsync, BorgBackup…). Si tu cherches une solution de sauvegarde Docker complète, BorgBackup Docker est un excellent complément à cette stack.

Mise à jour de Mattermost

Mattermost sort une nouvelle version tous les mois environ. Pour mettre à jour :

cd ~/mattermost-docker
docker compose pull mattermost
docker compose up -d mattermost

Le conteneur redémarre avec la nouvelle image. Les migrations de base de données se font automatiquement au démarrage. Fais toujours un backup avant une mise à jour majeure (changement de version majeure, ex: 9.x → 10.x).

Comparaison avec les alternatives open-source

Mattermost n’est pas le seul chat d’équipe auto-hébergé. Voici comment il se compare :

LogicielProtocolePoints fortsPoints faibles
MattermostPropriétaire (API REST/WebSocket)UX proche Slack, facile à déployer, apps mobiles nativesPas de fédération entre serveurs
Element (Matrix)Matrix (fédéré)Fédération, chiffrement E2E, écosystème largePlus complexe à administrer, UX moins polishée
Rocket.ChatPropriétaireTrès configurable, large communautéConsomme plus de RAM, UI moins réactive
ZulipPropriétaireOrganisation par sujets (threads), idéal pour les devsUX spécifique, courbe d’apprentissage

Si tu veux une expérience la plus proche possible de Slack sans fédération, Mattermost est le choix le plus sûr. Si la fédération et le chiffrement de bout en bout sont des impératifs, oriente-toi vers Element/Matrix.

Sécurité avancée

Restreindre l’inscription

Par défaut, n’importe qui avec l’URL peut s’inscrire. Va dans System Console > Authentication > Signup et désactive “Enable Open Server”. Après ça, seul un administrateur peut inviter des utilisateurs.

Authentification à deux facteurs (2FA)

Active le TOTP dans System Console > Authentication > MFA. Chaque utilisateur devra scanner un QR code avec une app comme Aegis ou Google Authenticator.

Rate limiting

Dans System Console > Rate Limiting, configure des limites pour éviter le brute-force sur l’API et les endpoints de connexion.

Fail2Ban (optionnel)

Si tu veux aller plus loin, configure Fail2Ban pour bannir les IPs qui tentent trop de connexions échouées sur l’interface web de Mattermost.

Monitoring

Mattermost expose des métriques Prometheus sur le port 8067 (à activer dans la config). Tu peux les scraper avec Prometheus et les visualiser dans Grafana. Ça te permet de surveiller :

Si tu as déjà une stack Grafana Prometheus Docker, ajoute simplement le endpoint Mattermost à ta configuration Prometheus.

Dépannage rapide

Mattermost ne démarre pas : vérifie que PostgreSQL est bien “healthy” (docker compose ps) et que le mot de passe dans MM_SQLSETTINGS_DATASOURCE correspond à celui de PostgreSQL.

Erreur “Site URL must be set” : assure-toi que MM_SERVICESETTINGS_SITEURL contient bien https:// avec ton domaine.

Les uploads de fichiers échouent : vérifie les permissions du volume mattermost_data. Le conteneur tourne avec l’UID 2000 par défaut.

Les apps mobiles ne se connectent pas : ton certificat SSL doit être valide (pas de self-signed). Caddy gère ça, mais vérifie que le DNS pointe bien vers ton serveur.

Conclusion

Déployer Mattermost avec Docker, c’est récupérer la maîtrise totale de la messagerie de ton équipe. Pas de factures surprises, pas de clauses de confidentialité opaques, pas de limitation arbitraire sur l’historique. En une quinzaine de minutes, tu montes un Slack-like open-source sur ton propre serveur, avec PostgreSQL pour la base, Caddy pour le HTTPS et Docker pour orchestrer le tout. C’est exactement ce que l’auto-hébergement devrait être : simple, fiable et sous ton contrôle.

Next
Grafana Prometheus Docker : monitoring pro pour 0€