Это новая версия предыдущей заметки про синхронизацию Obsidian с помощью плагина LiveSync т.к. плагин обновился, плюс более подробно опишу настройку CouchDB.

Если у вас нет возможности поднять свой сервер CouchDB, предлагаю услуги по настройке базы на моем сервере, вам останется только настроить плагин.

  • 50 МБ - бесплатно
  • 200 МБ - 100 ₽/месяц
  • 500 МБ - 200 ₽/месяц

Обсуждаемый плагин Obsidian поддерживает end-to-end шифрование, данные в базе будут зашированы вашим паролем. По всем вопросам пишите в телеграм @coyotewld или на почту [email protected].

Установка и настройка CouchDB

Запускать базу будем в docker. Создаем директории для хранения:

mdkir -p ~/docker/couchdb/data
cd ~/docker/couchdb

Создаем docker-compose.yaml

version: "3"
services:
  couchserver:
    image: couchdb:3.3
    ports:
      - "127.0.0.1:5984:5984"
    environment:
      - COUCHDB_USER=admin
      - COUCHDB_PASSWORD=COUCH-ADMIN-PASS # ваш админский пароль для доступа к серверу
    volumes:
      - ./data:/opt/couchdb/data
    restart: always
docker compose up -d

Публикуем CouchDB через nginx:

server{
    listen 443 ssl;
    listen [::]:443 ssl;

    server_name couch.example.com;
    location / {
        proxy_pass http://localhost:5984;
        proxy_redirect off;
        proxy_buffering off;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    ssl_certificate /etc/ssl/example.com/fullchain.pem;
    ssl_certificate_key /etc/ssl/example.com/key.pem;

    access_log /var/log/nginx/couch_access.log;
    error_log /var/log/nginx/couch_error.log;
}

После публикации ваша база должна быть доступна по адресу https://couch.example.com и админка по https://couch.example.com/_utils/

Т.к. мы запускали couchdb без конфига и не указывали режим работы ноды (single или кластерный) - couchdb автоматически НЕ создаст служебные таблицы. Укажите режим работы либо в админке https://couch.example.ru/_utils/#/setup , либо через API:

curl -X POST https://admin:[email protected]/_cluster_setup -H "Content-Type: application/json" -d '{
"action": "enable_single_node",
"bind_address": "0.0.0.0",
"port": 5984,
"singlenode": true
}'

После этого CouchDB создаст таблицы _users и _replicator.

Создадим базу obsidian:

curl -X PUT https://admin:[email protected]/obsidian

Создадим пользователя sergey с паролем apple для доступа к базе:

curl -X PUT https://admin:[email protected]/_users/org.couchdb.user:sergey -d '{
  "name": "sergey",
  "type": "user",
  "roles": [],
  "password": "apple"
}'

Разрешим пользователю sergey доступ к базе obsidian:

curl -X PUT https://admin:[email protected]/obsidian/_security -d '{
  "admins": {
    "names": ["admin"],
    "roles": []
  },
  "members": {
    "names": ["sergey"],
    "roles": []
  }
}'

Заметка на полях. После экспериментов и тестирования выяснил, что плагину для работы в принципе достаточно обычного пользователя с правами доступа к базе как созданный выше sergey, но в плагине не будет работать кнопка Сheck которая проверяет параметры couchdb. Можно это проигнорировать, главное чтобы работала кнопка Test, которая проверяет подключение к базе.

Если хотите чтобы работал и Check, для подключения плагина к базе надо использовать админскую учетную запись 🤦‍♂️ которая создается автоматически и второго пользователя можно не создавать.

Дополнительные настройки необходимые плагину LiveSync:

curl -X PUT https://admin:[email protected]/_node/nonode@nohost/_config/chttpd/require_valid_user -H "Content-Type: application/json" -d '"true"'
curl -X PUT https://admin:[email protected]/_node/nonode@nohost/_config/chttpd_auth/require_valid_user -H "Content-Type: application/json" -d '"true"'
curl -X PUT https://admin:[email protected]/_node/nonode@nohost/_config/httpd/WWW-Authenticate -H "Content-Type: application/json" -d '"Basic realm=\"couchdb\""'
curl -X PUT https://admin:[email protected]/_node/nonode@nohost/_config/httpd/enable_cors -H "Content-Type: application/json" -d '"true"'
curl -X PUT https://admin:[email protected]/_node/nonode@nohost/_config/chttpd/enable_cors -H "Content-Type: application/json" -d '"true"'
curl -X PUT https://admin:[email protected]/_node/nonode@nohost/_config/chttpd/max_http_request_size -H "Content-Type: application/json" -d '"4294967296"'
curl -X PUT https://admin:[email protected]/_node/nonode@nohost/_config/couchdb/max_document_size -H "Content-Type: application/json" -d '"50000000"'
curl -X PUT https://admin:[email protected]/_node/nonode@nohost/_config/cors/credentials -H "Content-Type: application/json" -d '"true"'
curl -X PUT https://admin:[email protected]/_node/nonode@nohost/_config/cors/origins -H "Content-Type: application/json" -d '"app://obsidian.md,capacitor://localhost,http://localhost"'

На этом с базой всё и можно переходить в Obsidian.

Настройка Obsidian

⚠️ Сделайте резервную копию заметок пред началом настройки! ⚠️

Установите плагин Self-hosted LiveSync После установки откройте Setup wizard, нажмите Minimal setup - Start и заполните поля: Включите End-to-end шифрование и установите пароль если хотите чтобы в базе ваши заметки были в зашифрованном виде. Заметку будут шифровать и расшифровываться только на ваших устройствах. Это защитит заметки даже если база CouchBD будет скомпрометирована.

Далее нажмите Next, выберите пресет, например Live и нажмите применить.

Плагин предложит создать зашифрованную ссылку для настройки других устройств. Введите любой пароль и в буфер будет скопирована ссылка вида obsidian://setuplivesync?settings..., сохраните её где-нибудь.

Если ссылку забыли/потеряли - можно создать новую в разделе Setup Wizard - Copy current settings as a new setup URI.

Откройте Sync Settings снова выберите пресет LiveSync и нажмите Apply. Начнется загрузка ваших документов в базу, это может занять некоторое время.

При настройке плагина будьте аккуратны с красными кнопками в разделе Maintenance, внимательно читайте что там написано, можно случайно удалить заметки.

Подключение дополнительных устройств

Установите плагин на другие устройства. Откройте Setup wizard, нажмите Use the copied setup URI. Вставьте ссылку полученную на предыдущем этапе и введите пароль которым она зашифрована. Плагин спросит что делать с этим устройством, выберите нужный вам вариант, например “настроить как secondary устройство”. После этого начнется синхронизация базы заметок из CouchDB.

Проделайте это на всех нужных устройствах.

В режиме LiveSync правки заметок синхронизируются между устройствами довольно быстро, задержка всего 1-2 секунды.

Использование S3 хранилища

В версии плагина 0.23.x появился новый вариант хранения заметок в S3 совместимом хранилище, но разработчики пишут, что в данный момент эта функция экспериментальная и хрупкая. После стабилизации наверное имеет смысл переехать с couchdb на более распространенную и дешевую S3.