Pourquoi héberger son propre serveur Matrix
Les messageries d'équipe classiques — Slack, Teams, et même leurs alternatives auto-hébergées — partagent une limite : on n'y parle qu'entre membres du même serveur. Matrix renverse cela. C'est un protocole FÉDÉRÉ : votre serveur dialogue avec tous les autres serveurs Matrix du monde, exactement comme une adresse e-mail joint n'importe quel autre domaine. Vos utilisateurs gardent un identifiant à vous (@alice:votre-domaine.com) tout en discutant avec des interlocuteurs hébergés ailleurs. À cela s'ajoute le chiffrement de bout en bout, activable salon par salon : même vous, administrateur du serveur, ne pouvez pas lire le contenu d'un salon chiffré. C'est le point qui distingue Matrix d'une messagerie simplement auto-hébergée — la souveraineté ne repose pas sur la confiance envers l'hébergeur, mais sur la cryptographie.
Ce que vous gagnez avec un Matrix auto-hébergé
- Fédération : vos utilisateurs joignent ceux de n'importe quel autre serveur Matrix, sans compte supplémentaire.
- Chiffrement de bout en bout par salon, indépendant de la confiance envers l'hébergeur.
- Identifiants à votre nom de domaine, qui deviennent une adresse durable.
- Element Web self-hosted : l'interface reste sous votre contrôle, sans dépendance à app.element.io.
- Applications officielles Element sur mobile, bureau et web — toutes pointées sur votre serveur.
- Historique et fichiers stockés sur votre machine, sans limite de rétention imposée.
- Passerelles possibles vers d'autres réseaux (Telegram, Signal, IRC, XMPP…) via des bridges.
- Absence de collecte publicitaire ou de profilage : les métadonnées restent dans votre périmètre.
Element self-hosted vs. app.element.io : la différence concrète
Element Web est une application web open source — vous pouvez l'héberger sur votre propre domaine au lieu d'utiliser app.element.io. Ce choix est souvent négligé, mais il compte. Quand vos utilisateurs ouvrent app.element.io, leur navigateur charge du JavaScript depuis les serveurs d'Element HQ : cela n'affecte pas la confidentialité des messages (le chiffrement reste local), mais cela crée une dépendance externe.
Héberger Element Web vous-même — typiquement derrière chat.votre-domaine.com — supprime cette dépendance. Vous maîtrisez la version déployée, vous pouvez personnaliser config.json pour que l'interface soit pré-configurée sur votre homeserver, et vos utilisateurs n'ont qu'une seule URL à retenir.
Point d'attention : Element Web lit config.<domaine>.json AVANT config.json. Si votre configuration n'est pas servie correctement, l'interface s'affiche parfaitement — et connecte vos utilisateurs au serveur public au lieu du vôtre. Vérifiez que les deux fichiers répondent votre configuration avant d'inviter des utilisateurs.
Le point à comprendre AVANT d'installer : le nom de domaine
C'est la particularité de Matrix, et la source d'erreur la plus coûteuse. Le server_name de votre serveur — votre nom de domaine — n'est pas un réglage d'affichage : il est inscrit DANS l'identité de chaque objet que le serveur produit. Chaque identifiant d'utilisateur (@alice:votre-domaine.com), chaque identifiant de salon, chaque événement signé le contient. Le changer après coup ne se fait pas : il faut repartir d'un serveur vierge et recréer les comptes. Choisissez donc le sous-domaine définitif dès l'installation, et attachez-le au moment où vous installez l'application — pas après. Sur ServOrbit, l'installation refuse d'ailleurs volontairement de démarrer si aucun domaine n'est rattaché : mieux vaut un échec immédiat et clair qu'un serveur qu'il faudra refaire une fois les comptes créés.
Prérequis matériels
La pile complète — Synapse, PostgreSQL, Element Web et le reverse proxy — consomme environ 300 Mo au repos, mesure faite sur une installation neuve. Un VPS de 2 Go de RAM et 2 vCPU convient donc largement à une équipe, une association ou une famille.
La consommation dépend surtout des salons PUBLICS que vous rejoignez : Synapse conserve l'historique et l'état de chaque salon fédéré, et rejoindre quelques grands salons communautaires peut faire croître la base de plusieurs gigaoctets. Si c'est votre usage, visez 4 Go de RAM et surveillez l'espace disque.
PostgreSQL est indispensable — Synapse accepte SQLite, mais ne le recommande pas au-delà d'un serveur d'essai. Prévoir aussi un certificat TLS valide : sans HTTPS, la fédération et les applications mobiles refusent de se connecter.
Déployer Matrix avec Docker, PostgreSQL et Element
Choisir et pointer le domaine
Décidez du sous-domaine définitif (par exemple
matrix.votre-domaine.com) et faites-le pointer vers votre VPS par un enregistrement A. C'est ce nom qui deviendra l'identité du serveur. Ajoutez un second sous-domaine pour Element Web si vous souhaitez l'héberger séparément (chat.votre-domaine.com). Les deux enregistrements A doivent être actifs avant de démarrer le conteneur.Générer la configuration et la clé de signature
Le premier démarrage de l'image Synapse génère
homeserver.yamlet surtout la CLÉ DE SIGNATURE du serveur, celle qui authentifie ses événements auprès des autres serveurs. Sauvegardez-la : la perdre revient à perdre l'identité du serveur sur le réseau fédéré. Conservez égalementhomeserver.yamldans votre système de sauvegarde — il contient les secrets partagés entre les composants.Basculer la base sur PostgreSQL
L'image ne sait générer qu'une configuration SQLite. Ajoutez un fichier dans
conf.d/qui redéfinit le blocdatabasevers PostgreSQL — Synapse lit plusieurs--config-pathet les clés répétées écrasent les précédentes. Créez la base avec un collationnementC: Synapse refuse de démarrer sur une base au collationnement différent, et ce choix ne se change pas après création.Placer un reverse proxy devant
Servez Element Web à la racine de
chat.votre-domaine.comet l'API Matrix sous/_matrixet/_synapse/clientsurmatrix.votre-domaine.com, derrière un seul certificat TLS par domaine. Relayez bien les en-têtesUpgradeetConnection: Matrix maintient des connexions longues (WebSocket), sans quoi le temps réel ne fonctionne pas. Augmentez aussiclient_max_body_sizeà au moins 50 Mo pour les transferts de fichiers.Publier la délégation .well-known
Exposez
/.well-known/matrix/serveret/.well-known/matrix/clientsur votre domaine racine. C'est ce qui permet aux autres serveurs et aux applications mobiles de trouver votre homeserver sans configuration manuelle. Vérifiez ensuite sur federationtester.matrix.org : une fédération non vérifiée peut bloquer silencieusement les invitations vers l'extérieur.Configurer Element Web sur VOTRE serveur
Créez un
config.jsonqui pointedefault_server_configvers votre homeserver. Element lit aussiconfig.<domaine>.jsonen priorité : servez les deux via votre reverse proxy. Testez en ouvrant l'interface dans un onglet privé — sans cookie ni session — et vérifiez que l'écran de connexion propose bien votre domaine par défaut, pas matrix.org.Créer le premier compte administrateur
Synapse ne crée aucun compte tout seul et les inscriptions doivent rester fermées. Créez le compte administrateur avec
register_new_matrix_user, puis connectez-vous surhttps://chat.votre-domaine.com. Sur ServOrbit, ce compteadminest créé automatiquement au premier démarrage et son mot de passe généré est lisible dans votre espace client.
Administrer Synapse après l'installation
Synapse expose une API d'administration sous /_synapse/admin/v1 — réservée aux comptes marqués admin. Via cette API, vous pouvez désactiver un compte, purger l'historique d'un salon, forcer la déconnexion de tous les appareils d'un utilisateur ou consulter les statistiques de fédération.
Synapse Admin (interface web open source, déployable en conteneur séparé) repose sur cette même API et offre une vue graphique : liste des utilisateurs, salons, appareils enregistrés et taille de la base par salon. Pratique pour repérer un salon fédéré qui gonfle la base de plusieurs gigaoctets.
Pour les mises à jour, Synapse publie ses images sur ghcr.io/element-hq/synapse. Vérifiez les notes de release avant chaque mise à jour majeure : certaines migrations de base sont irréversibles, et Synapse documente explicitement les versions minimum requises pour passer d'une branche à l'autre.
Purge de l'historique et maîtrise de l'espace disque
Un serveur fédéré accumule l'historique de tous les salons rejoints — y compris les grands salons publics. Sans purge régulière, la base PostgreSQL peut atteindre plusieurs dizaines de gigaoctets en quelques mois.
Synapse propose deux leviers. La purge d'historique via l'API admin (POST /_synapse/admin/v1/purge_history) supprime les événements antérieurs à une date dans un salon donné — sans affecter les autres salons ni les messages que vous n'avez pas encore lus. La commande synapse_auto_compressor compresse ensuite les groupes de state_groups dans PostgreSQL, ce qui peut diviser la taille de la base par deux ou trois sur un serveur actif depuis plusieurs mois.
Activez aussi gc_thresholds dans homeserver.yaml pour piloter le garbage collector Python de Synapse : sur un serveur fédéré actif, le GC par défaut est rarement optimal pour la mémoire résidente.
Bridges : connecter Matrix à Telegram, Signal et WhatsApp
L'un des avantages distinctifs de Matrix est son écosystème de bridges — des services qui font le lien entre votre homeserver et d'autres réseaux. Matterbridge, Beeper ou les bridges officiels du projet Matrix permettent de relayer des messages entre un salon Matrix et un groupe Telegram, un canal Slack ou une conversation WhatsApp.
Chaque bridge se déploie comme un service supplémentaire (un conteneur supplémentaire dans votre compose.yml) et s'enregistre auprès de Synapse via un fichier registration.yaml. Le bridge reçoit une portion de l'espace des identifiants (@telegram_*:votre-domaine.com) et traduit les messages dans les deux sens.
Pour Telegram, mautrix-telegram est le bridge le plus maintenu. Pour Signal, mautrix-signal. Ces deux bridges exigent un compte sur le réseau cible — pas de lecture sans compte. WhatsApp et Meta Messenger passent par mautrix-meta, qui utilise l'API non officielle : son fonctionnement dépend des décisions de Meta et peut être interrompu.
Matrix / Synapse vs. alternatives de messagerie self-hosted
Faites défiler le tableau
| Critère | Matrix + Synapse | Mattermost | Rocket.Chat |
|---|---|---|---|
| Fédération inter-serveurs | Oui, natif | Non | Non |
| Chiffrement de bout en bout | Oui, par salon | En option (bêta) | Non (transit en clair) |
| Bridges vers d'autres réseaux | Oui (Telegram, Signal, Slack…) | Partiel (Slack) | Partiel |
| Consommation RAM (repos) | ~300 Mo (pile complète) | ~400 Mo | ~500 Mo |
| Client web self-hostable | Element Web (open source) | Oui (inclus) | Oui (inclus) |
| Clients mobiles | Element iOS/Android | Natifs iOS/Android | Natifs iOS/Android |
Fermez les inscriptions, et gardez-les fermées
Un serveur Matrix dont les inscriptions sont ouvertes est rapidement découvert et utilisé comme relais par des tiers : comptes de spam, salons indésirables, et une base qui gonfle sans que vous ayez rien demandé. Laissez enable_registration à false et créez les comptes à la main, ou passez par une authentification externe (SSO, OIDC). Si vous ouvrez les inscriptions, exigez au minimum une vérification par e-mail et activez registration_requires_token.
La documentation officielle
Pour la configuration avancée — workers, bridges, modules d'authentification, purge d'historique — référez-vous à la documentation officielle de Synapse. Ce guide couvre la mise en ligne sur VPS ; la doc amont reste la référence pour les réglages fins et les montées de version majeures.