
Cách đồng bộ vault Obsidian qua các thiết bị an toàn
Học cách đồng bộ hóa an toàn vault Obsidian qua các thiết bị bằng cách tự host Synch và Ignis trong mạng riêng Cloudflare Zero Trust cực kỳ bảo mật.
Mục lục
Obsidian là một ứng dụng quản lý ghi chú/tri thức theo triết lý local-first (ưu tiên lưu trữ cục bộ). Mỗi ghi chú thực chất là một file markdown nằm trên thiết bị và hoàn toàn thuộc quyền kiểm soát của bạn. Tuy nhiên, chúng ta thường mong muốn đồng bộ cùng một vault (kho ghi chú) trên cả laptop, điện thoại và các thiết bị khác, hoặc có thể truy cập từ xa thông qua trình duyệt web khi cần thiết.

Hiện có nhiều giải pháp đồng bộ hóa cho Obsidian, nhưng chúng đều phải đánh đổi giữa tính năng xử lý xung đột, bảo mật mã hóa và chủ quyền dữ liệu cá nhân. Synch là một ứng dụng mã nguồn mở giúp đồng bộ hóa các vault Obsidian với cơ chế mã hóa đầu cuối (E2E) và tự động giải quyết xung đột trên máy chủ tự host.
Mặc dù phương pháp local-first của Obsidian hoạt động hoàn hảo trong hầu hết thời gian, đôi khi chúng ta vẫn cần truy cập ghi chú từ xa qua trình duyệt web. Ignis là giải pháp mã nguồn mở cho phép chạy Obsidian trực tiếp trên trình duyệt web với trải nghiệm gần như ứng dụng gốc, giúp bạn dễ dàng đọc và chỉnh sửa ghi chú từ bất kỳ đâu.
Trong hướng dẫn này, chúng ta sẽ thiết lập Synch và Ignis trên một VPS, đồng thời bảo mật chúng bên trong mạng riêng Cloudflare Zero Trust thay vì mở trực tiếp ra internet công cộng.


Hướng dẫn liên quan
Cách expose Hermes Agent riêng tư bằng Cloudflare WARP
Tìm hiểu cách expose và truy cập an toàn vào Hermes Agent của bạn trên toàn cầu bằng Cloudflare WARP và Zero Trust mà không cần mở cổng firewall inbound.
8 PHÚT ĐỌCĐồng bộ hóa Vault Obsidian bảo mật với Synch
Synch cung cấp các tính năng nổi bật sau:
- Đồng bộ hóa vault ngay khi phát hiện thay đổi
- Mã hóa dữ liệu vault đầu cuối trước khi upload
- Khôi phục từ lịch sử phiên bản
- Tự động xử lý và giải quyết xung đột file
Synch tạo ra một vault key (khóa giải mã) 32-byte ngẫu nhiên trên thiết bị của bạn, dùng để mã hóa toàn bộ dữ liệu ghi chú. Khi tạo vault từ xa, bạn sẽ chọn một vault password (mật khẩu vault); mật khẩu này dùng để bảo vệ vault key để khóa có thể được lưu trữ an toàn trên server và giải mã trên các thiết bị khác của bạn.
Việc giải quyết xung đột ghi chú được xử lý trực tiếp trên thiết bị khách (client) thay vì trên server. Nếu hai thiết bị cùng chỉnh sửa một ghi chú đồng thời, server sẽ giữ phiên bản nào gửi đến trước và báo cho thiết bị còn lại rằng file của họ đã lỗi thời. Thiết bị đó sẽ tự động gộp phiên bản mới từ server vào các thay đổi cục bộ của mình rồi mới upload bản ghi chú cuối cùng lên.
Thiết lập Synch trên VPS
Tạo Bản ghi Tên miền (DNS)
Tạo một bản ghi A trên Cloudflare và đặt trạng thái proxy là DNS only (bỏ qua CDN của Cloudflare).

Cài đặt Synch Docker trên Ubuntu
Clone Repository
git clone https://github.com/hjinco/synch.git
# Navigate to the API folder
cd synch/apps/api
# Copy the example environment file:
cp .env.example .env
Chỉnh sửa các giá trị trong .env
PUBLIC_URL=synch.pafor.me: Điền tên miền công cộng của server Synch (tên miền bạn vừa cấu hình ở bước trên).BETTER_AUTH_SECRETvàSYNC_TOKEN_SECRET: Tạo các khóa bí mật bảo mật bằng cách sử dụng công cụ tạo key online hoặc chạy lệnhopenssl rand -hex 32hai lần trong terminal của bạn.AUTH_ALLOWED_EMAILS: Danh sách các email được phép đăng ký và tạo tài khoản (ngăn cách bằng dấu phẩy).
Thêm Tên miền vào Caddyfile
Thông tin chi tiết về cách tích hợp module Cloudflare DNS vào Caddy và chạy bằng Docker container được trình bày trong bài viết tự host Buzz của chúng tôi.

Hướng dẫn tự host
Tự host Buzz của Block: Không gian cộng tác giữa người và AI
Tìm hiểu cách định cấu hình Caddy để tự động cấp chứng chỉ SSL/TLS bằng cách sử dụng các thử thách DNS của Cloudflare trong các vùng chứa Docker.
12 PHÚT ĐỌCThêm biến môi trường SYNCH_DOMAIN vào file Caddyfile và trỏ về cổng 8787 của container Synch:
{
acme_dns cloudflare {env.CLOUDFLARE_API_TOKEN}
}
{$SYNCH_DOMAIN} {
encode zstd gzip
reverse_proxy host.docker.internal:8787
}
Khởi chạy container:
docker compose up -d
Chạy lệnh curl sau để kiểm tra xem hệ thống đã hoạt động chưa:
curl https://synch.pafor.me/health
Kết nối Obsidian với Server Synch
Cài đặt Plugin Synch trên Obsidian
Vào Cài đặt (Settings) -> Community plugins và nhấn nút 'Browse':

Tìm kiếm và cài đặt plugin 'Synchrun':

Sau khi cài đặt xong 'Synchrun', vào phần cài đặt của plugin này, kích hoạt tùy chọn 'Use a self-hosted server'. Điền địa chỉ https://synch.pafor.me vào trường 'Server URL' và nhấn 'Save'.

Nhấn nút 'Sign in on this device' bên dưới mục 'Account'. Tiến hành đăng ký tài khoản (hãy sử dụng đúng email bạn đã khai báo trong danh sách AUTH_ALLOWED_EMAILS), bạn sẽ được chuyển đến trang ủy quyền sau:

Nhấn nút 'Allow Obsidian sign-in':

Nhấn nút 'Return to Obsidian' rồi click chọn 'Create vault':

Đặt tên cho vault và mật khẩu để tạo vault mới.

Quá trình đồng bộ hóa sẽ bắt đầu ngay lập tức và có thể mất một thời gian tùy theo dung lượng vault của bạn. Khi đồng bộ hoàn tất, dung lượng bộ nhớ đã sử dụng sẽ được hiển thị.

Truy cập Obsidian qua Web bằng Ignis
Ignis thay thế các Electron API của Obsidian bằng Web API, cho phép mã nguồn JavaScript của Obsidian chạy trực tiếp trên trình duyệt web tiêu chuẩn. Tất cả các file markdown và tài liệu đính kèm đều được lưu trực tiếp trên hệ thống file của máy chủ host.
Tuy nhiên, do hạn chế của môi trường sandbox trình duyệt, một số tính năng hoặc plugin yêu cầu truy cập API của Node.js hoặc Electron sẽ không thể hoạt động. Vui lòng tham khảo các hướng dẫn về Hạn chế của Ignis và Khả năng tương thích plugin để biết thêm chi tiết.
Cài đặt Ignis
Chúng ta sẽ cài đặt Ignis trên VPS bằng Docker và mount thư mục lưu trữ vào ./vaults. Thư mục này sau đó sẽ được đồng bộ hóa tự động bằng Synch CLI với vault từ xa mà chúng ta đã thiết lập ở phần trước.
Vì Ignis không có sẵn hệ thống xác thực người dùng, chúng ta sẽ giấu nó an toàn đằng sau mạng riêng ảo Cloudflare Zero Trust.
Tạo Bản ghi DNS

Thêm Tên miền vào Caddyfile
Thêm tên miền obsidian.pafor.me vào Caddyfile tương tự như cách làm với synch.pafor.me:
{$OBSIDIAN_DOMAIN} {
encode zstd gzip
reverse_proxy host.docker.internal:9898
}
Khởi chạy Ignis bằng Docker
Lưu file cấu hình Docker Compose sau thành ignis-docker-compose.yml trên VPS:
services:
ignis:
image: nobbe/ignis:latest
ports:
- "9898:8080"
environment:
# match these to your host user (run: id)
- PUID=1000
- PGID=1000
- WS_ORIGINS=https://obsidian.pafor.me
volumes:
- ./vaults:/vaults
- ./data:/app/data
- obsidian-app:/app/obsidian-app
restart: unless-stopped
volumes:
obsidian-app:
- Sử dụng cổng
9898trên máy chủ host vì cổng8080rất dễ bị trùng lặp với các dịch vụ khác. - Chạy lệnh
idtrên VPS để lấy thông sốUIDvàGIDcủa user trên máy chủ nhằm đảm bảo phân quyền ghi đọc chính xác. - Đặt
WS_ORIGINSchỉ cho phép kết nối WebSocket từ đúng tên miền của bạn để tăng độ bảo mật.
Khởi chạy container Ignis:
docker compose -f ignis-docker-compose.yml up -d
Khi bạn truy cập tên miền của mình trên trình duyệt web, giao diện 'Vault Manager' sẽ hiện ra. Thư mục này hiện tại trống vì chưa có vault nào được liên kết. Ở phần tiếp theo, chúng ta sẽ cấu hình 'Synch CLI' để đồng bộ dữ liệu từ vault từ xa về máy chủ.

Giải quyết Vấn đề Firewall của Docker
Mặc định, Docker tự động chèn các quy tắc DNAT và FORWARD của riêng nó vào iptables, chuyển tiếp trực tiếp lưu lượng truy cập từ internet công cộng vào các cổng container đang hoạt động. Điều này bỏ qua hoàn toàn chuỗi bảo vệ INPUT thông thường của UFW hoặc iptables trên Ubuntu. Để chặn lưu lượng truy cập công cộng và giữ cho các container hoàn toàn riêng tư, hãy thêm các quy tắc sau vào iptables:
# Chặn toàn bộ lưu lượng truy cập bên ngoài
sudo iptables -I DOCKER-USER -i ext_if -j DROP
# Chỉ cho phép lưu lượng truy cập từ địa chỉ IP riêng của client Cloudflare WARP
sudo iptables -I DOCKER-USER -i ext_if -s 100.96.0.10 -j ACCEPT
Cấu hình Synch CLI
Synch CLI là công cụ dòng lệnh chạy headless (không giao diện), cho phép bạn đồng bộ hóa dữ liệu vault trực tiếp trên các máy chủ từ xa mà không cần cài đặt ứng dụng Obsidian hoàn chỉnh.
Build Synch CLI từ mã nguồn repository synch bạn đã clone. Quá trình build yêu cầu Node.js >= 22.5 (vì CLI sử dụng thư viện node:sqlite và các API trình duyệt toàn cầu như fetch, WebSocket, WebCrypto) và trình quản lý gói pnpm (repo là một pnpm workspace, sử dụng phiên bản pnpm@10.33.0):
# Check versions
node --version # must be >= 22.5
pnpm --version
# In the repos root
pnpm install
# Build the CLI bundle
pnpm -C apps/cli build
# After a successful build you have `apps/cli/dist/synch.js`. Make it executable and put it on your PATH
chmod +x apps/cli/dist/synch.js
ln -sf "$PWD/apps/cli/dist/synch.js" "$HOME/.local/bin/synch"
# Verification
synch --help
Vì Synch CLI đang chạy trên cùng một máy chủ VPS với máy chủ lưu trữ Synch, nó có thể tự động kết nối trực tiếp với server API cục bộ. Nếu bạn cấu hình một server khác, hãy chạy lệnh synch login --api-url <remote-synch-api-url> để chỉ định máy chủ API đích.

Chạy lệnh synch login trong terminal của bạn, hệ thống sẽ trả về một đường link đăng nhập để xác thực:

Đăng nhập thông qua trình duyệt bằng tài khoản email trùng với tài khoản bạn đang sử dụng trên ứng dụng Obsidian desktop.

Chạy lệnh synch vault connect --vault ~/vaults/<vaultname> --vault-id asadqe-7b29-4677-fsad-234asdafasd để liên kết thư mục vault cục bộ trên VPS với vault từ xa trên server của bạn.
ID của vault từ xa có thể được tìm thấy bằng cách vào plugin Synchrun trên máy tính và nhấn 'Manage remote vaults'. Hệ thống sẽ mở một trang web hiển thị danh sách các vault từ xa của bạn, mỗi vault đi kèm với một dãy GUID duy nhất (ví dụ: 123e4567-e89b-12d3-a456-426614174000):


Nhập mật khẩu vault khi được yêu cầu để hoàn tất liên kết. Sau khi kết nối thành công, chạy lệnh synch sync --vault ~/vaults/<vault-name> to bắt đầu đồng bộ lần đầu tiên. Quá trình này có thể mất một thời gian tùy theo lượng file ghi chú của bạn.

Để tự động hóa hoàn toàn việc này, hãy tạo và kích hoạt một dịch vụ systemd chạy lệnh synch watch liên tục trong nền, giúp đồng bộ hóa ghi chú ngay lập tức khi máy chủ khởi động:
sudo tee /etc/systemd/system/synch-watch.service <<'EOF'
[Unit]
Description=Synch vault watcher
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=<username>
ExecStart=/home/<username>/.local/bin/synch watch --vault /home/<username>/vaults/<vault-name>
WorkingDirectory=/home/<username>/vaults
Environment="PATH=/home/<username>/.local/bin:/home/<username>/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Environment="HOME=/home/<username>"
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now synch-watch.service
Bây giờ, hãy mở tên miền obsidian.pafor.me trên trình duyệt. Bạn sẽ thấy giao diện sử dụng và bố cục layout gần như giống hệt với app Obsidian trên máy tính:

Bấm vào icon Cài đặt (Settings), bạn sẽ thấy hầu hết mọi cấu hình cốt lõi đều được giữ nguyên, chỉ có các community plugin là bạn cần cài đặt lại từ đầu:

Để chạy thử nghiệm chu trình đồng bộ, bạn hãy thêm một ghi chú mới ngay trên trình duyệt:

Ghi chú này sẽ ngay lập tức được đồng bộ ngược lại về ứng dụng Obsidian trên máy tính của bạn. Lưu ý rằng các thư mục trống sẽ không hiển thị trên giao diện của Ignis.

Giao diện hiển thị khi truy cập obsidian.pafor.me trên trình duyệt điện thoại di động:


Khi bạn xóa một ghi chú trên Ignis, ghi chú đó sẽ được chuyển an toàn vào thư mục rác cục bộ ~/vaults/<vault-name>/.trash để tránh mất mát dữ liệu ngoài ý muốn.
Lời kết cho giải pháp tự host Vault Obsidian
Sự kết hợp giữa Synch và Ignis giúp vault Obsidian của bạn luôn khả dụng trên mọi thiết bị, chạy hoàn toàn trên hạ tầng VPS do chính bạn kiểm soát. Việc đặt các dịch vụ này đằng sau mạng riêng ảo Cloudflare Zero Trust đem lại một hàng rào bảo mật tuyệt đối, ngăn chặn mọi nỗ lực xâm nhập từ internet công cộng.
Tất nhiên, Ignis không được thiết kế để thay thế hoàn toàn ứng dụng Obsidian gốc trên máy tính. Nó đóng vai trò như một giải pháp cứu cánh tạm thời, giúp bạn đọc và sửa ghi chú nhanh chóng qua bất kỳ trình duyệt nào khi không mang theo máy tính cá nhân. Đối với việc soạn thảo tài liệu lâu dài hay quản lý vault chuyên sâu, ứng dụng gốc trên máy tính vẫn là lựa chọn đem lại trải nghiệm tốt nhất.
Do cơ chế mã hóa đầu cuối cực kỳ mạnh mẽ của Synch, mật khẩu vault từ xa của bạn phải đủ phức tạp để tránh bị tấn công brute-force. Việc ghi nhớ mật khẩu này là vô cùng quan trọng vì server không hề lưu trữ vault key giải mã; nếu quên mật khẩu, dữ liệu ghi chú của bạn sẽ vĩnh viễn không thể khôi phục. Ngoài ra, hãy chú ý bảo mật VPS của bạn thật tốt cùng với các bản snapshot và backup định kỳ.
Mặc dù tính năng lưu lịch sử phiên bản đã mã hóa và khôi phục file đã xóa của Synch bảo vệ bạn khỏi hầu hết rủi ro mất dữ liệu, việc lưu trữ thêm một bản backup độc lập của vault Obsidian ở một nơi khác vẫn luôn là điều cần thiết.
References
Bài viết liên quan

AI & Tác tử
Cách hiển thị riêng tư Hermes Agent với Cloudflare WARP
Tìm hiểu cách hiển thị và truy cập an toàn Hermes Agent trên toàn cầu bằng nền tảng Cloudflare WARP và Zero Trust mà không cần mở bất kỳ cổng tường lửa nào.
10 PHÚT ĐỌC
Cloudflare
Xây dựng hệ thống bộ nhớ AI vĩnh viễn trên Cloudflare
Tìm hiểu cách xây dựng hệ thống bộ nhớ AI vĩnh viễn và tự host trên Cloudflare với Second Brain và MCP. Chia sẻ ngữ cảnh giữa Claude và Obsidian hiệu quả.
11 PHÚT ĐỌC
Bảo mật
Chuyển đổi giữa các tổ chức Cloudflare WARP trên máy Mac
Hướng dẫn cách cấu hình và chuyển đổi nhanh giữa nhiều tổ chức Cloudflare WARP trên macOS bằng file .mobileconfig. Hướng dẫn MDM đầy đủ cho quản trị viên.
5 PHÚT ĐỌC
Bài trước
Tự host Buzz của Block: Không gian cộng tác giữa người và AI
Tìm hiểu cách tự host Block's Buzz trên VPS Linux phía sau Cloudflare. Vận hành không gian làm việc Nostr bảo mật giúp con người và AI cộng tác hiệu quả.

Bài sau
Cách hiển thị riêng tư Hermes Agent với Cloudflare WARP
Tìm hiểu cách hiển thị và truy cập an toàn Hermes Agent trên toàn cầu bằng nền tảng Cloudflare WARP và Zero Trust mà không cần mở bất kỳ cổng tường lửa nào.