Browse Source

Draft : Matrix

master
Heuzef 8 months ago
parent
commit
a400eccbd2
7 changed files with 415 additions and 66 deletions
  1. +415
    -66
      content/articles/2023/matrix.md
  2. BIN
      content/assets/matrix_exemple_1.png
  3. BIN
      content/assets/matrix_exemple_2.png
  4. BIN
      content/assets/matrix_exemple_3.png
  5. BIN
      content/assets/matrix_exemple_4.png
  6. BIN
      content/assets/matrix_exemple_5.png
  7. BIN
      content/assets/matrix_exemple_6.png

+ 415
- 66
content/articles/2023/matrix.md View File

@@ -1,44 +1,48 @@
Title: Mettre en service sa propre instance de Matrix avec Bridges
Category: Informatique
Tags: autohébergement, web, social, docker, tchat, communication
Date: 2024-03-01
Date: 2024-03-10
Status: draft

Pour ceux qui ne connaisse pas encore Matrix, je le présente succinctement ainsi : c'est un outil messagerie moderne, qui est supérieur technologiquement à toutes les autres solution équivalente (Instagram, WhatsApp, Messenger, Signal, WeChat, Telegram, Discord, etc ...).
Pour ceux qui ne connaissent pas Matrix, je le présente succinctement ainsi : c'est un outil messagerie moderne, qui est supérieure techniquement à toutes les autres solutions équivalentes (Instagram, WhatsApp, Messenger, Signal, WeChat, Telegram, Discord, etc ...).

Mais ce n'est pas tout, en plus d'être très sécurisé, c'est aussi une solution libre, éthique et décentralisée et en constante évolution grâce à une large communautée très impliquée dans cette solution de messagerie utlime que n'importe qui peux utiliser ou auto-héberger.
Mais ce n'est pas tout, en plus d'être très sécurisé, c'est aussi une solution libre, éthique et décentralisée et en constante évolution grâce à une large communauté très impliquée dans cette solution de messagerie ultime en auto-hébergement.

Il n'y a donc absolument aucun argument en faveur des autres platformes (même pour Signal oui oui) et dans un monde idéal l'humanitée entière utiliserais Matrix comme solution unique de communiquation.
Il n'y a donc absolument aucun argument en faveur des autres plateformes (même pour Signal et RocketChat oui oui) et dans un monde idéal l'humanité entière utiliserais Matrix comme solution unique de communication.

J'ajoute que tout bon dirigeant d'entreprise qui utilise une solution de tchat en interne doit forcément déployer Matrix pour sa société, tout autre choix sera fondalement moins pertinant, voir dangereux. Le monopôle de Microsoft avec Teams n'est d'ailleur pas un freins, car il est tous à fait possible d'integrer des solutions de Visio comme [Jitsi](https://meet.jit.si) dans l'instance Matrix. Et une fois que nous avons goûté à l'outil, nous sommes rapidement convaincu.
J'ajoute que tout bon dirigeant d'entreprise qui utilise une solution de tchat en interne devrait déployer Matrix pour sa société, tout autre choix sera finalement moins pertinent, voir dangereux. Le monopôle de Microsoft avec Teams n'est d'ailleurs pas un frein, car il est tout à fait possible d'intégrer des solutions de Visio comme [Jitsi](https://meet.jit.si) dans l'instance Matrix. Et une fois que nous avons goûté à l'outil, nous sommes rapidement convaincus.

![Messenger FR](../../assets/messenger_fr.png)

Maintenant que les présentations sont faite, je vais expliquer dans cette note comment déployer simplement une instance avec Docker et surtout avec des Bridges. Je précise que cette note est co-rédigéré avec [Lucas Assier](https://www.linkedin.com/in/lucasassier), qui à également une expérience fraîche avec Matrix de son côté !
Maintenant que les présentations sont faites, je vais expliquer dans cette note comment déployer simplement une instance avec Docker et surtout avec des Bridges.

Je précise que cette note est co-rédiger avec [Lucas Assier](https://www.linkedin.com/in/lucasassier), qui à également une expérience fraîche avec Matrix de son côté !

Avant de débuter l'aventure, [commencez par créer un compte Matrix](https://app.element.io/#/register). Réserver votre identifiant et profitez-en pour tester Matrix sur les serveurs d'Element.

# Qui utilise Matrix en 2024 ? 🗣

Je dirais, quasiment personne, comme beaucoup d'outil libre, pas de gros marketing derrière. Même [Signal](https://www.signal.org), qui met pourtant les moyens, peine à concurencer ses concurents qui sont pourtant naze au possible, alors autant dire que Matrix n'est pas prêt de percer, mais patience cela arrivera car contrairement au autre, Matrix est pereine dans le temps et sera là encore bien après eux (l'e-mail, xmpp et irc en témoignent). Finalement, les seuls qui ont, en 2024, un interêt à déployer du Matrix, sont les entreprises, associations et organisations qui souhaitent disposer d'un outil de communication en interne. Pour les autres, on y retrouvera majoritairement des Geek élitiste qui ont la chance d'avoir les connaissances et le temps pour maintenir cet outil.
Quasiment personne, comme beaucoup d'outils libre, pas de gros marketing derrière. Même [Signal](https://www.signal.org), qui met pourtant les moyens, peine à concurrencer ses concurents qui sont pourtant nazes au possible, alors autant dire que Matrix n'est pas prêt de percer, mais patience, car contrairement aux autres, Matrix est pérenne dans le temps et sera là encore bien après eux (l'e-mail, xmpp et irc en témoignent).

Finalement, les seuls qui ont un intérêt à déployer Matrix, sont les entreprises, associations et organisations qui souhaitent disposer d'un outil de communication en interne. Pour les autres, on y retrouvera majoritairement des Geek qui ont la chance d'avoir les ressources et le temps pour maintenir cet outil.

# Les Bridges ! 🏗

En plus de pouvoir choisir n'importe quel interface de tchat pour votre Matrix (ce qui est déjà génial), Matrix à donc lancé une idée révolutionaire : **Les bridges** !
En plus de pouvoir [choisir n'importe quel client](https://matrix.org/ecosystem/clients/) (ce qui est déjà génial), Matrix a une fonction révolutionnaire : **Les bridges** !

L'idée est extaorinaire car elle promet récupérer le trafic (donnés et messages) des autres plateformes dans votre instance Matrix, carément !
Elle vous promet de récupérer vos messages des autres plateformes dans votre instance Matrix !

[<i class="fa fa-link"></i> matrix.org/ecosystem/bridges](https://matrix.org/ecosystem/bridges)

Il faut comprendre que les Bridges sont additionnels et heuresement, car il y à baleine sous gravillon, explication dans le chapitre suivant.
Il faut comprendre que les Bridges sont additionnels et heureusement, car il y a baleine sous gravillon, explication dans le chapitre suivant.

# Le piège des Bridges 🚧

Après plusieurs mois d'utilisation des Bridges, je vais être honnête, c'est un calvaire et la maintenance est chronophage au possible. Les Bridges sont essentiellement des prototypes en Alpha et plus nous en ajoutons plus c'est instable, la maintenance n'en devient que plus lourde.
Après plusieurs mois d'utilisation des Bridges, je vais être honnête, c'est un calvaire et la maintenance est chronophage au possible. Les Bridges sont essentiellement des prototypes et plus nous en ajoutons plus c'est le chaos, la maintenance n'en devient que plus lourde.

Chaque Bridge à son lot de galère c'est sans fin, **il faut donc être determiné à y consacrer beaucoup de temps !**
Chaque Bridge à son lot de galère, c'est sans fin, **il faut donc être déterminé à y consacrer beaucoup de temps !**

Autrement, la meilleur alternative que je connaisse est [Element-ONE](https://ems.element.io/element-one), payant et avec seulement trois Bridges, mais c'est un début 😉
Autrement, la meilleure alternative que je connaisse est [Element-ONE](https://ems.element.io/element-one), payant et avec seulement trois Bridges, mais c'est un début 😉

# Déploiement basique avec Docker 🐳

@@ -46,7 +50,7 @@ Si vous êtes à l'aise avec Docker, alors la configuration suivante vous permet

La configuration générale ici est donc d'installer le moteur Synapse avec sa DB Postgres. Avec seulement ceci, vous pourrez bénéficier d'une instance Matrix qui tourne super bien.

Pour tout le reste, ce sont les Bridges, que vous pouvez simplement commenter pour ne pas les déployer dans un premier temps, voir jamais, vu l'enfer que s'est à gérer.
Pour tout le reste, ce sont les Bridges, que vous pouvez simplement commenter pour ne pas les déployer dans un premier temps, voir jamais 😤

## Docker compose file

@@ -239,9 +243,7 @@ Générer le fichier de config Synapse :
docker run -it --rm -v /home/matrix/Synapse/:/data -e SYNAPSE_SERVER_NAME=matrix.domain.tld -e SYNAPSE_REPORT_STATS=no matrixdotorg/synapse:latest generate
```

Ce fichier de configuration sera généré dans **/home/matrix/Synapse/homeserver.yaml**, plutôt simple à comprendre, voici quelques paramètres à modifier celon vos besoins :


Ce fichier de configuration sera généré dans **/home/matrix/Synapse/homeserver.yaml**, plutôt simple à comprendre, voici quelques paramètres à modifier selon vos besoins :

```yaml
max_upload_size: 100M
@@ -258,7 +260,7 @@ app_service_config_files:
- /bridges/whatsapp/data/registration.yaml
```

Chaque fichier de configuration des bridges est similaire, les paramètres récurents à modifier sont les suivants :
Chaque fichier de configuration des bridges est similaire, les paramètres récurrents à modifier sont les suivants :

```yaml
homeserver:
@@ -278,37 +280,35 @@ homeserver:

Maintenant, vous pouvez démarrer toute la tambouille : ``docker compose -f /home/matrix/docker-compose.yml up``

Le premier lancement peu prendre du temps, le temps que les fichiers de configuration et de **registration.yaml** soit générés.

N'anticiper pas leur création, ces derniers doivent être générés par synapse, confirmant que tout fonctionne correctement, enssuite vous pouvez éditer les paramètres, puis finalement relancer les services.
Le premier lancement prend du temps, les fichiers de configuration et de **registration.yaml** doivent être générés par Synapse (n'anticipez pas leur création), confirmant que tout fonctionne correctement, ensuite, vous pouvez éditer les paramètres.

Vous aurrez probablement une erreur de permission sur ces fichiers d'ailleur, corrigez simplement cela :
Vous aurez probablement une erreur de permission sur ces fichiers au lancement, corrigez simplement cela ainsi :

```bash
sudo chmod 644 /home/matrix/bridges/*/data/registration.yaml
```

## Visio-conférence
## Visioconférence

Si vous souhaitez utiliser la visio-conférence, notez bien que cette dernière ne fonctionnera que en local sur votre réseau interne. Pour aller plus loin et profiter pleinement des fonctionnalités de la visio-conférence, il vous faudra mettre en service un serveur TURN : [Configuring a Turn Server - Synapse](https://matrix-org.github.io/synapse/latest/turn-howto.html)
Si vous souhaitez utiliser la visioconférence, notez bien que cette dernière ne fonctionnera qu'en local sur votre réseau interne. Pour aller plus loin et profiter pleinement des fonctionnalités de la visioconférence, il vous faudra mettre en service un serveur TURN : [Configuring a Turn Server - Synapse](https://matrix-org.github.io/synapse/latest/turn-howto.html)

# Mon retour d'expérience sur les différents Bridges

Vous remarquerez que la plupart des Bridges sont déployé via [MAUTRIX](https://docs.mau.fi/bridges/general/docker-setup.html?bridge=telegram&ref=infos.zogg.fr). Ce n'est pas pour rien car la plus grande panoplie est édité par eux et c'est aussi bien souvent les bridges les plus stable.
Vous remarquerez que la plupart des Bridges sont déployées via [MAUTRIX](https://docs.mau.fi/bridges/general/docker-setup.html?bridge=telegram&ref=infos.zogg.fr). Ce n'est pas pour rien, car la plus grande panoplie est éditée par eux et ce sont aussi bien souvent les bridges les plus stables.

Pour rappel, [la liste des Bridges est diffusée sur le site officiel de Matrix](https://matrix.org/ecosystem/bridges/).
Pour rappel [la liste des Bridges est diffusée sur le site officiel de Matrix](https://matrix.org/ecosystem/bridges/).

De façon général, la logique d'ajout d'un bridge est toujours la même :
De façon générale, la logique d'ajout d'un bridge est toujours la même :

1. Execution du bridge.
1. Exécution du bridge

2. Depuis votre client Matrix préféré, rechercher le bot du bridge pour commencer une discution avec lui.
2. Depuis votre client Matrix préféré, rechercher le bot du bridge pour commencer une discussion avec lui

3. Dans le canal de discution avec le bot taper ``help`` pour afficher les actions possibles.
3. Dans le canal de discussion avec le bot taper ``help`` pour afficher les actions possibles

## Signal

Le Bridge de Signal est un peu lourd à mettre en place car il réclame une DB à part (ce que je vous conseil vivement de faire pour les performances). Après cela, il tourne plutôt bien !
Le Bridge de Signal est un peu lourd à mettre en place, car il réclame une DB à part (ce que je vous conseille vivement de faire pour les performances).

1. Inviter @signalbot
2. Enregistrez votre téléphone ``register +33000000000``
@@ -320,40 +320,36 @@ Le Bridge de Signal est un peu lourd à mettre en place car il réclame une DB

## Discord

Pour Discord, la première initialisation ne permet que de jongler avec les messagerie privée, vous aurez ensuite besoin de jouer avec les commandes du bridges pour rejoindre les différentes guildes (plus communément appelés "Serveurs Discord" par les moldus) via leur identifiants uniques.

Ensuite, c'est le gros dawa, si vous invitez une guilde assez grose, vous allez vous retrouver avec autant de notification d'invitation à accépter que de catégories ! Bon une fois que c'est validés, vous êtes tranquille, mais faite très attention aux journaux qui vont être générés sur votre serveur, ça va très rapidement remplir l'espace disque s'il y a de l'activité sur vos salons discord !

Pour Discord, la première initialisation ne permet que de jongler avec les messageries privées, vous aurez ensuite besoin de jouer avec les commandes du bridges pour rejoindre les différentes guildes (plus communément appelées "Serveurs Discord" par les Moldus) via leur identifiant unique.

Ensuite, c'est le gros dawa, si vous invitez une guilde assez grosse, vous allez vous retrouver avec autant de notification d'invitation à accepter que de catégories ! Bon une fois que c'est validé, vous êtes tranquille, mais faite très attention aux journaux qui vont être générés sur votre serveur, ça va très rapidement remplir l'espace disque s'il y a de l'activité sur vos salons Discord !

1. Inviter @discordbot

2. Sur l'app mobile : *paramètres de l'app > "Scanner le QR code"*
2. Sur l'application mobile : *paramètres de l'app > "Scanner le QR code"*

3. Envoyer la commande au bot : ``login-qr``

4. La commande ``guilds status`` permet d'afficher les différents "Serveurs Discord"



## WhatsApp

Alors WhatsApp, pour faire simple, dispose d'une sécuritée très agréable qui consite à déconnecter tous vos périphériques tiers après une semaine, super ...
Alors WhatsApp, pour faire simple, dispose d'une sécurité très agréable qui consiste à déconnecter tous vos périphériques tiers après une semaine, super ...

Cela concerne donc également votre Bridge qu'il vous faudra reconnecter avec un QRCode toute les semaines. Voila voila ... 👌

1. Inviter @whatsappbot
2. Sur l'app mobile : *paramètres de l'app > "Scanner le QR QR"*
2. Sur l'application mobile : *paramètres de l'app > "Scanner le QR QR"*
3. Envoyer la commande au bot : ``login``

## Facebook et Instagram

Dans le même type de flood absurde que discord, vous aller recevoir une notif d'invite à accépter pour chaque personne ... J'espère pour vous que vous êtes un associal avec peu d'amis sur ces plateformes, sinon vous aller user votre souris à accépter des centaines d'invitations.
A et un conseil, tester bien vos volumes docker, le redémarrage du bridge à tendance à tout remettre à zéro, histoire de vous pousser au sucide une bonne fois pour toute 😖
Dans le même type de flood absurde que Discord, vous allez recevoir une notification d'invitation à accepter pour chaque personne ... J'espère pour vous que vous êtes un asocial avec peu d'amis sur ces plateformes, sinon vous aller user votre souris à accepter des centaines d'invitations une par une.
Un conseil, tester bien vos volumes docker, le redémarrage du Bridge à tendance à tout remettre à zéro, histoire de vous pousser au suicide une bonne fois pour toutes 😖

## Telegram

Un peu plus de difficulté à mettre en place le bridge Télégram, le bot étant encore en Alpha protoype au moment de mon test, mais enssuite, fonctionne correctement.
Un peu plus difficile à mettre en place, le bot étant encore en prototype au moment de mon test, mais ensuite, fonctionne correctement.

Sur la configuration, il est nécessaire d'ajouter une clef d'API récupérable sur : https://my.telegram.org/apps

@@ -363,33 +359,29 @@ App api_hash: 00000000000000000000000000000000
```

1. Inviter @telegrambot
2. Sur l'app mobile : *paramètres de l'app > "Scanner le code QR"*
2. Sur l'application mobile : *paramètres de l'app > "Scanner le code QR"*
3. Envoyer la commande au bot : ``login-qr``

## WeChat

La palme d'or de la torture reviens à nos amis Chinois avec leur messagerie abominable.
La palme d'or de la torture revient à nos amis Chinois avec leur messagerie abominable.

Créé par un nerd Chinois répondant au doux nom de [lxduo](https://github.com/duo/matrix-wechat-docker), ce dernier probablement considéré par un teroriste par le gouvernement chinois, à eu la patience de mettre au monde un Brige capable de s'accoupler avec cette horreur de WeChat.

Ce qui donne naissance à une terrible usine à Gaz qui vous servira d'hote, qui vous faudra accompagner d'autant usine à gaz supplémentaire que vous souhaitez ajouter de compte WeChat ... Le gros délire en terme de consomation de ressource 😭.

Bon dans mon cas, [je n'ai même pas réussis à le faire tomber en marche](https://github.com/duo/matrix-wechat-docker/issues/2) et à vrais dire, j'ai surement été banni par le gouvernement Chinois de leur app car impossible de me créer un compte, j'ai donc rennoncé.
Bon je prévois un voyage en Chine en 2024, je vais en profiter pour me créer un compte en lousdé sur place, je ferais peut-être un article à ce sujet un jour si c'est croustillant.
Créé par un nerd Chinois répondant au doux nom de [lxduo](https://github.com/duo/matrix-wechat-docker), ce dernier probablement considéré par un terroriste par le gouvernement chinois, a eu la patience de mettre au monde un Bridge capable de s'accoupler avec cette horreur de WeChat.

Ce qui donne naissance à une terrible usine à Gaz qui vous servira d'hôte, qui vous faudra accompagner d'autant d'usine à gaz supplémentaire que vous souhaitez ajouter de compte WeChat ... Le gros délire en termes de consommation de ressource 😭.

Bon dans mon cas [je n'ai même pas réussi à le faire tomber en marche](https://github.com/duo/matrix-wechat-docker/issues/2) et à vrai dire, j'ai sûrement été banni par le gouvernement Chinois de leur application car impossible de me créer un compte, j'ai donc renoncé.
Je prévois un voyage en Chine en 2024, je vais en profiter pour me créer un compte en lousdé avec un numéro sur place, je ferais peut-être un article à ce sujet un jour si c'est croustillant.

1. Inviter @wechatbot
2. Sur l'app mobile : *paramètres de l'app > "Scanner le code QR"*
2. Sur l'application mobile : *paramètres de l'app > "Scanner le code QR"*
3. Envoyer la commande au bot : ``login`` pour tenter de détecter l'agent WeChat



## SMS

En bonus, j'ai tenté l'utilisation de [SmsMatrix](https://f-droid.org/en/packages/eu.droogers.smsmatrix/), une app tiers qui peux tourner avec un bridg, j'ai fait tomber en marche le machin ainsi :
En bonus, j'ai tenté l'utilisation de [SmsMatrix](https://f-droid.org/en/packages/eu.droogers.smsmatrix/), une application Android qui peut fonctionner avec un Bridge, j'ai fait tomber en marche le machin ainsi :

S'authentifier sur le compte **@smsbot:matrix.domain.tld** et inviter son compte utilisateur pour créer un canal de discution.
S'authentifier sur le compte **@smsbot:matrix.domain.tld** et inviter son compte utilisateur pour créer un canal de discussion.
Après autorisation, installer SmsMatrix sur votre téléphone :

```
@@ -402,29 +394,386 @@ Devicename : <NOM-DU-TEL>

Il suffit ensuite de recevoir un SMS pour initialiser une conversation.

Attention, cette solution est crade, car si vous commencez à vouloir partager ce bridge avec d'autres utilisateurs, en plus de devoir vous partager le mot de passe du compte @smsbot, cela va mettre un sacré bazar pour qui envoi/reçoi les sms ...

Préférez plutôt une solution plus complexe comme [mautrix-gmessages](https://github.com/mautrix/gmessages) qui fonctionnera avec le client SMS natif d'Android.

Attention, cette solution est crade car si vous commencez à vouloir partager ce bridge avec d'autre utilisateur, en plus de devoir vous partager le mot de passe du compte @smsbot, cela va mettre un sacré merdier dans qui envoi/reçoi les sms ...
# Conclusion

Préférez plutôt une solution plus complexe comme [mautrix-gmessages](https://github.com/mautrix/gmessages) qui fonctionnera avec le client SMS natif d'Android.
- Matrix, c'est le top du top de la messagerie. Tant sur l'aspect technique qu'éthique.

- Quasiment personne ne connais et n'utilise ça dans le monde pro et encore moins ailleurs.

- La configuration d'un serveur TURN supplémentaire est nécessaire si vous souhaitez profiter de la Visioconférence.

# Conclusion
- La configuration des Bridges est très chronophage et instable.

C'est tout pour moi 😉 je vous relais maintenant les notes de mon ami [Lucas Assier](https://www.linkedin.com/in/lucasassier), qui souhaite également partager son expérience avec Matrix.
Sans aller aussi loin que moi sur la quantité de Bridge testés, il a cependant abordé le Double Puppetting, très intéressant pour profiter pleinement des Bridges.

----

L'article ci-dessous, rédigé par [Lucas Assier](https://www.linkedin.com/in/lucasassier), date de Septembre 2023.

----

# Pourquoi Matrix

À cela plusieurs raisons et cas d'usages :

- En premier, les communications sont chiffrées, dans la mesure du possible, par design, ce qui permet de discuter avec des amis de sujets sensibles sans avoir à se soucier de voir nos communications et pièces jointes sur un CDN random (N'est-ce pas Discord ?).

- En second, le système de fédération : un utilisateur d'un serveur peut communiquer sur un serveur différent de manière transparente. J'ai pu voir cela l'an dernier sur l'instance de visioconférence de la Fosdem qui n'est autre qu'une instance Matrix avec un plugin jitsi

- Le système de bridges : Le protocole de serveur Matrix a été pensé pour inclure un système de "passerelles" permettant de lier un service quelconque a Matrix. C'est notamment ce système qui m'a poussé à passer le pas et à déployer ma propre instance Matrix.

# Terminologie

## Provider

Matrix, c'est un peu comme le système de mails, il faut un fournisseur ou **provider** pour pouvoir communiquer. Pour cela, un **homeserver** va leur donner un compte, exemple :

![Matrix Exemple 1](../../assets/matrix_exemple_1.png)

## Homeserver

Un **homeserver** est un serveur Matrix (Synapse, Conduit, etc ...).

Il est lié a un seul domaine qui n'est pas voué a changer.
Les comptes générés via les **homeserver** sont en deux parties comme suit :

`@user@homeserver.tld`

Pour reprendre l'exemple ci-dessus, cela donnerait :

![Matrix Exemple 2](../../assets/matrix_exemple_2.png)

## AppService

C'est ce que l'on peut comparer à un bot standard.
Les AppServices doivent être enregistrés dans la configuration du serveur, il n'est pas possible de les enregistrers à la volée.

## Bridges

Un bridge est un système permettant de connecter un groupement Matrix à une autre plateforme, par exemple, Slack ou encore Signal.

Les bridges fonctionnent de deux manières :

1. Dans Matrix, les utilisateurs des autres plateformes sont vus en tant que "*ghost*".

2. Dans l'autre plateforme, les comptes utilisateurs de Matrix sont appelés des "*puppets*".

Exemple :

![Matrix Exemple 3](../../assets/matrix_exemple_3.png)

Les spécifications matrix sont complexe mais entièrement documentées [ici](https://spec.matrix.org/latest/).

# Choisir son serveur

Aujourd'hui, Matrix possède plusieurs implémentations serveurs plus ou moins aboutis.
Il y en a trois qui en ont retenu mon attention :

1. **Synapse** - la référence originale en python. C'est le seul projet de serveur marqué comme stable.

2. **Conduit** - une implémentation en *RUST* du protocole serveur de Matrix mais avec une empreinte mémoire plus faible.

3. **Dendrite** - la même volontée que Conduit, mais en *GO*. Certaines fonctions sont manquantes, la priorité étant l'implémentation des fonctions pour les instances single user.

# Monter son homeserver

## Préparations

Pour des raisons pratiques, nous allons assumer que le serveur retenu est Synapse (car officiel et implémente l'intégralité des fonctionnalités).
En premier lieu, il faut réfléchir à un nom de domaine, c'est très important car il est
impossible de le changer une fois le serveur installé.

Ensuite, il y a plusieurs manières d'installer un serveur Synapse :

1. Via un package manager

2. Via Ansible

3. Via Docker

Ici, nous verrons via Docker.

## La stack technique de la démo

### Un reverse-proxy

Initialement, le projet est déployé dans une colocation de homelabs derrière un seul et même port.

Par conséquent, nous passons par Caddy afin de faire le routage en reverse-proxy.

Cela, peut-être contraignant, mais il est quand même nécessaire d'en avoir un avec Synapse, notamment quand on va vouloir faire de la délégation.

### Une instance Docker

Pour héberger le serveur ainsi que les bridges, le serveur et les bridges seront en deux stacks Docker-compose séparés.

## Déployer le serveyr Synapse

```yaml
version: '3'
services:
synapse:
container_name: synapse
image: docker.io/matrixdotorg/synapse:latest
restart: unless-stopped
environment:
- SYNAPSE_CONFIG_PATH=/data/homeserver.yaml
volumes:
- synapse-data:/data
depends_on:
- synapse-db
ports:
- 8448:8448/tcp # Federation Traffic
- 8008:8008/tcp # Client Traffic
networks:
- default
- bridgenet

synapse-db:
container_name: synapse-pgsql
image: docker.io/postgres:12-alpine
environment:
- POSTGRES_USER=synapse
            - POSTGRES_PASSWORD=changeme!
            - POSTGRES_DB=synapse
            - POSTGRES_INITDB_ARGS=--encoding=UTF-8 --lc-collate=C --lc-ctype=C
        volumes:
            - synapse-pgsql:/var/lib/postgresql/data
        volumes:
            synapse-data: {}
            synapse-pgsql: {}
        networks:
            bridgenet:
                name: synapse_bridges
                external: true
```

> À noter, nous avons un réseau Docker dédié a l'intercommunication entre Synapse et les Bridges installés comme suit :
>
> `docker network create synapse_bridges`

En premier lieu, il faudra lancer Synapse pour lui dire de générer la configuration :

`docker-compose run --rm -e SYNAPSE_SERVER_NAME=matrix.kestrel.ovh -e
SYNAPSE_REPORT_STATS=no synapse generate`

En suivant, il faudra éditer la configuration `homeserver.yaml` dans le volume synapse-data.

Il sera important de regarder les options de configuration, notamment la configuration de la connection à la base Postgres, le nom du serveur (*server name*), que les serveurs de clés de confiance ainsi que l'option pour autoriser la création de comptes ou non.

Une fois cela fait, nous pouvons démarrer la stack via `docker compose up`.

> On pourrait faire en background mais comme nous en sommes à la phase de lancement initiale, je préfère laisser en premier plan afin de voir si l'application lance des erreurs ou non.

## Configurer le reverse proxy et setup une délégation

Par délégation, nous sous-entendons relayer le trafic Matrix a une entité dans un sous-domaine ou ailleurs.

Ici, mon server name est `kestrel.ovh`, pour autant, le trafic est délégués vers `matrix.kestrel.ovh` via la configuration suivante :

```json
kestrel.ovh {
       header /.well-known/matrix/* Content-Type application/json
       header /.well-known/matrix/* Access-Control-Allow-Origin *
       respond /.well-known/matrix/server `{"m.server":
"matrix.kestrel.ovh:443"}`
       respond /.well-known/matrix/client `{"m.homeserver":
{"base_url":"https://matrix.kestrel.ovh"}}`
}
matrix.kestrel.ovh {
       reverse_proxy /_matrix/* 192.168.1.102:8008
       reverse_proxy /_synapse/client/* 192.168.1.102:8008
}
```

Il existe [une documentation](https://matrix-org.github.io/synapse/latest/reverse_proxy.html) sur la configuration de divers reverse-proxy pour Matrix, avec ou sans délégation.
Pour tester si la configuration est correcte, on peut utiliser [le testeur de fédération](https://federationtester.matrix.org) et voir si le trafic de fédération est OK.

## Créer des comptes

Pour créer des comptes, il est possible de passer via une interface client Matrix standard tel que [Element](https://app.element.io/#/register).

Pour les serveurs qui n'acceptent pas la création de comptes, il est possible de le faire via le conteneur Synapse via la commande suivante :

`docker exec -it synapse register_new_matrix_user http://localhost:8008 -c
/data/homeserver.yaml`

* Matrix c'est le top du top. Les autres alternatives font pâles figure. Tant sur l'aspect technique que éthique.
Synapse demandera quelques questions puis créera les comptes.

* Quasiment personne ne connais et n'utilise ça dans le monde pro et encore moins ailleur.
Personnellement, j'ai opté pour un compte admin dont je ne me sers uniquement pour l'administration du serveur ainsi qu'un utilisateur standard pour mon usage quotidien.

* La configuration d'un serveur TURN supplémentaire est nécessaire si vous souhaiter profiter de la Visio-conférence.
À ce stade, nous avons une instance Matrix fonctionnelle, avec un compte. Nous pouvons donc nous pencher sur l'ajout de Bridges !

# Ajouter un Bridge

> Le déploiement d'un Bridge peut être long et fastidieux, par conséquent, nous ne verrons que pour le Bridge Mautrix-signald

## Docker Compose 2: Electric Boogaloo

```yaml
version: "3.7"

services:
mautrix-signal:
container_name: mautrix-signal
image: dock.mau.dev/mautrix/signal
restart: unless-stopped
volumes:
- mautrix-signal-data:/data
- mautrix-signal-signald:/signald
depends_on:
- signald
networks:
- default
- bridgenet # Communication w/ Synapse

signald:
container_name: signald
image: docker.io/signald/signald
restart: unless-stopped
volumes:
- mautrix-signal-signald:/signald

mau-signal-db:
container_name: mau-signal-db
image: postgres:13-alpine
restart: unless-stopped
environment:
POSTGRES_USER: mautrixsignal
POSTGRES_DATABASE: mautrixsignal
POSTGRES_PASSWORD: changeme!
volumes:
- mautrix-signal-db:/var/lib/postgresql/data

volumes:
mautrix-signal-data: {}
mautrix-signal-signald: {}
mautrix-signal-db: {}

networks:
bridgenet:
name: synapse_bridges
external: true
```

Ici, pas énormément de choses à dire, on lance la DB, puis signald (en vérifiant que cela ne crash pas). Ensuite, on lance le Bridge qui crée un fichier de configuration.

Il faudra remplir le fichier avec les informations comme :

* L'adresse du serveur Synapse
* L'adresse du conteneur du bridge (Pour que Synapse relaie nos messages)
* Désactiver le manhole
* Régler les permissions
* Connecter la base postgres

## Enregistrer une AppService dans Synapse

Une fois cela fait, on relance le conteneur. Si tout est correct, celui-ci va générer un fichier `appservice.yaml`

Il faudra le copier dans le volume du conteneur synapse et le référencer comme suit dans la configuration `homeserver.yaml`

```yaml
# NB: Il est pas necessaire de faire de sous-dossiers appservices mais c'est
plus sympa.
app_service_config_files:
    - /data/appservices/mau-signal.yaml
    - /data/appservices/mau-instagram.yaml
    - /data/appservices/mau-slack.yaml
```

* La configuration des Bridges est très chonophage et instable.
Une fois ceci fait, relancer Synapse ainsi que le Bridge. Si tout fonctionne, le doit être joignable via message privé à l'adresse **@signalbot:homeserver.tld**

## Se connecter à Signal

Pour se connecter à Signal, il faudra ouvrir un canal avec le bot, puis choisir une des deux options possibles :

C'est tout pour moi 😉 je vous relais maintenant les notes de mon amis [Lucas Assier](https://www.linkedin.com/in/lucasassier), qui souhaite également partager son expérience avec Matrix.
Sans aller aussi loin que moi sur la quantité de Bridge testés, il a cependant abordé le Double Puppetting, très interessant pour profiter pleinement des Bridges.
`**link** [device name] - Link the bridge as a secondary device`
`**register** <phone> - Sign into Signal as the primary device`

Malheureusement, j'ai eu une erreur quand j'ai voulu "register"" donc je suis passé via "link", le bot fournit un QR Code permettant de s'authentifier.

Une fois l'authentification effectuée, vous recevrez tout un tas d'invitations de messages privés et de canaux.

Ceux-ci sont gérés via le bot et font le lien avec toutes les conversations présentes sur Signal.

Par exemple, ici, un canal avec des amis :

![Matrix Exemple 4](../../assets/matrix_exemple_4.png)

> À noter, le bot est présent dans chaque room afin de faire le lien. Il est possible de lui parler directement via `!signal` ou via MP.
> En gris, tous les utilisateurs ayant le tag `(signal)` sont des "**ghosts**" contrôlés par le bot.

> Il est bon de noter aussi que nous ne sommes pas administrateur du canal mais que les admins du groupe Signal le sont par extension sur ce canal Matrix.

## Le Double Puppetting

Sur la capture d'écran précédente, nous avons pu voir que je possède deux comptes, un compte Matrix et un compte Signal.

On pourrait dire que l'on s'en fiche dans certains cas mais cela pose problème lorsque les gens veulent me mentionner.

Exemple ici :

![Matrix Exemple 5](../../assets/matrix_exemple_5.png)

Ici on me mentionne pour un événement. Problème, le Bridge mentionne mon compte Signal et non moi-même.
Pour palier à cela, les développeurs ont ajouté une fonction permettant de remplacer le compte de la plateforme en question (Ici, *Lucas(Signal)* ) par mon propre compte Matrix.

Pour ce faire, il est possible de passer par deux manières de faire :

* A la main via des "access tokens (à coup de `curl` puis via des MP aux différents bots de Bridge).

* Automatiquement via [ce plugin](https://github.com/devture/matrix-synapse-shared-secret-auth). Pour des raisons évidentes, nous allons passer par le plugin.

### Installer le module Shared Secret Authenticator

Pour installer le module, il faudra cloner depuis le dépôt GIT, le fichier python, puis l'ajouter aux volumes du conteneur synapse.

Cloner le dépôt : `git clone https://github.com/devture/matrix-synapse-shared-secret-auth`

Puis l'ajouter en tant que volume :

```yaml
[...]
volumes:
- synapse-data:/data
- /opt/matrix-synapse-shared-secret-auth/shared_secret_authenticator.py:/usr/local/lib/python3.11/site-packages/shared_secret_authenticator.py
```

Générer un secret : `pwgen -s 128 1`

Puis, dans le fichier `homeserver.yaml`, saisir les informations recensées dans le GIT croisées avec [la documentation de Mautrix](https://docs.mau.fi/bridges/general/double-puppeting.html).

```yaml
modules:
- module: shared_secret_authenticator.SharedSecretAuthProvider
config:
shared_secret: "YOUR_SHARED_SECRET_GOES_HERE"
m_login_password_support_enabled: true
com_devture_shared_secret_auth_support_enabled: false
```

Une fois cela fait et le conteneur Synapse relancé, dans la configuration du Bridge Signal, remplacer :

```yaml
double_puppet_server_map:
example.com: https://example.com
login_shared_secret_map:
example.com:
```

```yaml
double_puppet_server_map:
kestrel.ovh: http://synapse:8008
login_shared_secret_map:
kestrel.ovh: YOUR_SHARED_SECRET_GOES_HERE
```

Ceci fait, relancer le conteneur Signal.
Si cela fonctionne correctement, le compte en trop doit disparaître et les mentions envers ce compte sont maintenant redirigés vers l'utilisateur Matrix correct.

---
![Matrix Exemple 6](../../assets/matrix_exemple_6.png)

BIN
content/assets/matrix_exemple_1.png View File

Before After
Width: 472  |  Height: 280  |  Size: 8.3 KiB

BIN
content/assets/matrix_exemple_2.png View File

Before After
Width: 588  |  Height: 280  |  Size: 9.3 KiB

BIN
content/assets/matrix_exemple_3.png View File

Before After
Width: 485  |  Height: 298  |  Size: 20 KiB

BIN
content/assets/matrix_exemple_4.png View File

Before After
Width: 415  |  Height: 573  |  Size: 44 KiB

BIN
content/assets/matrix_exemple_5.png View File

Before After
Width: 705  |  Height: 138  |  Size: 18 KiB

BIN
content/assets/matrix_exemple_6.png View File

Before After
Width: 421  |  Height: 182  |  Size: 24 KiB

Loading…
Cancel
Save