Từ bỏ Cloud: Tự host CouchDB để đồng bộ Obsidian siêu tốc

HomeLab tutorial - IT technology blog
HomeLab tutorial - IT technology blog

Thoát khỏi sự phụ thuộc vào Cloud của bên thứ ba

Sau sáu tháng áp dụng quy trình này vào công việc hàng ngày, tôi nhận ra rằng việc tự host (self-hosting) hệ thống đồng bộ Obsidian là quyết định sáng suốt nhất cho kho ghi chú của mình. Hầu hết mọi người bắt đầu với Obsidian Sync hoặc các công cụ đồng bộ thư mục như iCloud hoặc Dropbox. Chúng hoạt động tốt lúc đầu, nhưng nhanh chóng trở thành cơn ác mộng khi bạn cố gắng kết hợp nhiều nền tảng như Linux, Android và Windows. Cuối cùng, bạn sẽ gặp phải những tệp “Xung đột đồng bộ” (Sync Conflict) đáng sợ làm lộn xộn vault của mình.

Obsidian LiveSync thay đổi cuộc chơi bằng cách sử dụng giao thức cơ sở dữ liệu CouchDB. Thay vì đẩy toàn bộ tệp tin qua lại, nó đồng bộ từng thay đổi nhỏ bên trong cơ sở dữ liệu. Điều này mang lại tốc độ cập nhật gần như tức thì — tương tự như Google Docs — nhưng với sự an tâm tuyệt đối rằng dữ liệu của bạn không bao giờ rời khỏi phần cứng của chính bạn.

Tại sao đồng bộ qua cơ sở dữ liệu tốt hơn đồng bộ tệp tin

Bí quyết nằm ở cách dữ liệu di chuyển. Trước khi chúng ta bắt đầu với dòng lệnh, đây là lý do tại sao CouchDB là tiêu chuẩn vàng cho những người dùng nâng cao muốn có một trải nghiệm liền mạch.

Đồng bộ dựa trên tệp tin (Syncthing, iCloud, Git)

Các hệ thống như Syncthing giám sát các thư mục của bạn. Khi bạn lưu một ghi chú, hệ thống sẽ đẩy toàn bộ tệp (hoặc các khối dữ liệu lớn) sang các thiết bị khác. Nếu bạn chỉnh sửa cùng một đoạn văn trên điện thoại và laptop cùng lúc, hệ thống sẽ không biết cách hợp nhất chúng. Kết quả là bạn nhận được các tệp MyNote (Conflict 1).md. Trên di động, các ứng dụng này thường thất bại vì iOS và Android có cơ chế tắt các tiến trình chạy ngầm rất quyết liệt để tiết kiệm pin.

Đồng bộ dựa trên cơ sở dữ liệu (CouchDB + LiveSync)

Plugin Obsidian LiveSync coi các ghi chú của bạn như các tài liệu trong một cơ sở dữ liệu. Nếu bạn gõ một câu duy nhất, chỉ những ký tự đó được sao chép. Trong thử nghiệm của tôi, một bản cập nhật ghi chú 10KB đồng bộ trên ba thiết bị trong chưa đầy 400ms. Nó xử lý xung đột thông minh hơn nhiều và duy trì kết nối ngay cả trên mạng 4G chập chờn, nơi mà các ứng dụng dựa trên tệp tin thường bỏ cuộc.

Ưu và nhược điểm của phương pháp CouchDB

Ưu điểm

  • Tốc độ thời gian thực: Các thay đổi xuất hiện trên máy tính bảng gần như ngay trước khi ngón tay bạn rời khỏi bàn phím máy tính để bàn.
  • Mã hóa đầu cuối (E2EE): Plugin sử dụng E2EE. Dữ liệu của bạn được mã hóa cục bộ trước khi chạm tới server.
  • Tự do nền tảng tuyệt đối: Chạy trên Docker, vì vậy bạn có thể host nó trên một chiếc Raspberry Pi $35 hoặc một VPS giá rẻ. Hoạt động hoàn hảo trên iOS, Android, Linux, macOS và Windows.
  • Lịch sử phiên bản ẩn: CouchDB lưu giữ lịch sử sửa đổi bên dưới hệ thống, tạo một mạng lưới an toàn nếu bạn lỡ tay xóa một canvas phức tạp hay một ghi chú dài.

Thách thức

  • Rào cản kỹ thuật: Bạn không thể chỉ nhấn một nút; bạn sẽ cần dành khoảng 20 phút làm việc với dòng lệnh (CLI).
  • Phần cứng luôn bật: Bạn cần một server (hoặc HomeLab) chạy 24/7 và một reverse proxy để truy cập an toàn khi bạn không ở nhà.

Stack triển khai lý tưởng

Tôi khuyên dùng stack cụ thể này để có một môi trường ổn định, “cài đặt một lần là xong”:

  • Container Engine: Docker cùng với Docker Compose để dễ dàng cập nhật.
  • Cơ sở dữ liệu: CouchDB 3.3.3 (nhánh ổn định hiện tại).
  • Reverse Proxy: Nginx Proxy Manager hoặc Caddy để quản lý chứng chỉ SSL.
  • Chiến lược sao lưu: Một cron job đơn giản hàng đêm để rsync volume dữ liệu sang ổ đĩa khác.

Từng bước: Triển khai CouchDB

Chúng ta sẽ sử dụng Docker Compose để chạy CouchDB. Điều này giúp cấu hình của bạn có thể di động — nếu bạn mua server mới, chỉ cần di chuyển thư mục và chạy lại.

1. Thiết lập thư mục

mkdir -p ~/homelab/couchdb/data
cd ~/homelab/couchdb

2. Tạo tệp Docker Compose

Tạo một tệp tên là docker-compose.yml. Hãy đảm bảo chọn một mật khẩu mạnh; cơ sở dữ liệu này sẽ nắm giữ toàn bộ cuộc sống số của bạn.

services:
  couchdb:
    image: couchdb:3.3.3
    container_name: obsidian_couchdb
    restart: always
    environment:
      - COUCHDB_USER=admin
      - COUCHDB_PASSWORD=mat_khau_sieu_bao_mat_cua_ban
    ports:
      - "5984:5984"
    volumes:
      - ./data:/opt/couchdb/data
      - ./local.ini:/opt/couchdb/etc/local.d/local.ini

3. Tinh chỉnh CouchDB cho Obsidian

Các cài đặt CouchDB tiêu chuẩn hơi quá hạn chế đối với Obsidian. Bạn cần cho phép các tệp đính kèm lớn hơn và bật CORS để plugin có thể giao tiếp với cơ sở dữ liệu. Tạo một tệp local.ini trong cùng thư mục:

[couchdb]
single_node=true
max_document_size = 4294967296 # Đặt thành 4GB cho các vault lớn

[chttpd]
require_valid_user = true
max_http_pipeline_size = 10
enable_cors = true

[cors]
origins = *
credentials = true
methods = GET, PUT, POST, HEAD, DELETE
headers = accept, authorization, content-type, origin, referer

4. Khởi chạy

Khởi chạy dịch vụ bằng một lệnh duy nhất:

docker compose up -d

Kiểm tra xem nó có hoạt động không bằng cách truy cập http://YOUR_SERVER_IP:5984/_utils/. Đây là giao diện Fauxton UI, nơi bạn có thể quản lý cơ sở dữ liệu của mình một cách thủ công nếu cần.

Kết nối Plugin Obsidian

Bây giờ, hãy mở Obsidian và cài đặt plugin **”Self-hosted LiveSync”**. Đừng nhầm lẫn với các công cụ đồng bộ cộng đồng khác.

  1. Trong cài đặt plugin, đặt chế độ đồng bộ thành **”CouchDB”**.
  2. Nhập URL server của bạn. **Mẹo nhỏ:** Bạn phải sử dụng HTTPS (ví dụ: https://notes.tenmiencuaban.com) để plugin hoạt động trên di động. Hãy thiết lập một reverse proxy với Let’s Encrypt để xử lý SSL.
  3. Nhập thông tin đăng nhập admin bạn đã tạo trong tệp Docker.
  4. Chọn tên cơ sở dữ liệu như my_vault.
  5. Bật **”End-to-End Encryption”** và chọn một mật khẩu (passphrase) dài. Điều này giữ cho ghi chú của bạn riêng tư ngay cả khi server bị xâm nhập.
  6. Nhấn “Check and Initialize Database.”

Bảo trì và mở rộng lâu dài

Vault của tôi đã tăng lên 5,2GB, chứa đầy hình ảnh chất lượng cao và tệp PDF. Mặc dù CouchDB rất mạnh mẽ, hiệu suất sẽ mượt mà hơn nếu thỉnh thoảng bạn chạy lệnh “Compact” trong giao diện Fauxton UI. Việc này sẽ loại bỏ các phiên bản cũ của ghi chú mà bạn không còn cần nữa, giúp tệp cơ sở dữ liệu luôn gọn nhẹ.

Để sao lưu, tôi sử dụng một script đơn giản để dừng container, sao chép thư mục data sang NAS và khởi động lại. Vì CouchDB tuân thủ tính chất ACID, bạn cũng có thể sử dụng tính năng replication (sao chép) có sẵn của nó để đồng bộ dữ liệu sang một instance CouchDB thứ hai ở nơi khác nhằm tối đa hóa khả năng dự phòng.

Lời kết

Chuyển từ các dịch vụ cloud độc quyền sang CouchDB tự host là một thắng lợi lớn cho quyền tự chủ kỹ thuật số. Bạn không còn phải trả phí thuê bao hàng tháng và có toàn quyền kiểm soát những suy nghĩ của mình. Việc thiết lập tốn một chút công sức với CLI, nhưng thành quả là một hệ thống đồng bộ mạnh mẽ, nhanh như chớp, biến Obsidian thành một công cụ riêng tư, cao cấp thực thụ.

Share: