Доступна обновленная инструкция по настройке плагина и CouchDB

Для тех кто не в курсе, Obsidian - кроссплатформенная программа для ведения заметок в markdown формате, которую можно использовать для создания личной базы знаний или вашего «второго мозга» по методу Zettelkasten. Как работает метод можно почитать по ссылке. На самом деле Obsidian не обязательно использовать именно как «второй мозг», это просто удобная программа для ведения заметок с большим количеством плагинов.

Один минус - Obsidian из коробки поддерживает синхронизацию заметок только через собственный платный сервис. Из плюсов - вся база хранится в виде обычных md файлов которые можно синхронизировать между устройствами через облачные сервисы. У меня изначально синхронизировалось через NextCloud, но в мобильном клиенте NC постоянно возникают конфликты, которые надо разрешать руками. Вообще мобильный клиент да и сам nextcoud бесят, может кто-то знает альтернативы?

Немного погуглив нашел плагин livesync, который позволяет синхронизировать заметки между разными копиями obsidian. Интерфейс настройки плагина ублюдочный 💩, но после настройки туда можно больше не заходить. Плагин использует базу couchdb для синхронизации изменений и поддерживает несколько режимов синхронизации: periodic - синхронизирует накопленные изменения с указанной периодичностью, live - синхронизирует в режиме реального времени.

Запуск CouchDB

В примере используем docker compose для запуска базы.

mkdir -p conf data/couchdb

Создаём файл conf/local.ini :

[couchdb]
single_node=true
max_document_size = 50000000

[chttpd]
require_valid_user = true
max_http_request_size = 4294967296

[chttpd_auth]
require_valid_user = true
authentication_redirect = /_utils/session.html

[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

Файл docker-compose.yaml

version: "3"
services:
  couchserver:
    image: couchdb:3.1.2
    ports:
      - "5984:5984"
    environment:
      - COUCHDB_USER=admin
      - COUCHDB_PASSWORD=<YOUR PASS>
    volumes:
      - ./data/couchdb:/opt/couchdb/data
      - ./conf/local.ini:/opt/couchdb/etc/local.ini
    restart: always

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

docker compose up -d

Настройка реверс прокси

В конфиг хоста nginx добавляем что-то типа:

server{
    server_name example.ru;

    location /couchdb {
        rewrite /couchdb/(.*)  /$1 break;
        proxy_pass http://localhost:5984;
    }

После применения couchdb будет доступна под адресу https://example.ru/couchdb/

Если у вас уже много заметок - первоначальная синхронизация может прерываться из-за ошибок nginx, для решения проблемы увеличьте client_max_body_size в настройках /etc/nginx/nginx.conf:

http {
	...
	client_max_body_size 1024m;

Настройка Obsidian

В Settings - Community plugins установим плагин Self-hosted LiveSync:

ATTENTION! Сделайте бэкап ваших файлов перед началом настройки! Плагин может всё снести если нажать не ту кнопку. На примере этого плагина можно понять почему программисты не должны делать интерфейсы.

В настройках плагина открываем Remote Database Configuration и заполняем поля

  • URI - адрес couchdb сервера, например https://example.ru/couchdb/
  • Username - admin
  • Password - пароль указанный в docker-compose.yaml
  • Database name - имя базы, например obsidian
  • End to End Encription - включить, если хотите шифровать данные на устройствах перед передачей в базу
  • Passphrase - введите пароль для шифрования если выбрали предыдущую опцию

Далее переходим на вкладку Sync Settings и выбираем как хотим синхронизировать базу: периодически или в живом режиме. В моём случае включено LiveSync - опция включает синхронизацию файлов в режиме реального времени.

В принципе с настройкой всё, далее необходимо инициализировать базу. В Remote Database Configuration жмём Rebuild Everything - плагин должен создать локальную базу по вашим файлам и обновить базу на сервере.

Настройка мобильного клиента

На смартфоне устанавливаем Obsidian и плагин Self-hosted LiveSync. В настройках плагина настраиваем параметры базы, указываем включено ли end-to-end шифрование и т.д, на вкладке Sync Settings так же выбираем режим синхронизации.

На смартфоне не нажимайте Send или Rebuild, если на нём нет ваших файлов - это удалит всё в базе и на других устройствах подключенных к базе.

После ввода всех адресов и паролей идём на вкладку Local Database configuration, нажимаем Fetch rebuilt DB - плагин должен обновить локальную базу на смартфоне и все файлы используя удаленную базу на сервере. После синхронизации базы (появится уведомление, что она синхронизировалась) переходим на вкладку Hatch и нажимаем mark this device as resolved.

После настройки должно получиться что-то такое: