---
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:

<div class="code-block ng-tns-c1605810258-88 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" id="bkmrk-yaml"><div class="formatted-code-block-internal-container ng-tns-c1605810258-88"><div class="animated-opacity ng-tns-c1605810258-88"><div class="code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1605810258-88 ng-star-inserted"><span class="ng-tns-c1605810258-88">YAML</span><div class="buttons ng-tns-c1605810258-88 ng-star-inserted"></div></div></div></div></div>```
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

```

<div class="code-block ng-tns-c1605810258-90 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" id="bkmrk--4"><div class="formatted-code-block-internal-container ng-tns-c1605810258-90"><div class="animated-opacity ng-tns-c1605810258-90"></div></div></div>### Step 2: Configure Environment Variables &amp; Run the Generator Script

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

<div class="code-block ng-tns-c1605810258-91 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" id="bkmrk-bash-1"><div class="formatted-code-block-internal-container ng-tns-c1605810258-91"><div class="animated-opacity ng-tns-c1605810258-91"><div class="code-block-decoration header-formatted gds-emphasized-body-m ng-tns-c1605810258-91 ng-star-inserted"><span class="ng-tns-c1605810258-91">Bash</span><div class="buttons ng-tns-c1605810258-91 ng-star-inserted"></div></div></div></div></div>```
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

```

<div class="code-block ng-tns-c1605810258-92 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" id="bkmrk--10"><div class="formatted-code-block-internal-container ng-tns-c1605810258-92"><div class="animated-opacity ng-tns-c1605810258-92"></div></div></div>## 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.