프로젝트 소개
PKV Sync를 사용하면 관리형 클라우드에 의존하지 않고 Obsidian 볼트를 위한 자체 동기화 서비스를 운영할 수 있습니다. 단일 바이너리로 배포되며, 메타데이터는 하나의 SQLite 데이터베이스에 저장되고 각 볼트는 bare git 저장소로 유지되므로 클러스터, 객체 저장소, 또는 관리형 서비스가 필요하지 않습니다. README는 영어로 작성되었으며, 프로젝트는 AGPL-3.0-only 라이선스를 따릅니다.
README에 설명된 핵심 기능:
- 인증된 장치 간의 다중 사용자, 다중 볼트 동기화, 볼트별 푸시 잠금 및 멱등 재시도.
- 실시간 푸시: 작은 편집은 Server-Sent Events를 통해 1초 이내에 도착하며, 폴링은 대체 수단으로 유지됩니다.
- 진실의 원천으로서의 Git: 각 볼트는 bare git 저장소이므로, 파일별 히스토리, 통합된 diff, 그리고 플러그인과 관리 패널 모두에서 단일 파일 복원이 가능합니다.
- 충돌 처리: 플러그인은 로컬 편집을 무음으로 덮어쓰지 않으며, 충돌은 .conflict-* 파일로 나타나며 원클릭으로 해결할 수 있습니다.
- 관리 패널은 사용자, 장치 토큰, 볼트, 초대, 활동, 그리고 blob 가비지 컬렉션을 위해 5개 언어(영어, 간체 중국어, 번체 중국어, 일본어, 한국어)로 제공되며, 파괴적인 작업에는 확인 대화 상자가 있습니다.
- MCP 읽기/쓰기 도구는 stdio, 독립형 Streamable HTTP, 또는 서버 프로세스에 내장된 /mcp 경로를 통해 노출되며, AI가 읽을 수 있는 볼트를 목표로 합니다.
- 안전 기본값: 관리자가 생성한 비밀번호에 대한 설정 수준의 비밀번호 정책, 일회용 토큰 비밀, 업로드 및 MCP 응답에 대한 크기 제한, 그리고 실시간 SSE 스트림에서 취소된 토큰의 재검증.
배포: 권장 경로는 Caddy와 함께 Docker Compose를 사용하여 Let's Encrypt를 통해 HTTPS를 종료하는 것이며, 서버는 compose 네트워크 내에서 127.0.0.1:6710에서 수신 대기합니다. 설정에는 A/AAAA 레코드와 80 및 443 포트가 도달 가능한 도메인이 필요합니다. 단계에는 genkey 명령으로 배포 키 생성, server, storage, network, MCP 섹션이 포함된 config.toml 편집, 도메인을 위한 Caddyfile 편집, docker compose up -d 실행, 그리고 /setup URL에서 첫 번째 관리자 생성 및 vault의 .obsidian/plugins/pkv-sync/ 폴더에 플러그인 zip 설치가 포함됩니다. 네이티브 설치, 역방향 프록시 조정(Caddy, Nginx, Traefik), public_host 의미론, 백업/복원, 그리고 디스크 암호화는 배포 강화 가이드에 다루어져 있습니다.
MCP 모드: 내장 모드는 메인 서버 포트에서 /mcp를 마운트하는 구성 플래그를 통해 선택적으로 활성화되며, TLS 종료, 역방향 프록시, 배포 키, 그리고 bearer 토큰 시행을 공유합니다. 독립형 모드는 선택한 주소에 바인딩된 별도의 프로세스를 실행하며, 에어갭 설정이나 독립적인 확장에 유용하다고 설명됩니다.
Obsidian 플러그인: 로컬 파일은 진실의 원천으로 남아 있으며, 플러그인은 일반적인 볼트를 디스크에서 읽고 씁니다. 민감하지 않은 설정과 동기화 인덱스는 볼트 내의 플러그인 data.json에 저장되며, 로그인 상태, 활성 bearer 장치 토큰, 배포 키, 그리고 장치 식별은 Obsidian의 장치 로컬 저장소에 있습니다. 장치 토큰은 사용 시 갱신되며, 90일 동안 유휴 상태이면 만료되고, 절대 수명은 365일입니다. 같은 장치에서 다시 로그인하면 활성 토큰이 회전합니다. 일상적인 기능에는 명령 팔레트, 파일 히스토리, 나란히 diff, 충돌 해결, 선택적 .obsidian 동기화, 장치 관리, 그리고 자체 업데이트가 포함되며, 사용자 설명서에 문서화되어 있습니다.
암호화 상태: README는 버전 1.0이 아직 네이티브 종단 간 암호화를 제공하지 않으며 서버가 볼트 내용을 읽을 수 있다고 명시합니다. 네이티브 볼트별 E2EE는 1.x 로드맵에서 선택적 모드로 계획되어 있으며, 암호화는 히스토리 diff, 3방향 자동 병합, 인라인 SSE 페이로드, 그리고 MCP 읽기/쓰기와 같은 서버 측 기능을 포기하기 때문입니다. 해결책으로, git-crypt를 볼트에 계층화하여 표시된 경로가 서버에 암호문 blob으로 도달하도록 할 수 있으며, 파일 이름은 서버에서 평문으로 유지됩니다. 표준 git clone과 materialize 명령은 여전히 키를 보유한 클라이언트에서 작동합니다. README는 또한 HTTPS, 제한된 trusted_proxies, 암호화된 데이터 디스크, 그리고 암호화된 백업을 실제 배포에 권장합니다.
릴리스 및 상태: README는 플러그인 사용, 서버 관리, CLI 참조, 업그레이드 노트, 배포 강화, OpenAPI 사양, MCP 설정, LLM 유지 관리 위키 워크플로우, 그리고 Obsidian Sync에서 마이그레이션에 대한 문서를 나열합니다. 각 GitHub 릴리스는 Linux amd64/arm64 바이너리, Windows x64 바이너리, 멀티 아키텍처 GHCR Docker 이미지, Obsidian 플러그인 zip, 그리고 SHA256SUMS를 게시합니다. 버전 1.5.1은 관리 패널과 플러그인의 시각적 재설계와 CI 문서 가드를 갖춘 문서 정렬 패스로 설명됩니다. 1.5.0은 git 객체 생존 가능성에 따른 blob 유지, 경로 검증, 속도 제한, 비차단 SSE 종료, 허용 목록에 포함된 .obsidian 동기화, 그리고 배치된 git 읽기를 포함한 감사 수정 및 성능 작업을 다룹니다. 공개 REST API, CLI, 저장소 레이아웃, 플러그인 패키지, 그리고 Docker 이미지는 semver 아래에서 함께 버전화되며, OpenAPI 사양은 호환성 계약입니다. 0.x의 SQLite 데이터베이스는 1.0.0으로 제자리에서 업그레이드할 수 없습니다. 개발 명령에는 cargo fmt, clippy, test, 그리고 플러그인 typecheck, vitest, build가 포함되며, CI는 Linux와 Windows에서 Rust 매트릭스, 플러그인 체크, Docker 빌드, 그리고 릴리스 바이너리 연기 테스트를 실행합니다.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.