Mise en place d’un serveur Matrix avec Synapse

Bon, pour le fun j’ai réinstallé une VM avec un serveur Matrix avec Synapse. Un rappel pour ceux du fond, Matrix est un protocole de tchat décentralisé (ça ressemble à IRC). Perso, je trouve que c’est une usine à gaz comparé a XMPP (Jabber) mais bon … La procédure est pompé sur la documentation officiel qui fonctionne (oui oui…).
Apres avoir installer une VM dans les règles de l’art (oué bon j’ai chié un template LXC Ubuntu 24.04 sur mon Proxmox, voila).
1. Installation de Synapse-Matrix
Installation de ce qu’il faut:
sudo apt install -y lsb-release wget apt-transport-https
Récupération des clefs nécessaire a l’accès au dépôt de paquets Synapse:
sudo wget -O /usr/share/keyrings/matrix-org-archive-keyring.gpg https://packages.matrix.org/debian/matrix-org-archive-keyring.gpg
Ajout du dépôt de paquets a APT:
echo "deb [signed-by=/usr/share/keyrings/matrix-org-archive-keyring.gpg] https://packages.matrix.org/debian/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/matrix-org.list
On met a jour APT:
sudo apt update
On installe Synapse:
sudo apt install matrix-synapse-py3
Bon, Synapse est installé et en principe il devrait déjà pouvoir fonctionner comme ça. MAIS il tourne avec une base sqlite et c’est casse-gueul. En gros ce système de BDD est tellement lent que c’est quasi inutilisable en l’etat, uniquement pour TEST. Du coup on va mettre en place une BDD plus performante.
2. PostgreSQL
Installation PostgreSQL:
sudo apt install postgresql
Ensuite on configure la bdd, on switch sur l’user « postgres »:
sudo -u postgres bash
Creation de l’user dans la BDD, « synapse_user » est a changer :
createuser --pwprompt synapse_user
Creation de la BDD avec des droits sur l’utilisateur créer précédemment :
createdb --encoding=UTF8 --locale=C --template=template0 --owner=synapse_user synapse
« synapse » en fin de ligne est le nom de la BDD, a modifier selon vos besoins.
Ensuite, on va éditer le fichier de config « /etc/matrix-synapse/homeserver.yaml » et on va remplacer:
database: name: sqlite3 args: database: /var/lib/matrix-synapse/homeserver.db
par :
database:
name: psycopg2
args:
user: <user>
password: <pass>
dbname: <db>
host: <host>
cp_min: 5
cp_max: 10
Les valeurs sont a modifier selon les besoins bien entendu !! (en host , mettez « localhost » si tout est sur la même machine bande de nOOb). On relance Synapse et ont prie le seigneur pour que ça passe ( « service matrix-synapse restart » , toujours pour ceux du fond.). Si c’est passé, il reste un dernier truc, le reverse proxy qui gère le HTTPS (sinon, pas de fédération avec les autres serveurs).
3. Le reverse proxy de ses morts !!!! (NGINX)
Moi je passe par une machine (VM) différente qui me sert de reverse proxy NGINX « globale » mais la config reste identique. Il faut juste adapté.
Si vous avez pas installer certbot, installez le (Certificat let’s encrypt) :
apt install -y certbot python3-certbot-nginx
Ensuite, pour créer le certificat dans un premier temps, je met un « template » de reverse proxy par défaut (dans « /etc/nginx/sites-enabled » ) genre :
server{ # Port listen listen 80; server_name matrix.ton_domaine.fuck; # Open block for process forward request location /{ # Server where traffic is transferred proxy_pass http://IP_SYNAPSE:8008; # Include file proxy_params with general param include proxy_params; } }
« IP_SYNAPSE » peut être « localhost » si tout est sur la même machine/VM.
Et je crée le certificat avec :
sudo certbot --nginx
Et quand le certificat est crée, je retourne dans le fichier de config du reverse et je le met au propre, ça devrait ressemblé a ça grosso merdo :
server{ # For the federation port listen 8448 ssl default_server; listen [::]:8448 ssl default_server; server_name matrix.ton_domaine.fuck; location /{ # note: do not add a path (even a single /) after the port in `proxy_pass`, # otherwise nginx will canonicalise the URI and cause signature verification # errors. proxy_pass http://IP_SYNAPSE:8008; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Host $host:$server_port; # Nginx by default only allows file uploads up to 1M in size # Increase client_max_body_size to match max_upload_size defined in homeserver.yaml client_max_body_size 50M; # Synapse responses may be chunked, which is an HTTP/1.1 feature. proxy_http_version 1.1; } listen 443 ssl; # managed by Certbot ssl_certificate /etc/letsencrypt/live/matrix.ton_domaine.fuck/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/matrix.ton_domaine.fuck/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot }
On redémarre NGINX ( « service nginx restart ») et on remet un cierge pour le seigneur pour que ça passe. Pour info, le port 8448 c’est pour la fédération avec les autres serveurs.
De base, la création d’utilisateur n’est pas activé, on doit donc passer par la commande pour crée un utilisateur :
register_new_matrix_user -c homeserver.yaml http://localhost:8008
Il pose des questions, tu y réponds et voila. Si tout va bien, ton serveur Matrix fonctionne (ou pas), il suffit de t’y connecter avec un client genre : app.element.io
Commentaires, pouce bleu et la cloche!