Хостинг

Obsidian на VPS: селф-хостинг синхронизации без подписки

Как поднять свой сервер синхронизации Obsidian на VPS: CouchDB, Nginx, SSL, плагин LiveSync. Все шаги проверены на VPS is*hosting.

Команда is*hosting 28 июл 2026 8 мин
Obsidian на VPS: селф-хостинг синхронизации без подписки
Содержание

Если vault Obsidian живет на ноутбуке, то, открывая приложение на телефоне, вы видите там заметки недельной давности. Obsidian Sync это чинит, но стоит $4 в месяц за пользователя на годовом тарифе. Команда из трех человек отдает почти $150 в год за сервис, который занимается тем, что перекладывает Markdown-файлы между устройствами.

Рассказываем, как поднять собственный бэкенд синхронизации на CouchDB на VPS от is*hosting и подключить его через community-плагин Self-hosted LiveSync. Vault остается актуальным на всех устройствах, а из регулярных расходов — только сам сервер.

Мы прогнали весь процесс на VPS от is*hosting. Серверную часть — от чистого VPS до работающего CouchDB за Nginx — собрали меньше чем за четыре минуты на тарифе Start.

Что понадобится

Обязательно:

  • Домен, которым вы управляете (нужен для SSL, а SSL нужен для iOS и Android).
  • DNS A-запись, указывающая на IP вашего VPS.
  • Obsidian, установленный на каждом устройстве, которое хотите синхронизировать.

CouchDB нетребователен к ресурсам при личном использовании. Тариф Start (2 CPU / 2 GB RAM / 30 GB NVMe) выдерживает личный vault на нескольких устройствах.

Если vault большой, с кучей вложений, или вы планируете ставить на тот же сервер другие сервисы — тариф Medium (3 CPU / 4 GB RAM / 40 GB NVMe) дает комфортный запас ресурсов. Апгрейды по RAM и диску доступны на всех тарифах VPS без миграции.

VPS

KVM VPS с выделенным IPv4 и CentOS 9 — этого хватает, чтобы поднять собственный бэкенд синхронизации CouchDB, в 40+ локациях, так что сервер можно разместить ближе к своим устройствам.

Выбрать VPS

В каждый тариф is*hosting по умолчанию входит 1 выделенный IPv4. Он предвыбран при оформлении и уже назначен на сервер — именно на этот публичный IP указывает A-запись вашего домена. Еженедельные бэкапы VPS включены на всех тарифах. Docker предустановлен не будет — его ставим на шаге 1.

При заказе выберите операционную систему CentOS 9 x64.

Как поставить бэкенд синхронизации Obsidian на VPS

Как поставить бэкенд синхронизации Obsidian на VPS

Шаг 1. Установить Docker

Подключитесь по SSH под root. Скрипт установки Docker делает все сам, включая плагин Compose:

curl -fsSL https://get.docker.com | sh
systemctl enable --now docker

Скрипт добавляет репозиторий Docker CE, ставит движок и включает сервис. На VPS Start с CentOS 9 x64 полная установка заняла 90 секунд. Последние строки вывода подтверждают успех:

INFO: Docker daemon enabled and started
+ sh -c 'docker version'
Client: Docker Engine - Community
 Version:           29.6.0

Проверьте, что оба инструмента на месте:

docker --version
docker compose version

Вывод должен быть примерно такой:

Docker version 29.6.0, build fb59821
Docker Compose version v5.2.0

Инсталлер выведет предупреждение про привилегированный доступ демона. Оно информационное, можно игнорировать.

Шаг 2. Запустить CouchDB

Создайте рабочую директорию и выставьте владельца на uid 5984 — под этим пользователем CouchDB работает внутри контейнера:

mkdir -p /opt/couchdb/{data,etc}
chown -R 5984:5984 /opt/couchdb/data /opt/couchdb/etc

Создайте Compose-файл, подставив свои учетные данные вместо your_admin_user и your_strong_password:

cat > /opt/couchdb/docker-compose.yml << 'EOF'
services:
  couchdb:
    image: couchdb:latest
    container_name: couchdb-for-ols
    user: 5984:5984
    environment:
      - COUCHDB_USER=your_admin_user
      - COUCHDB_PASSWORD=your_strong_password
    volumes:
      - /opt/couchdb/data:/opt/couchdb/data
      - /opt/couchdb/etc:/opt/couchdb/etc/local.d
    ports:
      - "127.0.0.1:5984:5984"
    restart: unless-stopped
EOF

Привязка 127.0.0.1:5984:5984 держит CouchDB подальше от публичного интерфейса. Внешним доступом займется Nginx.

Запустите контейнер:

cd /opt/couchdb
docker compose up -d

Docker стягивает образ и стартует контейнер. На Start это заняло секунд 10:

 Network couchdb_default  Creating
 Network couchdb_default  Created
 Container couchdb-for-ols  Creating
 Container couchdb-for-ols  Created
 Container couchdb-for-ols  Starting
 Container couchdb-for-ols  Started

Проверьте, что CouchDB отвечает:

curl -s http://localhost:5984
{"couchdb":"Welcome","version":"3.5.2","git_sha":"5b4d92103","uuid":"2aea31ba5cc04733d9fdbb1c70201f1b","features":["access-ready","partitioned","pluggable-storage-engines","reshard","scheduler"],"vendor":{"name":"The Apache Software Foundation"}}

Заметьте, что docker ps показывает у контейнера еще порты 4369/tcp и 9100/tcp — это внутренние кластерные порты CouchDB. На публичный интерфейс они не привязаны и правил файрвола не требуют.

Docker и firewalld: Docker управляет своими iptables-правилами независимо от firewalld, поэтому порты контейнеров могут быть доступны снаружи, даже когда firewalld активен. Здесь CouchDB привязан только к 127.0.0.1, так что снаружи он недоступен в любом случае. Все равно убедитесь, что firewalld работает, и откройте только то, что нужно Nginx, до следующего шага:

systemctl enable --now firewalld
firewall-cmd --permanent --add-service=ssh
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload

Проверьте активные правила:

firewall-cmd --list-all

Вы должны увидеть сервисы: cockpit dhcpd ssh http https (cockpit и dhcpd могут отличаться в зависимости от образа). Порта 5984 здесь нет — он остается localhost-only через привязку порта в Docker.

Шаг 3. Инициализировать CouchDB под LiveSync

Перед подключением плагина CouchDB нужна кластерная и CORS-настройка. Проект LiveSync поставляет init-скрипт, который делает это одной командой:

curl -s -o couchdb-init.sh https://raw.githubusercontent.com/vrtmrz/obsidian-livesync/main/utils/couchdb/couchdb-init.sh
chmod +x couchdb-init.sh
env hostname=http://localhost:5984 \
    username=your_admin_user \
    password=your_strong_password \
    ./couchdb-init.sh

Успешный вывод (init-скрипт делает 9 API-вызовов, каждый возвращает {"ok":true} или ""):

INFO: defaulting to _local
-- Configuring CouchDB by REST APIs... -->
{"ok":true}
""
""
""
""
""
""
""
""
<-- Configuring CouchDB by REST APIs Done!

На Start это заняло 3 секунды. Если увидите ERROR: Hostname missing — проверьте, что в переменной hostname есть http:// и порт 5984.

Шаг 4. Настроить Nginx и SSL

Установите Nginx и Certbot. Пакета python3-certbot-nginx в базовых репозиториях CentOS 9 нет, он в EPEL — поэтому сначала подключаем EPEL:

dnf install -y epel-release
dnf install -y nginx certbot python3-certbot-nginx
systemctl enable --now nginx

Ставится порядка 30 пакетов (nginx, certbot из EPEL и зависимости). Один момент из вывода инсталлера стоит отметить:

Certbot auto renewal timer is not started by default.
Run 'systemctl start certbot-renew.timer' to enable automatic renewals.

Включите таймер сразу, чтобы сертификат обновлялся автоматически:

systemctl enable --now certbot-renew.timer

Создайте конфиг реверс-прокси для CouchDB, заменив your.domain.com на свой домен:

cat > /etc/nginx/conf.d/couchdb.conf << 'EOF'
server {
    listen 80;
    server_name your.domain.com;
    location / {
        proxy_pass http://localhost:5984;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
EOF

CORS настраивается на стороне CouchDB init-скриптом из шага 3 — дублировать заголовки в Nginx не нужно, иначе браузер получит их дважды и отклонит preflight-запрос.

Проверьте конфиг и перезагрузите Nginx:

nginx -t
systemctl reload nginx
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Получите SSL-сертификат:

certbot --nginx -d your.domain.com

Certbot спросит email, попросит подтвердить условия использования, затем пропатчит конфиг Nginx и заберет сертификат. По завершении:

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/your.domain.com/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/your.domain.com/privkey.pem
Deploying certificate to VirtualHost /etc/nginx/conf.d/couchdb.conf
Redirecting all traffic on port 80 to ssl in /etc/nginx/conf.d/couchdb.conf

После этого Certbot сам переписывает /etc/nginx/conf.d/couchdb.conf: добавляет блок listen 443 ssl, пути к сертификату и редирект с 80 на 443. Ваш блок location и proxy-заголовки переезжают в 443-блок без изменений. Проверьте результат: nginx -t && cat /etc/nginx/conf.d/couchdb.conf.

Убедитесь, что весь стек доступен:

curl -s https://your.domain.com

Должен вернуться тот же welcome-JSON от CouchDB, что и на шаге 2.

На этом этапе ss -tlnp показывает финальную картину портов:

LISTEN  127.0.0.1:5984   docker-proxy  (CouchDB, только localhost)
LISTEN  0.0.0.0:22       sshd
LISTEN  0.0.0.0:80       nginx         (редирект на 443)
LISTEN  0.0.0.0:443      nginx         (добавлен certbot)

Шаг 5. Подключить Obsidian на первом устройстве

В Obsidian зайдите в Settings → Community plugins → Browse, найдите Self-hosted LiveSync, установите и включите.

Откройте настройки плагина. Мастер настройки запустится сам. Нажмите Start, чтобы войти в режим визарда. В выпадающем списке Remote Type выберите CouchDB.

Введите данные подключения:

  • CouchDB Remote URI: https://your.domain.com
  • Username: your_admin_user
  • Password: your_strong_password
  • Database name: любое имя на ваш выбор (например, obsidian-vault)

Нажмите Test в строке Test Connection. При успешном подключении нажмите Check and Fix database configuration. Напротив пунктов, требующих внимания, появятся кнопки Fix — нажмите каждую. Когда все Fix заменятся галочками, идем дальше.

На экране Confidentiality configuration включите End-to-End encryption и задайте парольную фразу. Документация плагина настоятельно это рекомендует: шифрование происходит до того, как заметки покинут устройство. Включите заодно Path Obfuscation, чтобы шифровались и имена файлов.

На экране Sync Settings выберите LiveSync для синхронизации в реальном времени (изменения расходятся за секунды) либо Periodic для меньшего расхода трафика. Нажмите Apply. Когда появится All done! — настройка завершена. Плагин сразу предложит скопировать Setup URI. Сохраните его — он понадобится для каждого следующего устройства.

Шаг 6. Подключить остальные устройства

На каждом следующем устройстве установите плагин Self-hosted LiveSync, затем нажмите Use в визарде (или выполните Use the copied setup URI из палитры команд). Вставьте URI и введите парольную фразу.

На вопрос How would you like to set it up? выберите Set it up as secondary or subsequent device. Инициализация пройдет автоматически. Когда индикаторы синхронизации в статус-баре погаснут, выполните Reload app without saving. Vault подтянется.

Как пользоваться Self-hosted LiveSync: статус, конфликты, вложения

Как пользоваться Self-hosted LiveSync: статус, конфликты, вложения

Читаем статус синхронизации

Плагин показывает свое состояние в статус-баре Obsidian:

  • 💤 — LiveSync включен, ждет изменений
  • ⚡️ — синхронизация идет
  • ⚠ — произошла ошибка, смотрите настройки плагина

Не закрывайте Obsidian, пока висит ⚡️, особенно после переименования или удаления файлов. Плагин попытается возобновиться после прерывания, но если дать ему закончить чисто — вы избежите пограничных конфликтов.

Разрешаем конфликты

Если вы правили одну заметку на двух устройствах офлайн, а потом оба вышли в сеть, CouchDB сохранит обе версии. LiveSync подсветит это индикатором конфликта на заметке.

Откроете заметку и плагин покажет обе версии рядом с вариантами оставить одну или свести вручную. Простые конфликты (например, дописанный текст без пересечений) сводятся автоматически.

Исключаем большие вложения

Если в vault лежат большие PDF или медиа, которые не нужны на каждом устройстве, зайдите в настройки LiveSync → Sync и настройте исключенные папки или переключите фильтры по типам файлов. Это удержит базу CouchDB от разрастания за счет файлов, которым незачем гонять по сети.

Как обновлять

Обновление CouchDB

Сначала забэкапьте директорию с данными:

tar -czf /root/couchdb-backup-$(date +%Y%m%d).tar.gz /opt/couchdb/data

Затем обновляйте:

cd /opt/couchdb
docker compose pull
docker compose up -d --force-recreate

Docker стягивает свежий образ CouchDB, заменяет контейнер и переподключает тот же volume с данными. Ваши данные, учетки и конфигурация переживают обновление.

is*hosting включает бесплатные еженедельные бэкапы на уровне VPS на всех тарифах, но точечный архив CouchDB делается за две секунды и восстанавливается одной командой. Это быстрее, чем разворачивать полный снапшот сервера, когда обновление пошло не так.

Периодическая компактизация базы

CouchDB со временем накапливает историю ревизий. Раз в несколько месяцев запускайте компактизацию, чтобы вернуть место на диске:

curl -X POST http://your_admin_user:your_strong_password@localhost:5984/obsidian-vault/_compact \
  -H "Content-Type: application/json"

Ответ при успехе: {"ok":true}

Обновление плагина LiveSync

В Obsidian зайдите в Settings → Community plugins. Когда доступно обновление, рядом с Self-hosted LiveSync появится кнопка Update. Перед обновлением на любом устройстве убедитесь, что статус-бар показывает 💤 и синхронизация не идет.

Резервное хранилище

Бесплатные еженедельные бэкапы VPS на всех тарифах — чтобы неудачное обновление CouchDB никогда не стоило вам синхронизированного vault.

Подробнее

Что в итоге работает

От чистого VPS на CentOS 9 x64 до работающего CouchDB с установленным Nginx — около пяти минут. Серверный стек занимает около 900 MB на диске (движок Docker, образ CouchDB, Nginx и зависимости) поверх базовой ОС — на Start с его 30 GB NVMe остается 26 GB свободными. CouchDB в простое на тихом vault ест около 50-80 MB RAM; весь стек вместе с накладными расходами ОС комфортно укладывается в 500 MB — с большим запасом по 2 GB тарифа Start.

Что вы настроили: синхронизацию vault Obsidian в реальном времени между Windows, macOS, Linux, iOS и Android, с end-to-end шифрованием в покое внутри CouchDB, по HTTPS с сервера, который контролируете вы — за стоимость тарифа Start от is*hosting: $10,19 в месяц на годовом тарифе (или $11,99 помесячно).

Obsidian Sync в том же масштабе для одного пользователя — $48 в год, для двоих — $96 в год. VPS отбивает себя в первый же месяц, если иначе вы платили бы за две подписки Sync.

Про базовую настройку сервера до этих шагов — гайд по настройке Linux VPS с нуля закрывает укрепление SSH и системную конфигурацию. Если хотите мониторинг эндпоинта CouchDB, чтобы сразу знать, когда синхронизация отвалилась, — Uptime Kuma на VPS можно поставить на том же сервере без конфликтов.

FAQ

Что такое Self-hosted LiveSync и как он работает?

Self-hosted LiveSync — это сторонний плагин для Obsidian (11 000+ звезд на GitHub), решающий проблему синхронизации заметок между устройствами. Он использует в качестве бэкенда базу данных CouchDB, имеющую встроенные механизмы репликации с учетом конфликтов.

Плагин преобразует изменения в хранилище (vault) в документы CouchDB и синхронизирует их между всеми подключенными устройствами за несколько секунд.

Что именно запускается на VPS для работы синхронизации?

На сервере работают два компонента:

  • CouchDB: один Docker-контейнер (образ couchdb:latest), прослушивающий адрес 127.0.0.1:5984.
  • Nginx: обратный прокси-сервер (reverse proxy), который терминирует SSL-соединение и перенаправляет HTTPS-трафик на CouchDB.

На самих устройствах не требуется запуск каких-либо сторонних служб — достаточно приложения Obsidian с установленным плагином.

С какими сервисами несовместим плагин и какие есть важные требования?

  • Плагин нельзя использовать одновременно с официальным сервисом Obsidian Sync, а также с iCloud и другими решениями для синхронизации файловой системы (их совместное использование приведет к конфликтам).
  • Сквозное шифрование (E2EE) поддерживается и настоятельно рекомендуется. Без установки парольной фразы (passphrase) заметки будут сохраняться в базе CouchDB в открытом виде (plaintext).
  • Для работы синхронизации на устройствах Apple обязательно нужен валидный SSL-сертификат (по обычному HTTP синхронизация на iOS работать не будет).

В чем преимущества Self-hosted LiveSync перед официальным Obsidian Sync?

  • Экономия при нескольких пользователях. Официальный Obsidian Sync стоит $4/мес ($48/год) за одного пользователя. Для 2–3 человек это уже $96–$144/год, что дороже аренды небольшого VPS под контейнер CouchDB.
  • Безопасность и NDA. Заметки никогда не покидают подконтрольные вам сервера, что критично для исследователей, юристов и инженеров с обязательствами по конфиденциальности.
  • Выбор юрисдикции и низкая задержка. При использовании хостинга (например, is*hosting с 40+ дата-центрами в Европе, Азии и Северной Америке) вы можете разместить сервер в нужной юрисдикции для соблюдения нормативных требований и ближе к своим устройствам для минимальной задержки.
Выделенный сервер

Когда VPS уже не хватает.

 От $66.67/месяц