Base de données
Dans Notarium, les notes sont des fichiers, et l'index de recherche comme le graphe en sont reconstruits. Mais une partie de l'état ne se déduit pas des fichiers : une base de métadonnées (meta) distincte la conserve. Par défaut, il s'agit d'un fichier SQLite sous la racine des données — <DATA_DIR>/meta.db ; la variable META_DB_URL ne sert qu'à pointer vers un Postgres externe.
Ce que conserve la base de métadonnées
| Données | Pourquoi cela ne se déduit pas des fichiers |
|---|---|
| Identifiants des notes | Le registre notarium-id ↔ chemin : il survit à un déplacement ou à un renommage. |
| Historique des versions | Le journal des révisions (instantanés de versions, origine de chaque modification) est tenu par l'application elle-même, pas par git. |
| Utilisateurs et accès | Comptes, rôles, appartenances, jetons. |
| Historique des renommages | Les alias des anciens slugs d'espaces et de projets — pour que les adresses précédentes continuent de se résoudre. |
Rien de tout cela ne peut être reconstitué à partir des seuls fichiers .md — c'est pourquoi la base de métadonnées doit toujours figurer dans votre sauvegarde. Cette base contient bien un registre des espaces, mais il est dérivé : l'identité d'un espace vit dans un fichier marqueur à sa racine et est reconstituée par analyse (File-first). Quant aux index dérivés du moteur (<DATA_DIR>/engine), s'ils sont perdus, ils se reconstruisent simplement à partir des fichiers au démarrage suivant.
Pour en savoir plus sur les versions et leur origine, voir Concepts : historique des versions.
Schéma et migrations
Le schéma de la base de métadonnées appartient à l'application : les migrations s'appliquent au démarrage, aucune commande distincte n'existe pour cela. La base porte en son sein le registre des migrations qui lui ont été appliquées — c'est ainsi qu'un build sait à quoi il a affaire.
Le démarrage admet exactement trois états :
- une base vide — le schéma de base est mis en place, et l'entrée du registre est écrite dans la même transaction ;
- une base dont le registre est un préfixe exact de celui attendu — versions, noms et sommes de contrôle sont vérifiés, puis la partie manquante est appliquée ;
- une base non vide sans registre — le démarrage refuse de continuer, avant toute modification de schéma et toute requête applicative.
Ce dernier cas est délibéré. Un build ne devine pas la version d'une base qu'il ne reconnaît pas et n'inscrit pas de lui-même l'entrée du registre : cela corromprait les données en silence. Si c'est une base de ce genre que vous avez sous la main (une instance antérieure au schéma de base, par exemple), commencez par la mettre à niveau et la vérifier par la procédure normale de sa propre version, et ne lui faites franchir cette frontière qu'ensuite.
Dans Notarium, le mécanisme de retour en arrière des données est une archive vérifiée, pas des migrations SQL inverses. Prenez une sauvegarde et vérifiez-la avant de mettre à niveau : Sauvegarde et restauration.
SQLite (par défaut)
Zéro configuration : par défaut, la base de métadonnées est sqlite:<DATA_DIR>/meta.db, c'est-à-dire un fichier sur le volume /data. Aucun service distinct n'est nécessaire, et il n'y a rien à configurer. Cela suffit pour une instance personnelle et une petite équipe sur un seul conteneur.
Postgres (pour une équipe et un état partagé)
Pour sortir l'état du conteneur — pour un stockage partagé, la tolérance aux pannes ou la maintenance — pointez vers Postgres :
# .env
META_DB_URL=postgres://user:pass@db:5432/notarium
Postgres devient nécessaire dès que l'état doit vivre indépendamment du cycle de vie du conteneur. Les notes, elles, restent des fichiers sous <DATA_DIR>/spaces — seul ce qui ne s'en déduit pas passe dans la base.
password s'appuie sur la base de métadonnéesEn mode AUTH_MODE=password, la base de métadonnées est nécessaire pour les comptes et les jetons — et elle est déjà présente par défaut (SQLite sous la racine des données). Nul besoin de définir META_DB_URL séparément ; vous ne l'indiquez que pour passer à Postgres. Seul AUTH_MODE=none fonctionne sans base de métadonnées. Voir Authentification.
Déplacer l'état vers Postgres n'active pas à lui seul la mise à l'échelle horizontale : Notarium fonctionne en instance unique, et plusieurs instances derrière un répartiteur de charge ne sont pas prises en charge (voir Production).