Self-Hosting Is My New Hobby. First Up: Obsidian Sync on My Own Server.

Git sync for Obsidian worked but it was clunky. CouchDB LiveSync on my own Hetzner VPS gives me real-time sync across all devices. No GitHub, no subscriptions, just my server.

Self-Hosting Is My New Hobby. First Up: Obsidian Sync on My Own Server.

Something happened after I moved my SaaS stack to a Hetzner VPS with Coolify. I looked at the resource monitor and realized I was using maybe 20% of the machine. The rest was just sitting there. Doing nothing. Waiting.

And I thought: what else can I put on this thing?

That was the beginning of a new hobby. Self-hosting. Not in the "I run a homelab with 47 containers and a custom Kubernetes cluster" way. More like: every time I use a cloud service that stores my data, I ask myself "could I just run this on my VPS instead?" And the answer is almost always yes.

No more wondering who has access to my data. No more reading privacy policies that basically say "we can do whatever we want". No more paying subscriptions for things that are literally just a database and a web server.

The first thing I self-hosted (besides the blog and the SaaS) was Obsidian sync. And it might be the most satisfying one yet.

The Git Sync Problem

If you read my previous post about Obsidian, you know I was using Git to sync my notes across devices. Private GitHub repo, Obsidian Git plugin auto-committing every few minutes, Working Copy on iOS.

It worked. Mostly. But there were some things that kept bugging me:

  • Mobile sync was clunky. Working Copy on iOS works, but it is not exactly seamless. You have to remember to pull before you start writing and push when you are done. Forget once and you get a merge conflict on your grocery list.
  • Git is not designed for real-time sync. It is designed for code. Every sync is a commit, a push, a pull. There is latency. Change a note on my laptop, it takes a few minutes before my phone sees it.
  • Merge conflicts on notes. It happened rarely, but when it did, it was always on the one note I actually needed.
  • My notes are on GitHub. Private repo, sure. But still on Microsoft's servers. My personal journal entries, sitting in someone else's data center.

Git sync was the best option I had at the time. But I knew there was something better.

Obsidian LiveSync + CouchDB

Obsidian LiveSync is a community plugin that syncs your vault using CouchDB. Not Git, not iCloud, not Obsidian's paid sync service. CouchDB. A database designed from the ground up for replication and sync.

The way it works is elegant. CouchDB has this built-in replication protocol where two databases can stay in sync with each other automatically. LiveSync uses this to treat each device as a CouchDB node. Change a note on your laptop, CouchDB replicates it to the server, your phone picks it up. Real-time. No commits, no pushes, no merge conflicts (CouchDB handles conflict resolution natively).

And the best part: the CouchDB instance runs on your own server. Your notes never touch anyone else's infrastructure. Not GitHub, not Apple, not Obsidian's servers. Just your VPS.

Setting It Up on Coolify

I already have Coolify running on my Hetzner box with Traefik handling SSL. So spinning up CouchDB was almost too easy.

In Coolify, I created a new service with a Docker Compose config. CouchDB is just a Docker image:

services:
  couchdb:
    image: couchdb:latest
    environment:
      - COUCHDB_USER=your_username
      - COUCHDB_PASSWORD=your_password
    volumes:
      - ./data:/opt/couchdb/data
      - ./local.ini:/opt/couchdb/etc/local.ini
    restart: unless-stopped

Coolify handles the Traefik routing and SSL automatically. I pointed a subdomain at it (something like sync.ercan.tech), Traefik grabbed a Let's Encrypt certificate, done. CouchDB accessible over HTTPS in about five minutes.

The CouchDB Config

CouchDB needs a local.ini file with some specific settings for LiveSync to work. The important bits:

[couchdb]
single_node=true
max_document_size = 50000000

[chttpd]
require_valid_user = true
max_http_request_size = 4294967296

[chttpd_auth]
require_valid_user = true

[httpd]
WWW-Authenticate = Basic realm="couchdb"
enable_cors = true

[cors]
origins = app://obsidian.md,capacitor://localhost,http://localhost
credentials = true
headers = accept, authorization, content-type, origin, referer
methods = GET, PUT, POST, HEAD, DELETE
max_age = 3600

The CORS part is important. Obsidian is an Electron app, so it makes requests from app://obsidian.md. On mobile it comes from capacitor://localhost. Without these origins whitelisted, the browser security layer blocks the sync and you sit there wondering why nothing works for 20 minutes. Ask me how I know.

Connecting Obsidian

Install the Self-hosted LiveSync plugin in Obsidian. Point it at your CouchDB URL, enter the username and password, and set it to LiveSync mode. It creates a database for your vault automatically.

On each new device, install the plugin, enter the same CouchDB URL, and it pulls down everything. First sync takes a minute depending on vault size. After that, changes replicate in seconds.

Seconds. Not minutes. Not "wait for the next auto-commit". Seconds.

Git vs CouchDB Sync: Honest Comparison

Git SyncCouchDB LiveSync
SpeedMinutes (commit + push cycle)Seconds (real-time replication)
ConflictsManual merge in GitCouchDB handles it automatically
MobileClunky (Working Copy)Native plugin, just works
Data locationGitHub (Microsoft)Your own server
Version historyFull git logLimited (CouchDB revisions)
Setup effortLow (if you know Git)Medium (need a server + CouchDB)
CostFree (GitHub)Free (if you already have a VPS)

The one thing I miss from Git is the full version history. With Git, I could see every change to every note going back to the beginning. CouchDB keeps revisions but it is not the same as a full git log. I might keep a periodic Git backup as a safety net. But for day-to-day sync, CouchDB is not even a comparison. It is just better.

Self-Hosting as a Hobby

This is the post where I admit that self-hosting has become a hobby. CouchDB for notes was the gateway drug. Now I look at every cloud service I use and think: can I run that myself?

The math is simple. I already pay 7 EUR/month for the Hetzner VPS. Every self-hosted app I add to it costs zero extra. Meanwhile, Obsidian Sync alone is $8/month. The VPS pays for itself with just this one replacement.

But honestly it is not even about the money. It is about the feeling. My notes, on my server, in my data center (well, Hetzner's data center in Germany, but you know what I mean). Nobody mining them for AI training data. Nobody analyzing my writing patterns. Nobody sending me emails about plan upgrades.

Just my stuff, on my machine, syncing the way I want it to.

What Is Next

CouchDB was the first self-hosted app I added purely for personal use. But I already have a list. A password manager (Vaultwarden), a bookmarks sync (Linkding), maybe a personal dashboard. All Dockerized, all on Coolify, all on the same 7 EUR box.

If you have a VPS sitting around with spare capacity, try self-hosting one thing. Just one. Pick the cloud service that annoys you the most and replace it. You will be surprised how easy it is in 2026, and how good it feels to own your data again.