Skip to main content

One post tagged with "Obsidianm"

View All Tags

Obsidian 실시간 동기화 적용하기 (Self-hosted LiveSync)

· 7 min read
2nan
Backend Engineer, Outlier

개요

시놀로지 나스를 사용하거나 fly.io를 사용해서 Obsidian(옵시디언)의 Self-hosted LiveSync 플러그인을 사용하여 여러 기기에 실시간으로 동기화하는 방법은 구글링하면 나오지만, 일반 PC나 서버에서 Obsidian을 동기화하는 글은 없는것 같아 작성합니다.

info

사용하려는 환경에 Obsidian, Docker, Docker Compose가 설치되어 있다고 가정하고 진행됩니다.

서버 PC 설정하기

couchdb ini 설정하기

여러 기기에서 노트 데이터를 저장하고 공유하기 위해 couchdb 컨테이너를 사용합니다. 컨테이너를 실행하기 전, 간단한 ini 파일을 작성합니다.

저는 맥미니에 서버를 구성할 예정이라 /Users/{USER_NAME}/service/obsidian-db 디렉토리에 couchdb.ini 파일을 생성합니다.

couchdb.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로 couchdb 컨테이너 실행하기

couchdb 컨테이너를 실행하기 위해 docker-compose.yml 파일을 같은 경로에 생성합니다.

docker-compose.yml
version: "3.9"
services:
couchdb:
image: couchdb
container_name: obsidian-livesync
environment:
- COUCHDB_USER={DB 유저 명} # enter the desired CouchDB admin username
- COUCHDB_PASSWORD={DB 패스워드} # enter the desired CouchDB admin password
volumes:
- /Users/{USER_NAME}/obsidian-db/data:/opt/couchdb/data
- /Users/{USER_NAME}/obsidian-db/local.ini:/opt/couchdb/etc/local.ini
ports:
- 5984:5984
restart: unless-stopped

couchdb.ini 파일과 docker-compose.yml 파일을 생성했다면, 해당 경로에서 명령어를 사용하여 백그라운드로 컨테이너를 실행시켜줍니다.

$ docker-compose up -d

couchdb 접근 확인하기

컨테이너를 실행하고, 웹페이지에서 localhost:5984로 접근하면 다음과 같이 ID,PW를 물어보는 창이 나타나는데, docker-compose.yml 파일에서 작성했던 COUCHDB_USER, COUCHDB_PASSWORD 값을 통해서 로그인이 가능합니다.

image

정상적으로 로그인이 되면 아래와 같은 JSON 형태의 데이터가 나타납니다.

image

warning

이때 어디서든지 접근이 가능하도록 5984포트를 사전에 포트포워딩 합니다.

플러그인 설정하기

이제 Obsidian에서 플러그인을 다운받아 연동시키는 차례입니다.

아래와 같이 플러그인 탐색을 통해 Self-hosted LiveSync 플러그인을 검색하고, 설치하여 활성화합니다.

image

활성화하면 아래와 같은 팝업이 나오는데, 서버 설정을 하기 위해 Open setting dialog를 선택해줍니다.

image

Remote Configuration 탭에서 URI, Username, Password, Database name을 작성하고, Test를 눌러 정상적으로 연결이 되는지 테스트합니다. 이때 Username과 Password는 docker-compose.yml 파일에서 작성한 값을 사용합니다.

image

테스트가 정상이라면, Check를 눌러 Database configuration을 설정하고 Apply를 눌러 적용합니다.

image

추가 옵션으로 Incubate Chunks in DocumentEnd-to-End Encryption을 활성화 하고, 다른기기와의 동기화시 보안을 위해 비밀번호를 설정합니다. 전부 설정하였으면 Apply and Rebuild를 선택하여 적용합니다.

image

마지막으로 동기화 모드를 LiveSync로 설정하여 실시간으로 데이터가 동기화 되도록 설정합니다.

image

이제 외부와 연동하기 위해 Setup wizard 탭에서 Copy를 선택하고 팝업에서 비밀번호를 입력하면, 클립보드에 암호화된 URI가 저장됩니다. 클라이언트쪽에서 서버로 연동을 위해 메모장에 붙여넣기 해줍니다.

image

클라이언트 PC, 모바일 설정하기

플러그인 설정하기

클라이언트용은 서버용과 마찬가지로 플러그인을 다운받고 진행합니다. PC와 모바일 둘다 같은 프로세스로 진행되니 모바일로 적용해보겠습니다.

먼저 Setup wizard 탭에서 Copy를 선택하여 복사했던 URI를 붙여넣기 하고, 비밀번호를 입력합니다.

image image

정상적으로 URI와 비밀번호를 입력했다면 다음과 같은 팝업이 발생하는데 yes를 선택합니다.

image

다음은 서브 기기 설정을 위해 Set it up as secondary or subsequent device를 선택합니다.

image

마지막으로 서버와 마찬가지로 동기화 모드를 LiveSync로 설정하여 실시간으로 데이터가 동기화 되도록 설정합니다.

image

적용 확인하기

이제 연동했던 서버나 다른 PC, 모바일에서 노트를 수정하면 실시간으로 동기화가 되는것을 확인할 수 있습니다.

image