deblan.io-gemini/blog/posts/655.gmi
2024-01-05 22:48:52 +01:00

100 lines
4.9 KiB
Plaintext

# Matrix-Synapse : migrer de SQLite à PostgreSQL
* 2023-09-10 18:30:00
* Informatique
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
=> https://matrix-org.github.io/synapse/latest/setup/installation.html 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.
```{.window.language-bash}
$ 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
=> https://www.postgresql.org/download/linux/debian/ documentation officielle
.
```{.window.language-bash}
$ 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 :
```{.window.language-diff}
-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 :
```{.window.language-bash}
$ sudo systemctl start postgresql.service
```
C'est maintenant le moment de créer une base et un compte nommés `matrix`.
```{.window.language-bash}
$ 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 :
```{.window.language-yaml}
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`.
```{.window.language-bash}
$ 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.
```{.window.language-bash}
$ 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.