Files
2026-07-20 09:23:17 -04:00

8.7 KiB

tags
tags
Documentation
Bookstack
Notes

Obsidian

Setup

Here is a clean, professional, and well-structured Markdown guide for your Obsidian Self-Hosted LiveSync documentation.

I have organized the configuration into logical, step-by-step technical phases, cleaned up syntax formatting (such as fixing case sensitivity in commands like docker exec), and added visual callouts for important warnings and credentials.

Obsidian Self-Hosted LiveSync Configuration Guide

This guide details the deployment of a self-hosted CouchDB instance using Docker Compose and the generation of configuration URIs to enable cross-device synchronization for Obsidian.

1. Prerequisites

  • A reverse proxy (e.g., Nginx Proxy Manager, Cloudflare Tunnels, or Caddy) configured to route external traffic to your container.
  • SSL/TLS certificate configured for your sync domain: https://obsidian.mikemcfetridge.com

2. Database Deployment (Docker Compose)

Deploy the specialized CouchDB image tailored for Obsidian LiveSync. Create a docker-compose.yml file in your directory and add the service definition below:

YAML
``` services: couchdb-obsidian-livesync: image: 'docker.io/oleduc/docker-obsidian-livesync-couchdb:master' container_name: couchdb-obsidian-livesync restart: always ports: - '5984:5984' environment: - COUCHDB_DATABASE=obsidian - COUCHDB_USER=miker - COUCHDB_PASSWORD=tw9222dvO91ZHb - SERVER_DOMAIN=https://obsidian.mikemcfetridge.com volumes: - ./data:/opt/couchdb/data

<div class="code-block ng-tns-c1605810258-88 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" id="bkmrk--1"><div class="formatted-code-block-internal-container ng-tns-c1605810258-88"><div class="animated-opacity ng-tns-c1605810258-88"></div></div></div>### Deployment Verification

1. Launch the container stack in detached mode:
    
    <div class="code-block ng-tns-c1605810258-89 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation"><div class="formatted-code-block-internal-container ng-tns-c1605810258-89"><div class="animated-opacity ng-tns-c1605810258-89"><div class="code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1605810258-89 ng-star-inserted"><span class="ng-tns-c1605810258-89">Bash</span><div class="buttons ng-tns-c1605810258-89 ng-star-inserted"></div></div></div></div></div>```
    docker compose up -d
    
    ```
    
    <div class="code-block ng-tns-c1605810258-89 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation"><div class="formatted-code-block-internal-container ng-tns-c1605810258-89"><div class="animated-opacity ng-tns-c1605810258-89"></div></div></div>
2. Validate that the CouchDB instance is active and accessible via the web administration console by navigating to: `https://obsidian.mikemcfetridge.com/_utils`

## 3. Generate the Client Setup URI

To easily provision your desktop and mobile clients, log into the running container environment to generate an encrypted initialization URI using Deno.

### Step 1: Open an Interactive Terminal in the Container

<div class="code-block ng-tns-c1605810258-90 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" id="bkmrk-bash"><div class="formatted-code-block-internal-container ng-tns-c1605810258-90"><div class="animated-opacity ng-tns-c1605810258-90"><div class="code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1605810258-90 ng-star-inserted"><span class="ng-tns-c1605810258-90">Bash</span><div class="buttons ng-tns-c1605810258-90 ng-star-inserted"></div></div></div></div></div>```
docker exec -it couchdb-obsidian-livesync /bin/bash

### Step 2: Configure Environment Variables & Run the Generator Script

Paste the following block into the container terminal to set up the runtime environment and execute the configuration tool:

Bash
``` export hostname=https://obsidian.mikemcfetridge.com export database=obsidian export username=miker export password=tw9222dvO91ZHb export passphrase=7ixpCPi5OEDF6J

Execute the setup URI generator script

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


<div class="code-block ng-tns-c1605810258-91 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" id="bkmrk--7"><div class="formatted-code-block-internal-container ng-tns-c1605810258-91"><div class="animated-opacity ng-tns-c1605810258-91"></div></div></div>### Step 3: Capture the Output

The script will output your specific **Setup-URI Passphrase** and the **Obsidian configuration string**.

> ⚠️ **Important:** The text passphrase generated by the script will **never** be shown again. Save it immediately in a secure location.

*Example Output:*

<div class="code-block ng-tns-c1605810258-92 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" id="bkmrk-plaintext"><div class="formatted-code-block-internal-container ng-tns-c1605810258-92"><div class="animated-opacity ng-tns-c1605810258-92"><div class="code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1605810258-92 ng-star-inserted"><span class="ng-tns-c1605810258-92">Plaintext</span><div class="buttons ng-tns-c1605810258-92 ng-star-inserted"></div></div></div></div></div>```
Your passphrase of Setup-URI is: little-shadow

obsidian://setuplivesync?settings=%25dcc45454e4eda1f3feb43f050100000041732c3c957c9bac41a96df3040ab6b5uEIf1EWiXa%2BgGabAhHBCF9wkHfvj%2BwSfHlZOctmyUYdDfqwkIfbibE4yge9uNaARqtixj4OZH9XZs3S4cjRclUNvpZiqsq46SOniGB9X2Svk58HFcwfNaW67mNQLQn2cSWRwvN9SudeqVWiLjWKczz6DWBcYGwwsyO%2BLxnw86txKZBC6yE2AaY%2B2dz%2F0qWQBZaxh%2FCJWjxPyRGewUhfUbZnuLQmtu0RY%2FfYgVQQZ%2FNvzmmUpSrpFeJq%2BYP%2F3V1w9PmVNSiDo62a9rnWjjBpk0ffQGxuNEb36Tu9i%2BrRKROnz4T3nsOX6IWZJd4WhuljboUsz9dKHwcNSsDFyNDFx3XMPcjaFO1%2BcMulxP8zJh%2BS3p%2BNrvg5kdsM0%2BGsg%2F29mMUnbFXXETdIAX62Jb%2FhuuRaOy0Cwjccpg02tpXc6HGj7tZCXh1fh4EPNUK09QmkzDOtIcb33yva%2FMNCzY9cVr0TCLr2MVLlnRR9P1sQkGCDTqI0NJvG1B0FvGE3XASBQpCKQH1XnED0z5IFsTH4m8gjHbR2XtDaTbFqNA%2BL9cGjztPXKa0g8xD0mruF5uH1zCp0sELD%2Fghw%2FsXUYcCPt7gmVryU9ioFzjRVt7UTexFpr50ZPOfOfVwfy3FCHk4lCNDREeHdstj2EI19lyBL4NyVuIt5%2FqE%2FaOib04ZefjsTETB%2F7rdbblwebgD1Il%2FWPjtL3uKyxiM11W6pUQtXiT7CvoXfu3rf9K5%2FihFjiomY08xYb60Q1LyIjhG1SIB%2BsvS7Vc9qzyGFW1JdQUEWz3IFpX7QVuk1ZX2uovJiAqwD4eTp0xIUXPNLmeTbQ0rFeKd8yYR6DpMLejkWedW9x%2FxL0q62yvlXsOuAKhQLOgPRQ3A%3D%3D

## 4. Client Plugin Provisioning

Repeat these final configuration steps across each device (Desktop, Mobile, or Tablet) you intend to synchronize.

  1. Install Plugin: Ensure the community plugin Self-hosted LiveSync is installed and enabled inside your Obsidian client.
  2. Import Settings: Open the Obsidian Command Palette (Ctrl+P or Cmd+P), choose Self-hosted LiveSync: Use the copied setup URI, and paste your full obsidian://setuplivesync?settings=... string.
  3. Authenticate: Provide the setup-uri text passphrase generated in Section 3 when prompted.
  4. Initialize: Click Yes when prompted to initiate the storage sync configuration sequence. Select Keep them disabled during the initial sync dialogue if you wish to configure sync intervals manually later.
  5. Finalize: Reload the Obsidian application to apply and activate the synchronization backend.