PROJET AUTOBLOG


Planet-Libre

source: Planet-Libre

⇐ retour index

Simon Vieille : Matrix-Synapse : migrer de SQLite à PostgreSQL

dimanche 10 septembre 2023 à 18:30

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 :

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

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

$ sudo -i 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 et ceux de PostgreSQL dans /var/log/postgresql/postgresql-15-main.log.

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.

Gravatar de Simon Vieille
Original post of Simon Vieille.Votez pour ce billet sur Planet Libre.