Matrix-Synapse : migrer de SQLite à PostgreSQL

Matrix-Synapse est un service de messagerie décentralisé et interopérable avec d'autres messageries. Je l'utilise à titre personnel et dans le cadre d'une association. Il livre un service que je considère sensible, c'est pourquoi les différentes instances sont hébergées sur des infras que je gère.

La configuration par défaut stocke les données de la messagerie dans une base de données SQLite. Cela a bien fonctionné pendant quelques années mais la base de données devient très rapidement obèse (plusieurs Go) et SQLite n'est plus adapté. C'est d'ailleurs recommandé d'utiliser PostgreSQL, naturellement plus adapté compte tenu de la grande quantité de données.

Voici la démarche pour basculer vers PostgreSQL depuis une base SQLite. J'évolue sur des machines sous Debian et j'ai installé Matrix-Synapse via les packages livrés par matrix.org.

Quelques recomandations avant d'opérer la migration :

  • Avoir l'espace disque nécessaire pour accueillir une copie de la base de données SQLite
  • Avoir l'espace disque nécessaire pour héberger les données dans PostgreSQL
  • Communiquer auprès de vos utilisateur·rice·s car la procédure prendra des heures et le service sera inaccessible

La première étape est de stopper le service et de faire une copie de la base de données. Je vous invite, si vous le pouvez, à duppliquer la copie de la base sur une autre machine.

$ sudo systemctl stop matrix-synapse.service
$ sudo cp -v /var/lib/matrix-synapse/homeserver.db{,.bk}

Ensuite, il faut installer PostgreSQL. Je reprend la procédure de la documentation officielle.

$ sudo sh -c 'echo "deb https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
$ wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
$ sudo apt-get update
$ sudo apt-get -y install postgresql
$ passwd postgres # Changement du mot de passe de l'utilisateur "postgres"

Éditer le fichier /etc/postgresql/15/main/pg_hba.conf puis opérer ces modifications :

-local   all             postgres                                peer
+local   all             all                                     peer
-host    all             all             127.0.0.1/32            scram-sha-256
+host    all             all             127.0.0.1/32            md5
-host    all             all             ::1/128                 scram-sha-256
+host    all             all             ::1/128                 md5

On relance ensuite PostgreSQL :

$ sudo systemctl start postgresql.service

C'est maintenant le moment de créer une base et un compte nommés matrix.

$ su - postgres
$ createuser --pwprompt matrix # Conserver le mot de passe que vous allez saisir pour plus tard
$ createdb -e -E UNICODE --template=template0  --locale=C -O matrix matrix
$ psql -d matrix
synapse=# GRANT ALL ON SCHEMA public TO matrix;

Avant de lancer le script de migration, il faut duppliquer temporairement le contenu de /etc/matrix-synapse/conf.d/server_name.yaml dans /etc/matrix-synapse/homeserver.yaml. Éditer le fichier /etc/matrix-synapse/homeserver.yaml pour changer la configuration de la base de données :

database:
  name: psycopg2
  args:
    host: 127.0.0.1
    port: 5432
    user: matrix
    password: "$3cr€t" # Indiquer le mot de passe saisi lors de la création d'utilisateur
    database: matrix
    cp_min: 5
    cp_max: 10

Vous pouvez maintenant lancer la migration. Cela prendre un temps plus ou moins important selon le nombre d'enregistrements. Une base de données de 10Go a été migrée en 3 heures. Je vous invite à lancer la commande dans une session tmux ou screen.

$ sudo apt-get install tmux
$ tmux
$ synapse_port_db --curses \\
    --sqlite-database /var/lib/matrix-synapse/homeserver.db \\
    --postgres-config /etc/matrix-synapse/homeserver.yaml

Une fois la migration terminée, vous pourrez supprimer le contenu duppliqué de /etc/matrix-synapse/conf.d/server_name.yaml et relancer le service.

$ sudo systemctl start matrix-synapse.service

Dans le cas où il y aurait un problème, vous pouvez analyser les logs de Matrix-Synapse dans /var/log/matrix-synapse/homeserver.log. De mon coté, j'ai du faire une ou deux requêtes pour corriger des compteurs et tout était documenté dans ces logs.

Je pense avoir donné toutes les indications pour que cela se passe bien. N'hésitez pas à laisser un commentaire si vous rencontrez un problème.

Vus : 112
Publié par Simon Vieille : 144