Synchroniser Obsidian via CouchDB

Rédigé par Alexandre le 2024-10-07

#obsidian #couchdb #podman #debian #auto-hébergement

Comme j'ai pu le dire dans un précédent article, je n'aime pas docker mais trouve en podman une alternative acceptable. Aussi dans cet article, je vais utiliser podman pour créer un conteneur CouchDB, permettant la synchronisation d'Obsidian via le plugin Self-hosted LiveSync.

Je fais cet article avant tout parce que la procédure d'installation fourni par le développeur n'est pas clair pour quiconque ne souhaite pas passer par fly.io.

CouchDB

Créer un utilisateur dédié :

$ sudo adduser podman-couchdb

Se connecter en tant que cet utilisateur :

$ sudo machinectl shell --uid podman-couchdb

Créer le stockage persistant des données :

$ mkdir -p /srv/couchdb/{data,etc/local.d}
$ chown -R podman-couchdb: /srv/couchdb

Ouvrir le fichier de définition du conteneur :

$ mkdir -p ~/.config/containers/systemd/
$ vim ~/.config/containers/systemd/couchdb.container

Insérer les lignes suivantes en remplacer les éléments :

  • <utilisateur> : le compte d'administration de CouchDB
  • <mot_de_passe> : le mot de passe du compte d'administration de CouchDB
[Container]
ContainerName=couchdb
Environment=COUCHDB_USER=<utilisateur>
Environment=COUCHDB_PASSWORD=<mot_de_passe>
HostName=obsidian.gaia.ykn.fr
Image=docker.io/couchdb:latest
PublishPort=5984:5984/tcp
Volume=/srv/couchdb/data:/opt/couchdb/data
Volume=/srv/couchdb/etc:/opt/couchdb/etc/local.d
AutoUpdate=registry

[Service]
Restart=on-failure
TimeoutStartSec=900

[Install]
WantedBy=default.target

Démarrer le conteneur :

$ systemctl --user start couchdb.service

Se déconnecter du compte utilisateur (exit ou les touches CTRL + d).

Initialiser CouchDB

Définir quelque variables :

  • <utilisateur> : le compte d'administration de CouchDB
  • <mot_de_passe> : le mot de passe du compte d'administration de CouchDB
$ export hostname=localhost:5984; \
export username=<utilisateur>; \
export password=<mot_de_passe>

Utiliser le script créé par l'auteur du plugin :

$ curl -s https://raw.githubusercontent.com/vrtmrz/obsidian-livesync/main/utils/couchdb/couchdb-init.sh | sudo bash

La sortie doit ressembler à ceci :

-- Configuring CouchDB by REST APIs... -->
{"ok":true}
""
""
""
""
""
""
""
""
""
<-- Configuring CouchDB by REST APIs Done!

Exposer CouchDB sur internet

Ici je ne détail pas les différentes étapes étant donné qu'il y a plusieurs façon de faire. Pour ma part, j'utilise haproxy.

Une information importante donnée par le plugin et la documentation officielle, il faut accéder à votre CouchDB via https pour que le plugin fonctionne correctement sur iOS/Android.

Créer un vault

Le vault est l'élément chiffré de bout-en-bout qui héberge les données qu'Obsidian envoie. Résumé très grossièrement, il peut-être vu comme un espace utilisateur.

La configuration du vault se fait automatiquement à l'aide d'un script réalisé par l'auteur du plugin de synchronisation. L'utilisation du script passe par l'utilitaire deno que j'ai choisi de lancer depuis un conteneur podman (c'est jetable) sur mon poste de travail (Fedora embarque podman).

Télécharger, lancer et ouvrir un terminal dans le coteneur :

podman run -it denoland/deno:latest bash

Définir quelque variables :

  • <utilisateur> : le compte d'administration de CouchDB
  • <mot_de_passe> : le mot de passe du compte d'administration de CouchDB
  • <couchdb_url> : URL d'accès à CouchDB (exemple : https://couchdb.ykn.local)
  • <nom_du_vault> : nom du vault (exemple : alexandre)
  • <phrase_de_passe> : permet de (dé)chiffrer le vault
$ export username=<utilisateur>; \
export password=<mot_de_passe>; \
export hostname=<couchdb_url>; \
export database=<nom_du_vault>; \
export passphrase=<phrase_de_passe>

Utiliser le script de l'auteur du plugin pour créer le vault sur CouchDB et obtenir les informations de configuration du plugin :

deno run -A https://raw.githubusercontent.com/vrtmrz/obsidian-livesync/main/utils/flyio/generate_setupuri.ts

Le retour du script ressemble à quelque chose comme ci-après qu'il faut impérativement sauvegarder dans un gestionnaire de mot de passe pour pouvoir vous connecter :

obsidian://setuplivesync?settings=%253bef03...pjQnS8g%3D%3D

Your passphrase of Setup-URI is:  dry-shadow
This passphrase is never shown again, so please note it in a safe place.

Ajouter le plugin

Ouvrir Obsidian :

  1. Accéder aux paramètres
  2. Cliquer sur Modules complémentaires
  3. Appuyer sur Parcourir
  4. Dans la barre de recherche, saisir Self-hosted LiveSync
  5. Cliquer sur le plugin
  6. Appuyer sur le bouton Installer
  7. Une fois installé, cliquer sur Activer
  8. Une fenêtre s'ouvre pour la configuration, choisir Use the copied setup URI
  9. Dans le champ qui apparaît, insérer l'URI de configuration obtenue à l'étape précédente (exemple : obsidian://setuplivesync?settings=%253bef03...pjQnS8g%3D%3D)
  10. Saisir la phrase de passe de configuration (exemple: dry-shadow)
  11. Choisir Yes à la première question posée
  12. Cliquer sur Set it up...
  13. Sur la fenêtre qui s'ouvre, choisir Keep them disabled
  14. Enfin, fermer l'application et la réouvrir sans sauvegarder

Ces étapes sont présentes dans la vidéo de l'auteur du plugin.

Références