Synapse

Updated 4 Juin 2020

Matrix

Introduction

Matrix est un protocole libre et gratuit pour une messagerie distribuée en temps réel. Il peut être utilisé pour la messagerie instantanée, les appels audio et vidéo via WebRTC, l'Internet des objets et tout ce qui nécessite une API HTTP standard pour publier et s'abonner à des mises à jour tout en conservant l'historique des communications. Matrix est un réseau fédéré, ou distribué complet, vous permettant de communiquer de manière transparente, de créer des salles partagées pour les utilisateurs sur différents serveurs, ainsi que de passer des appels audio et vidéo.

Il existe actuellement plusieurs serveurs supportés par ce protocole, dont le plus populaire est Synapse.

Préparer un conteneur LXC

Nous conseillons d'installer Synapse dans un conteneur dédié, en le configurant comme décrit dans le manuel.

Installer et configurer PostgreSQL

Installez et configurez PostgreSQL pour l'authentification par les pairs, conformément au manuel. Créez un utilisateur et une base de données tous deux appelés synapse, comme suit :

psql -U postgres

Password for user postgres: 
psql (11.2)
Type "help" for help.

postgres=# create role synapse with login;
CREATE ROLE
postgres=# \password synapse
Enter new password:
Enter it again: 
postgres=# CREATE DATABASE synapse ENCODING 'UTF8' LC_COLLATE='C' LC_CTYPE='C' template=template0 OWNER synapse;
CREATE DATABASE

Installation et configuration de Synapse

Créez l'utilisateur synapse :

useradd -d /var/calculate/synapse synapse

Créez et activez un environnement virtuel pour Python :

su - synapse

python3 -m venv env

echo 'source ~/env/bin/activate' >> ~/.bashrc

source env/bin/activate

Installer Synapse et le module PostgreSQL dans l'environnement virtuel :

pip install --upgrade pip

pip install --upgrade setuptools

pip install matrix-synapse[all]

pip install psycopg2-binary

Créez une configuration Synapse :

python -m synapse.app.homeserver --server-name matrix.example.org --config-path homeserver.yaml --generate-config --report-stats=yes

Quitter la séance utilisateur :

exit

Configurez Synapse pour pouvoir vous connecter à la base de données :

/var/calculate/synapse/homeserver.yaml
...
# Database configuration
database:
  # The database engine name
  name: "psycopg2"
  # Arguments to pass to the engine
  args:
    # Path to the database
    database: synapse
    host: localhost
    user: synapse
    password: "secret"
...

Ajoutez la possibilité de rechercher parmi tous les utilisateurs du serveur :

/var/calculate/synapse/homeserver.yaml
...
# User Directory configuration
#
# 'search_all_users' defines whether to search all users visible to your HS
# when searching the user directory, rather than limiting to users visible
# in public rooms.  Defaults to false.  If you set it True, you'll have to run
# UPDATE user_directory_stream_pos SET stream_id = NULL;
# on your database to tell it to rebuild the user_directory search indexes.
#
user_directory:
   search_all_users: true
...

Si Nginx sera configuré sur un serveur distinct par la suite, vous devez autoriser l'interaction avec Synapse en utilisant une autre interface que celle de bouclage :

/var/calculate/synapse/homeserver.yaml
...
listeners:
  - port: 8008
    tls: false
    bind_addresses: ['0.0.0.0']
    type: http
    x_forwarded: true
...

Obtenir le certificat Let's Encrypt

Obtenez le certificat de domaine matrix.example.org pour Nginx, comme expliqué dans le manuel.

Installer et configurer Nginx

Installez et configurez le serveur Web Nginx comme proxy inverse, en vous référant au manuel. Ajoutez les paramètres suivants pour matrix.example.org:

/etc/nginx/sites-enabled/matrix.conf
server {
    listen 443 ssl;
    server_name matrix.example.org;

    include ssl.conf;
    ssl_certificate /etc/nginx/ssl/matrix.example.org/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/matrix.example.org/privkey.pem;
    client_max_body_size 1000M;

    location / {
        proxy_pass http://localhost:8008;
        proxy_set_header X-Forwarded-For $remote_addr;

    }
}

Pour joindre la fédération de votre serveur Matrix, ajoutez les paramètres suivants :

/etc/nginx/sites-enabled/matrix.conf
server {
    listen 8448 ssl;
    server_name matrix.example.org;

    include ssl.conf;
    ssl_certificate /etc/nginx/ssl/matrix.example.org/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/matrix.example.org/privkey.pem;

    location / {
        proxy_pass http://localhost:8008;
        proxy_set_header X-Forwarded-For $remote_addr;
    }
}

Pour rendre votre serveur visible aux clients et aux autres serveurs via le protocole distribué, ajoutez une entrée SRV au DNS de ~matrix.example.org~ :

_matrix._tcp.matrix.example.org. 3600 IN SRV 10 0 8448 matrix.example.org.

Lancer Synapse

Créer un script OpenRC pour gérer le démon Synapse :

/etc/init.d/synapse
#!/sbin/openrc-run
# Copyright 2019 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

name="Synapse daemon"
description="Synapse daemon"
command=/var/calculate/synapse/env/bin/synctl
command_user=synapse
command_args="${synapse_args}"
directory=/var/calculate/synapse
pidfile="/var/calculate/synapse/homeserver.pid"

depend() {
        use net
        need postgresql nginx
}

start() {
        ebegin "Starting Synapse"
        start-stop-daemon -u "${command_user}" -S "${command}" \
        -d "${directory}" -p "$pidfile" \
                -- start &>/dev/null
        eend $?
}

stop() {
        ebegin "Stopping Synapse"
        start-stop-daemon -u "${command_user}" -K "${command}" \
                -d "${directory}" -p "$pidfile" -- stop

        eend $?
} 

Définissez les droits d'accès :

chmod 0755 /etc/init.d/synapse

Démarrez le démon Synapse :

/etc/init.d/synapse start

Ajoutez Synapse au démarrage automatique :

rc-update add synapse

Félicitations, votre serveur Matrix est opérationnel ! Mais il vous reste encore des choses à faire. N'hésitez pas à découvrir d'autres fonctionnalités intéressantes de votre serveur Matrix personnel.

Ajouter des utilisateurs

Pour ajouter un nouvel utilisateur myuser, exécutez :

su - synapse

register_new_matrix_user -c homeserver.yaml http://localhost:8008

New user localpart [root]: myuser
Password: 
Confirm password: 
Make admin [no]: no
Sending registration request...
Success! 

Mise à jour

Actualisez les bibliothèques Python pour l'utilisateur :

su - synapse

pip install --upgrade matrix-synapse[all]

exit

Redémarrez le serveur Synapse

/etc/init.d/synapse restart

Passerelles

Pour configurer l'intégration de Matrix avec d'autres services de messagerie, reportez-vous à la rubrique « Passerelles Matrix ».