La Quête des Notes Fluides : Ma Configuration LiveSync Obsidian et Mes Succès

Aperçu

Ce document résume la configuration, les problèmes rencontrés et les résolutions mises en œuvre lors du déploiement de LiveSync auto-hébergé d'Obsidian utilisant Docker et CouchDB. La construction d'une solution de synchronisation auto-hébergée offre une souveraineté complète sur les données tout en évitant les coûts d'abonnement.

Pourquoi auto-héberger la synchronisation Obsidian ?

Avantages de l'Auto-Hébergement

Souveraineté des données : - Contrôle total sur vos notes et pièces jointes - Aucun accès tiers aux informations sensibles - Conformité aux politiques de données personnelles/d'entreprise - Contrôle géographique du stockage des données

Économies de coûts : - Synchronisation Obsidian : 8 $/mois = 96 $/an - Auto-hébergé : Configuration unique, coûts d'hébergement minimaux - ROI : Amortissement en 2-3 mois

Opportunités d'apprentissage : - Expérience pratique avec Docker - Compétences en gestion de base de données - Pratique de la configuration réseau - Dépannage de systèmes réels

Flexibilité : - Stratégies de sauvegarde personnalisées - Stockage illimité (limité uniquement par votre serveur) - Intégration avec l'infrastructure homelab existante - Options de configuration avancées

Objectifs de la Configuration

Objectifs Principaux

  • ✅ Activer la synchronisation sécurisée et efficace des coffres Obsidian sur tous les appareils
  • ✅ Utiliser CouchDB "Dockerisé" comme base de données backend
  • ✅ Mettre en œuvre le Chiffrement de Bout en Bout (E2EE) version 2 pour la sécurité des données
  • ✅ Gérer élégamment la sensibilité à la casse des systèmes de fichiers multi-OS

Architecture Cible

Devices (Windows/Linux/Android/iOS)
    ↓
Obsidian App + LiveSync Plugin
    ↓
HTTPS/Internet
    ↓
CouchDB (Docker Container)
    ├── Database: obsidian
    ├── Port: 5984
    └── Storage: Persistent volume

Configuration Initiale

Étape 1 : Déployer CouchDB avec Docker

# docker-compose.yml
version: '3.8'

services:
  couchdb:
    image: couchdb:latest
    container_name: couchdb-for-obsidian
    restart: unless-stopped
    environment:
      - COUCHDB_USER=admin
      - COUCHDB_PASSWORD=your_secure_password_here
    volumes:
      - ./data:/opt/couchdb/data
      - ./config:/opt/couchdb/etc/local.d
    ports:
      - "5984:5984"
    networks:
      - obsidian-sync

networks:
  obsidian-sync:
    driver: bridge
# Deploy CouchDB
docker-compose up -d

# Verify it's running
docker ps | grep couchdb

# Check logs
docker logs -f couchdb-for-obsidian

Étape 2 : Créer la Base de Données Obsidian

# Access CouchDB web interface
# Navigate to: http://<server-ip>:5984/_utils

# Login with credentials from docker-compose.yml
# Click "Create Database"
# Database name: obsidian
# Partitioned: No

Étape 3 : Installer le Plugin LiveSync dans Obsidian

  1. Ouvrir Obsidian
  2. Paramètres → Plugins Communautaires → Parcourir
  3. Rechercher : “Self-hosted LiveSync”
  4. Installer et Activer
  5. Configurer le plugin :
    • URL de la Base de Données Distante : http://<server-ip>:5984/obsidian
    • Nom d'utilisateur : admin
    • Mot de passe : Votre mot de passe CouchDB
    • Nom de l'appareil : laptop-primary (ou nom descriptif)

Problèmes Clés et Résolutions

Problème 1 : Docker Compose Manquant

Problème : Commande docker-compose introuvable lors de la gestion des conteneurs Docker.

Symptômes :

$ docker-compose up -d
bash: docker-compose: command not found

Résolution :

# Install Docker Compose on Ubuntu
sudo curl -L "https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# Set executable permissions
sudo chmod +x /usr/local/bin/docker-compose

# Verify installation
docker-compose --version

# Alternative: Use docker compose (V2 plugin)
docker compose version

Problème 2 : Configuration CORS pour CouchDB

Problème : L'API fetch native a échoué avec une erreur CORS pendant LiveSync.

Message d'erreur :

Access to fetch at 'http://server-ip:5984/obsidian' from origin 'app://obsidian.md' 
has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present.

Résolution :

# Access CouchDB container
docker exec -it couchdb-for-obsidian bash

# Edit local.ini configuration
nano /opt/couchdb/etc/local.d/local.ini

# Add CORS configuration:
[httpd]
enable_cors = true

[cors]
origins = *
credentials = true
methods = GET, PUT, POST, HEAD, DELETE
headers = accept, authorization, content-type, origin, referer

# Exit container
exit

# Restart CouchDB
docker restart couchdb-for-obsidian

# Verify CORS headers
curl -I http://localhost:5984/obsidian

Problème 3 : Incohérence de Configuration - Taille de Bloc (Chunk Size)

Problème : Le client LiveSync local a signalé une incohérence customChunkSize (local 60 vs distant 0).

Erreur dans Obsidian :

Configuration mismatch detected:
- Taille de bloc locale : 60
- Taille de bloc distante : 0
Cela peut causer des problèmes de synchronisation.

Résolution :

  1. Dans les Paramètres Obsidian → Self-hosted LiveSync :
    • Défiler jusqu'à Paramètres Avancés
    • Définir la Taille de Bloc Personnalisée : 60
    • Cliquer sur Enregistrer
  2. Accepter l'Invite de Mise à Jour Distante :
    • Lorsque vous y êtes invité : « Incohérence de configuration, accepter les paramètres distants ? »
    • Cliquer sur « Utiliser les paramètres locaux » (préféré)
    • Ou cliquer sur « Utiliser les paramètres distants » si la source distante est fiable
  3. Vérifier la Cohérence sur Tous les Appareils :
    • Répéter sur chaque appareil
    • S'assurer que tous utilisent la même taille de bloc (60 recommandé)

Pourquoi 60 ? - Équilibre entre efficacité et compatibilité - Fonctionne bien avec la plupart des conditions réseau - Recommandé par la documentation LiveSync

Problème 4 : Sensibilité à la Casse des Noms de Fichiers

Problème : Conflits de synchronisation potentiels dus à la sensibilité à la casse des noms de fichiers sur les appareils Linux, Windows et Android.

Scénario :

Linux: Creates "MyNote.md" and "mynote.md" (two different files)
Windows: Sees only one file (case-insensitive filesystem)
Résultat : Conflit de synchronisation !

Résolution :

Dans les Paramètres LiveSync d'Obsidian :

Settings → Self-hosted LiveSync → Advanced

handleFilenameCaseSensitive:
- Définir sur FALSE si la synchronisation se fait avec Windows/macOS/Android
- Définir sur TRUE uniquement si TOUS les clients utilisent des systèmes de fichiers sensibles à la casse

Meilleure Pratique : - Utiliser une convention de nommage cohérente (par exemple, tout en minuscules) - Éviter de créer des fichiers dont les noms ne diffèrent que par la casse - Documenter votre convention de nommage dans le coffre

Problème 5 : Mise à Jour de l'Algorithme de Chiffrement de Bout en Bout

Problème : Ancienne version E2EE détectée avec des vulnérabilités connues.

Message d'Avertissement :

You are using E2EE v1 which has known security issues.
Veuillez mettre à niveau vers E2EE v2 pour une sécurité améliorée.

Résolution :

  1. Sauvegarder Votre Coffre :

    # Créer une sauvegarde avant la mise à niveau
    tar -czf obsidian-backup-$(date +%Y%m%d).tar.gz ~/path/to/vault
  2. Mettre à Niveau vers E2EE v2 :

    • Paramètres → Self-hosted LiveSync → Chiffrement
    • Cliquer sur “Upgrade to E2EE v2”
    • Confirmer la mise à niveau
    • Nouvelle phrase secrète requise - enregistrer en toute sécurité !
  3. Mettre à Jour Tous les Clients :

    • S'assurer que tous les appareils exécutent la version 0.25.0+ du plugin LiveSync
    • Mettre à jour le plugin sur chaque appareil
    • Entrer la nouvelle phrase secrète E2EE v2

Améliorations de Sécurité dans la v2 : - Algorithmes de chiffrement plus robustes - Dérivation de clé améliorée - Meilleure protection contre les attaques par force brute

Problème 6 : Confirmation de Reconstruction du Coffre

Problème : Reconstruction des métadonnées de synchronisation requise en raison d'une corruption de la base de données distante ou de modifications de configuration.

Quand cela se Produit : - Après des mises à jour majeures du plugin - Après une restauration de la base de données - Après avoir modifié les paramètres de chiffrement - Après avoir résolu des conflits de synchronisation

Résolution :

  1. Sauvegarder l'État Actuel :

    # Exporter le coffre
    cp -r ~/vault ~/vault-backup-$(date +%Y%m%d)
  2. Confirmer la Reconstruction dans LiveSync :

    • Paramètres → Self-hosted LiveSync
    • Cliquer sur “Rebuild database”
    • Confirmer : « Êtes-vous sûr ? »
    • Attendre la fin du processus (cela peut prendre plusieurs minutes)
  3. Vérifier le Succès de la Reconstruction :

    • Vérifier l'indicateur d'état de synchronisation (doit être vert)
    • Effectuer une modification de test sur un appareil
    • Vérifier qu'elle se synchronise avec les autres appareils

Ce que Fait la Reconstruction : - Recrée les métadonnées de synchronisation locales - Ré-indexe tous les fichiers - Résout les incohérences - NE supprime PAS vos notes (opération sûre)

Problème 7 : Problèmes de Connectivité avec CouchDB

Problème : Messages Could not connect to server (Impossible de se connecter au serveur) pendant les tentatives de synchronisation.

Causes Possibles : 1. Le conteneur CouchDB n'est pas en cours d'exécution 2. Le pare-feu réseau bloque le port 5984 3. URL incorrecte dans les paramètres LiveSync 4. Problèmes de certificat (si HTTPS est utilisé)

Résolution :

Vérifier l'État du Conteneur :

# Check if container is running
docker ps | grep couchdb

# If not running, start it
docker start couchdb-for-obsidian

# Check logs for errors
docker logs --tail 50 couchdb-for-obsidian

Vérifier la Connectivité Réseau :

# Test from client machine
curl http://<server-ip>:5984

# Expected response:
# {"couchdb":"Welcome","version":"3.x.x"}

# Test database access
curl http://<server-ip>:5984/obsidian

Vérifier les Paramètres de Pare-feu :

# On server, allow port 5984
sudo ufw allow 5984/tcp

# Sur pfSense:
# Pare-feu → Règles → LAN → Ajouter
# Autoriser TCP 5984 vers l'IP du serveur CouchDB

Vérifier la Configuration de l'URL LiveSync : - Paramètres → Self-hosted LiveSync - URL de la Base de Données Distante : http://<server-ip>:5984/obsidian - S'assurer qu'il n'y a PAS de barre oblique finale - Nom d'utilisateur et mot de passe corrects

Résumé du Flux de Travail Étape par Étape

Liste de Contrôle Complète de l'Installation

  1. Préparation du Serveur :
  2. Configuration de la Base de Données :
  3. Configuration du Plugin LiveSync :
  4. Synchronisation Initiale :
  5. Configuration Multi-Appareils :
  6. Maintenance Continue :

Optimisation des Performances

LiveSync Settings:

Sync Mode: Automatic
Sync Interval: 30 seconds (équilibre entre réactivité et batterie)
Batch Size: 50 (default, augmenter pour une synchronisation plus rapide)
Chunk Size: 60 (pour la compatibilité)
Timeout: 120 seconds

Advanced:
- Compresser la base de données : Yes
- Utiliser la synchronisation par blocs : Yes
- Vérifier la somme de contrôle (checksum) : Yes (plus lent mais plus sûr)

Maintenance de la Base de Données

# Compacter la base de données (réduit la taille)
curl -X POST http://admin:password@localhost:5984/obsidian/_compact \
     -H "Content-Type: application/json"

# Afficher les statistiques de la base de données
curl http://admin:password@localhost:5984/obsidian

# Sauvegarder la base de données
curl -X GET http://admin:password@localhost:5984/obsidian/_all_docs?include_docs=true \
     > obsidian-backup-$(date +%Y%m%d).json

Meilleures Pratiques de Sécurité

1. Utiliser HTTPS pour l'Accès Distant

# Nginx reverse proxy configuration
server {
    listen 443 ssl;
    server_name sync.yourdomain.com;

    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;

    location / {
        proxy_pass http://localhost:5984;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

2. Restreindre l'Accès par IP

# Dans CouchDB local.ini
[httpd]
bind_address = 192.168.1.100  # N'accepter les connexions que depuis une IP spécifique

# Ou utiliser un pare-feu
sudo ufw allow from 192.168.1.0/24 to any port 5984

3. Activer E2EE v2

  • Toujours utiliser le Chiffrement de Bout en Bout
  • Utiliser une phrase secrète robuste (20+ caractères)
  • Stocker la phrase secrète dans un gestionnaire de mots de passe
  • Ne pas partager la phrase secrète de manière non sécurisée

Conseils de Dépannage

La Synchronisation ne Fonctionne Pas

  1. Vérifier l'indicateur d'état de synchronisation dans Obsidian
  2. Examiner les journaux LiveSync (Paramètres → Afficher le journal)
  3. Vérifier la connectivité réseau à CouchDB
  4. Vérifier les journaux du conteneur CouchDB
  5. Reconstruire la base de données en cas de problèmes persistants

Apparition de Conflits

  1. Examiner les fichiers de conflit dans le dossier .conflicts/
  2. Résoudre manuellement les conflits
  3. Supprimer les fichiers de conflit résolus
  4. Envisager d'ajuster l'intervalle de synchronisation

Utilisation Élevée du CPU/Mémoire

  1. Réduire la fréquence de synchronisation
  2. Compacter la base de données CouchDB
  3. Limiter la taille du coffre (séparer les fichiers multimédias volumineux)
  4. Mettre à niveau le matériel du serveur si nécessaire

Références

Notes

Maintenez la cohérence de la configuration entre les appareils et appliquez les mises à jour rapidement pour garantir une synchronisation sécurisée et fiable de votre coffre Obsidian. Des sauvegardes régulières du coffre et de la base de données CouchDB sont essentielles pour la reprise après sinistre.

Conclusion

L'auto-hébergement de la synchronisation Obsidian avec CouchDB offre un contrôle total sur vos notes tout en économisant les coûts d'abonnement. La configuration initiale demande de la minutie, mais une fois correctement configurée, elle fournit une synchronisation fiable et chiffrée sur tous vos appareils.

Points Clés à Retenir : - La configuration CORS est essentielle pour l'accès web - Une taille de bloc cohérente prévient les erreurs de synchronisation - E2EE v2 offre une sécurité robuste - Une maintenance régulière de la base de données garantit les performances - Des sauvegardes adéquates préviennent la perte de données

Document créé: 2025-10-25