Setup Obsidian Self Hosting LiveSync

Erstellt: 04.03.2025

Ich suchte für eine Sync Lösung für meine Notizen und wurde bei Obsidian fündig. Obsidian hat einen Großen Pool an Add-ons und einer der Spannenden ist wohl LiveSync.

Zum aufsetzten, habe ich mich für die Self Hosting Version entschieden, bei der man eine Docker mit CouchDB aufsetzt und in meinem Fall hinter einen Nginx für https betreibt.

docker-compose.yml

Für den CouchDB docker habe ich mich für diesen entschieden docker-obsidian-livesync-couchdb und lege eine docker-compose.yml in einem Directory an was für die Daten der DB gedacht ist.

services:
  couchdb-obsidian-livesync:
    image: docker.io/oleduc/docker-obsidian-livesync-couchdb:master
    container_name: couchdb-obsidian-livesync
    restart: always
    environment:
      SERVER_URL: $example.domain
      COUCHDB_USER: myadminuser
      COUCHDB_PASSWORD: mytopsecretadminpw
      COUCHDB_DATABASE: obsidian
    ports:
      - "127.0.0.1:5984:5984"
    volumes:
      - "${LD_HOST_DATA_DIR:-./data}:/opt/couchdb/data"

Systemd service

Erzeugen eines Services der beim Reboot gestartet wird. Dazu legen wir das File oder Symlink nach /etc/systemd/system/obsidian-livesync-couchdb.service an.

[Unit]
Description=%p container

PartOf=docker.service
After=network.target docker.service
StartLimitIntervalSec=0

[Service]
Type=oneshot
RemainAfterExit=true
User=user
WorkingDirectory=/$dataLocationpath$/obsidian-livesync-couchdb/

ExecStart=/usr/bin/docker compose up -d --remove-orphans
ExecStop=/usr/bin/docker compose down

[Install]
WantedBy=multi-user.target

$dataLocationpath$ muss durch den Path ersetzt werden in dem das docker-compose.yml File liegt und in den unter /data die DB Daten liegen werden.

User=user ist der Service User unter dem die File rechte liegen und kann angepasst werden.

Starten des Services

systemctl start obsidian-livesync-couchdb.service
systemctl enable obsidian-livesync-couchdb.service

Nginx VHost

server {
    server_name $example.domain;


        root /dummy/default/root;

        # Add index.php to the list if you are using PHP
        index index.html index.htm;

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


    listen 80;
}

Let's Encrypt

Und nach dem nun noch das SSL Certificat mit Let's Encrypt

certbot --nginx -d $example.domain

Nun sollte man auf die DB zugreifen können die Url ist:

https://$example.domain/_utils

Die aktuell Config ist hier zu finden:

https://$example.domain/_node/_local/_config

DB Setup

Für das Setup der CouchDB gibt es ein init Script welsches die erste schritte übernimmt, wenn der Docker dies noch nicht von selber erledigt hatte.

export hostname=https://$example.domain
export username=myadminuser
export password=mytopsecretadminpw
curl -s https://raw.githubusercontent.com/vrtmrz/obsidian-livesync/main/utils/couchdb/couchdb-init.sh | bash

Setup-URI Generieren

Mit der Setup URI kann man den Server und die Obsedian APP Verheiraten damit man nicht alles Manuel eintragen muss. Zusätzliche env variable zu den obere von DB Setup.

export passphrase=enryptpassword

Erzeugen der Setup-URI

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

Mit diesen Script bekommt man jetzt ein password und eine obsidian://setuplivesync?settings= welsche man in das Obsidian Add-on eingeben muss.

Obsidian Setup

Jetzt geht man bei Obsidian in Preference → Extrenal Add-ons, sucht dort nach Lifesync und installiert es.

Jetzt kann man die setuplivesync URI dort bei Optionen hinzufügen und wird nach dem Setup-URI Password gefragt und danach kommen ein wichtiges Setup Wizard, den man je nach Client richtig durchspielen muss, damit man ja nicht seine alten Daten verliert. Genau dasselbe muss man dann auch bei allen anderen Client durchspielen und aufpassen das man Merge verwendet um somit auf allen Clients denselben stand hat.

Viel Spaß

Obsidian.md

Self-hosted LiveSync on github.com

docker-obsidian-livesync-couchdb