Skip to content

Instantly share code, notes, and snippets.

@yeongu-dev
Last active November 28, 2023 14:00
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yeongu-dev/08dfbadc9a7c79d23b1022a30dd7eebe to your computer and use it in GitHub Desktop.
Save yeongu-dev/08dfbadc9a7c79d23b1022a30dd7eebe to your computer and use it in GitHub Desktop.
Obsidian Self-hosted LiveSync Plugin 사용을 위한 가이드 입니다.

가이드를 시작하기 앞서...

  • 여기서 설명하는 fly.io는 완전 무료가 아닙니다. 가이드에서는 무료로 사용할 수 있는 스펙에 대해서만 설정하고 있습니다. 여기에서 가격 정책과 무료로 제공되는 스펙을 참고하세요.
  • 옵시디언 사용자가 직접 동기화 DB를 운영하는 것이기 때문에 모든 추가 비용 발생의 책임은 본인에게 있습니다. 또한 vault를 백업하고 작업하는 것을 잊지 마세요.

Self-hosted livesync 소개

옵시디언의 기기 간 동기화에 대한 많은 솔루션들이 있습니다. 그중에 지금 소개하는 self-hosted livesync는 라이브 동기화를 지원하는 유일한 플러그인 입니다. 다른 동기화 솔루션들과 차별되는 것은, 직접 동기화DB(CouchDB)를 구축하고 운영하는 것입니다. 직접 운영하는 시간과 비용을 생각하면 옵시디언 Sync의 비용이 적지 않을 수도 있습니다. Self-hosted livesync는 옵시디언과 호환되는 모든 플랫폼에서 사용할 수 있습니다.

주의1: 공식 옵시디언 Sync와 호환되지 않습니다.

자세한 설명은 공식 소스 저장소 README.md 문서를 확인해주세요. 아래는 주의 해야할 내용을 번역기를 통해 한글로 옮겼습니다.

GitHub 저장소: https://github.com/vrtmrz/obsidian-livesync

기능

  • 문서의 동기화 충돌을 시각적으로 해결
  • 거의 실시간에 가까운 기기 간 양방향 동기화
  • CouchDB 또는 이와 호환되는 IBM Cloudant를 사용할 수 있습니다 (CouchDB를 추천하고, 본문에서는 fly.io 를 통해 구축하는 방법을 가이드 합니다)
  • 엔드 투 엔드 암호화가 지원됩니다.
  • 플러그인 동기화(베타)

중요 공지

  • 이 플러그인을 다른 동기화 솔루션(iCloud 및 Obsidian 동기화 포함)과 동시에 활성화하지 마세요. 이 플러그인을 활성화하기 전에 콘텐츠 손상이나 중복을 방지하기 위해 다른 모든 동기화 방법을 비활성화해야 합니다. 두 개 이상의 서비스와 동기화하려면 하나씩 동기화해야 하며, 두 가지 동기화 방법을 동시에 활성화하지 마세요. 여기에는 클라우드 동기화 폴더(예: iCloud 폴더 또는 Dropbox 폴더) 안에 볼트를 넣지 않는 것도 포함됩니다.
  • 이것은 동기화 플러그인입니다. 백업 솔루션이 아닙니다. 백업을 위해 이 플러그인에 의존하지 마세요.
  • 장치의 저장 공간이 부족하면 데이터베이스가 손상될 수 있습니다.
  • 숨겨진 파일이나 기타 보이지 않는 파일은 데이터베이스에 보관되지 않으므로 동기화되지 않습니다. (삭제될 수도 있습니다).

구성

보다 자세한 기술적인 내용은 저장소의 tech_info.md 문서를 확인하세요.

obsidian-livesync 기술

  • CouchDB: 동기화 DB입니다. 직접 구축해야 합니다. 이 글을 쓴 목적이기도 합니다.
  • PouchDB: Obsidian의 Self-hosted livesync 플러그인에 포함된 로컬DB입니다.

CouchDB 구축 따라해보기

여기서는 fly.io에서 무료로 제공되는 서비스를 이용하여 CouchDB를 구성합니다.

다음 순서대로 진행됩니다.

  1. fly.io 가입, 카드등록
  2. 구글 colab 소스로 fly.io app 생성, volume 생성, CouchDB 설치
  3. obsidian에서 self-hosted livesync 설치, 설정
  4. 다른 obsidian 기기에서의 self0hosted livesync 설정

준비물

  • 해외 결제가 가능한 신용카드
  • fly.io 회원가입을 위한 이메일 계정
  • 구글 Colab을 사용할 수 있는 구글 계정

무료로 제공되는 컴퓨팅 스팩은 아래와 같습니다. (자세히 알아보기 위해 공식 문서 참고)

fly.io free allowances

쉽게 얘기하면 cpu 1개, 256mb 메모리의 VM과 3GB 스토리지를 무료로 할당받을 수 있다는 내용입니다. 이 이상 사용하게 되면 카드에서 결제가 될 수 있으니 유념하세요.

fly.io 가입, 카드등록

브라우저에서 https://fly.io 에 접속하고 상단에 Get Started 버튼을 누릅니다. image-20230311174246768

사용자 이름과, 이메일, 비밀번호를 입력하고 회원가입을 합니다. 회원가입 후에는 이메일 인증을 같이 진행해줍니다. fly.io 회원가입

로그인하고, Billings 메뉴에서 Add Creditcard 버튼을 누릅니다. 아래와 같은 화면이 나오지 않으면, 로그인한 후에, 대시보드(https://fly.io/dashboard)로 이동해서 버튼을 차례로 누릅니다.

image-20230312160625982

해외결제가 가능한 카드정보를 입력하고 저장을 누릅니다. image-20230311201033723

카드 등록이 완료되고 fly.io의 대시보드 화면에 Account Status가 Good Standing으로 바뀐 것을 확인할 수 있습니다. image-20230312175903683

이제 fly.io 가입이 끝났습니다. fly.io에서 무료 스펙 이상을 사용할 경우 카드에서 추가적인 결제가 발생할 수 있습니다. 이를 유념해서 사용해야 합니다. 이 글에서는 Free Allowances에서 제시한 용량 이하로 사용하도록 CouchDB를 구축하는 것을 진행합니다. CouchDB를 위한 fly.io의 App을 만들고, CouchDB 데이터를 저장할 Volume을 생성할 겁니다. fly.io는 App을 생성하면 그 앱 이름에 해당하는 도메인 <app-name>.fly.dev을 사용할 수 있습니다! HTTPS/SSL이 적용되기 때문에 도메인과 인증서를 관리할 필요가 없습니다.

구글 colab 소스로 fly.io app 생성, volume 생성, CouchDB 설치

구글 colab은 파이썬 주피터 노트북이라는 형식으로 작성된 코드를 실행시킬 수 있습니다. self-hosted livesync 플러그인 개발자가 노트북 형태로 설치에 필요한 것들을 작성해서 올렸고, colab에서 실행할 수 있습니다.

아래 링크로 들어갑니다. deploy_couchdb_to_flyio.ipynb · GitHub

들어가면 아래에 표시된 Open in Colab 버튼을 누릅니다. 이때 Colab에서 스크립트를 실행하기 위해서는 구글 계정이 필요합니다. 구글 계정을 로그인하고 다시 접속해봅니다. image-20230318220208320

구글 Colab에 해당 스크립트를 실행시킬 수 있도록 되어 있습니다. 이제 우리는 CouchDB에서 사용할 사용자, 비밀번호를 설정해줘야 합니다.

  • os.environ['resgion'] = "nrt"
    • 이건 일본 리전에 DB 데이터를 설정한다는 겁니다. 한국이라면 그대로 nrt를 사용하면 됩니다. region에 더 자세한 내용은 Regions · Fly Docs 링크를 참고하세요.
  • os.environ['couchUser'] = "changetoyourname"
    • CouchDB에서 사용할 사용자명을 설정합니다. 나중에 Self-hosted livesync 플러그인 설정에 사용됩니다.
  • os.environ['couchPwd']="uuai32oqhdw"
    • CouchDB에서 사용할 사용자의 비밀번호 입니다. 마찬가지로 플러그인 설정에서 사용됩니다. 입력을 모두 했다면, [2]를 눌러 코드를 실행합니다. image-20230318220430392

실행시키면 아래와 같은 화면이 나올 수 있습니다. Run anyway를 눌러 실행시킵니다. image-20230318221136931

2번째 코드를 실행시키고, 3번째 코드도 실행시킵니다. 3번째 코드를 실행시키면 아래 화살표 처럼 링크가 나옵니다. 해당 링크를 눌러 fly.io 계정으로 로그인 합니다. 그러고 나면 3번째 코드가 완전히 실행됩니다. image-20230318222052413

3번째 코드가 아래 화살표 처럼 나와야 합니다. successfully logged in as <계정이메일> 이라고 나왔다면 3번째 코드 실행이 잘 된겁니다. image-20230318222213673

4번째 코드를 실행시킵니다. 4번째 코드에서 !/root/.fly/bin/fly volumes create --region ${region} couchdata --size 2 에서 --size 2 는 2GB의 볼륨(데이터 저장공간)을 할당한다는 명령입니다. 계정당 3GB까지는 무료입니다. 3이라고 설정해도 될 것 같은데, 확인해보지 않았습니다. 시리행 후에 아래 붉은 박스처럼 나오면 성공입니다. image-20230318222633546

5번째, 6번째, 7번째 코드를 차례로 실행시킵니다.

이제 8번째 코드입니다. 8번째 코드는 위에서 만든 app에 CouchDB를 Docker로 설치하는 코드입니다. 자세히 보시면 Status = error로 나옵니다. 이유는 설치하라는 명령은 보냈는데, 아직 설치가 진행 중이기 때문입니다. image-20230318222924948

8번 코드 실행 후에, 아래와 같이 오류가 날 경우 7번 이후 좀 시간을 두고 5분 정도 더 뒤에 실행하면 되는 경우가 있었습니다. image

fly.io 대시보드 https://fly.io/dashboard 링크로 접속해서 설치가 완료되는 걸 확인합니다. 설치가 완료되지 않았다면 기다려서 완료될 때까지 기다립니다. image-20230318223055074

8번 코드에서 CouchDB 설치가 완료되었다면 9번 코드를 실행합니다. 9번 코드를 실행하면 접속 가능한 URL을 표시해줍니다. URL은 https://<fly.io app name>.fly.dev 의 규칙을 따릅니다.

마지막으로 10번 코드를 실행해서 제대로 CouchDB 접속이 되는지 확인합니다.

# Finish setting up the CouchDB

!curl -X POST ${couchHost}  -H "Content-Type: application/json" -d '{"action":"enable_single_node","username":"${couchUser}","password":"${couchPwd}","bind_address":"0.0.0.0","port":5984,"singlenode":true}'  --user "${couchUser}:${couchPwd}"

아래와 같이 나온다면 설치가 제대로 되었고 접속도 잘 된겁니다.

{"ok":true}

다음 장에는 self-hosted livesync 설치와 설정에 대해 설명하겠습니다.

obsidian에서 self-hosted livesync 설치, 설정

self-hosted livesync 링크를 눌러 옵시디언에서 플러그인 설치화면으로 갑니다.

Install 버튼을 눌러 설치합니다. image-20230318230303040

Enable 버튼을 눌러 플러그인을 활성화 합니다. image-20230318230320100

Ctrl + P 를 눌러 설정에 들어간 후에, Self-hosted LiveSync 설정을 누릅니다. 상단에 🛰️ 탭을 누릅니다. 그리고 이전에 Colab을 통해 설치한 CouchDB의 접속 정보를 입력합니다.

  • URI: 구글 Colab에서 설치한 CouchDB의 접속 URL입니다. '/ 로 끝나지 않게 작성해주세요.
  • Username: CouchDB 사용자명
  • Password: CouchDB 비밀번호
    • 참고: 이 암호는 Obsidian의 vault에 일반 텍스트로 저장됩니다.
  • Database name: 동기화를 위한 DB명입니다. 다른 기기에서도 같은 DB명으로 입력해야 하기 때문에, 기억해주세요. 비어 있으면 안됩니다! image-20230318230329142

이제 플러그인에서 DB에 잘 접속되는지 확인을 해봐야 합니다. Check database configurationCheck을 눌러봅니다. 대부분은 Fix 버튼이 나오는 것을 확인할 수 있습니다. Fix 버튼을 모두 눌러줍니다. image-20230318231141484

첫 동기화

!!! 주의 !!! 다음 동기화 이전에 vault를 꼭 백업해주세요. 이제 처음 동기화를 위해 Rebuild everythingRebuild 버튼을 누릅니다. 시간이 조금 걸릴 수 있습니다. image-20230318231230935

동기화가 완료되었으면, 이제 라이브 싱크 설정을 합니다. 사실 라이브 싱크를 사용하지 않고 주기적으로 동기화를 하는 등의 옵션이 있습니다만, 이 플러그인을 사용하는 주 목적은 라이브 싱크입니다. 🔧 탭을 누르고 아래 설정을 해줍니다. image-20230318231536828

한번 설정하면 Presets의 항목이 다시 비어버리는 경우가 있는데, 이건 버그인 것 같습니다. 확인을 위해서는 🔁 탭에 들어가신 후, LiveSync가 활성화 되어 있는지 확인합니다. image-20230320113440877

다른 obsidian 기기에서의 self-hosted livesync 설정

이제 다른 기기에서 obsidian을 실행하고 self-hosted livesync를 설치해주세요. 그리고 위에서 설정했던 것 처럼, CouchDB 설정을 해줍니다. 여기서는 절대 Rebuild 같은 것을 하지 않을 겁니다. CouchDB 설정만 합니다. 마찬가지로 DB에 접속이 되는지 확인하기 위해 Check database configurationCheck을 눌러봅니다. image-20230318231646814

📦 탭을 누르고 Fetch rebuilt DBFetch 버튼을 누릅니다. Fetch 하는데 시간이 조금 걸리지만, 바로 LiveSync 설정을 해봅니다. image-20230318231758563

🔧 탭을 누르고 아래 설정을 해줍니다. image-20230318232025383

이제 라이브 싱크가 제대로 되는지 확인해봅니다. image-20230318232053492

플러그인의 상태 표시

위에서 Show status inside editor 를 활성화를 같이 했는데요. 이럴경우 에디터 우측 상단에 다음과 같은 상태를 확인할 수 있습니다.

  • 상태
    • ⏹️ 멈춤
    • 💤 라이브 동기화가 활성화되었습니다. 변경을 기다리는 중입니다.
    • ⚡️ 동기화 중입니다.
    • ⚠ 오류가 발생했습니다.
  • ↑ 업로드된 청크 및 메타데이터
  • ↓ 다운로드한 청크 및 메타데이터
  • ⏳ 보류 중인 프로세스 수
  • 🧩 청크를 기다리는 파일 수입니다. 파일을 삭제하거나 파일 이름을 변경한 경우에는 다음과 같이 기다리세요.⏳ 아이콘이 사라집니다.

처음에 밀린 동기화를 하게 되면 ⚡️ 상태입니다. 보통은 💤 상태에서 ⏳ 와 ↑, ↓ 이 발생합니다.

모바일 동기화가 안되는 경우

  • 모바일에서 종종 동기화가 안 되는 경우가 있습니다. 저는 이럴 경우 모바일 옵시디언을 종료하고 다시 실행합니다. 그러면 동기화가 제대로 되는 경우가 많습니다.
  • 그리고 플러그인의 업데이트를 주기적으로 체크해서 업데이트해 주는 게 좋습니다. 업데이트 주기가 일정하진 않지만, 빠를 경우 1주일에 한두 번 업데이트가 있었습니다.

참고링크

@hyunki
Copy link

hyunki commented Nov 28, 2023

아주 감사합니다. 설정에 애먹고있었는데 코랩 신세계네요

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment