So sánh Nextcloud, Seafile, Syncthing và object storage
So sánh Nextcloud, Seafile, Syncthing và object storage theo topology sync, chi phí thực tế trên VPS nhỏ, và lý do sync không thay thế backup.
Bạn nên chạy lựa chọn thay thế Dropbox self-hosted nào?
Bốn lựa chọn thay thế Dropbox self-hosted đáng dùng là Nextcloud, Seafile, Syncthing và object storage kết hợp với một client. Chúng không thể thay thế lẫn nhau. Nextcloud phù hợp với hộ gia đình hoặc nhóm nhỏ cần chia sẻ file cho người khác. Seafile phù hợp với cá nhân hoặc nhóm phải đồng bộ một số lượng rất lớn file nhỏ, trong đó tốc độ sync quan trọng hơn cách dữ liệu được lưu trên disk. Syncthing phù hợp với một người đồng bộ các thiết bị của chính mình, khi không cần gửi link cho người bên ngoài. Object storage phù hợp với archive: lưu trữ các byte có chi phí thấp và hiếm khi được mở.
Hãy chọn dựa trên cách sync hoạt động trước khi so sánh các tính năng. Danh sách tính năng của các sản phẩm thường trông giống nhau. Topology, tức là máy nào giữ bản copy mà mọi máy khác đồng thuận, mới quyết định sau 6 tháng bạn có còn hài lòng hay không.
Topology đồng bộ: một server gốc hay các peer không có server
Có 2 thiết kế, và phần lớn nội dung sau đây phụ thuộc vào lựa chọn của bạn.
Một server gốc. Nextcloud, Seafile và object storage đều hoạt động theo cách này. Một máy, thường là VPS (virtual private server), giữ bản sao chuẩn. Mọi thiết bị đều kết nối đến máy đó. Laptop của bạn có thể tắt trong 1 tháng, sau đó bật lại và tự đồng bộ phần còn thiếu. Điện thoại còn trống 6 GB có thể chỉ giữ một phần dữ liệu, trong khi server giữ toàn bộ. Trình duyệt có thể truy cập các file, nên mới có thể tạo share link.
Các peer không có server. Syncthing hoạt động theo cách này. Các thiết bị tự tìm nhau và trao đổi danh sách file trực tiếp qua kết nối được mã hóa. Không có bản sao nào là bản chuẩn: file tồn tại trên các thiết bị đang giữ file đó và không tồn tại ở nơi nào khác. 2 thiết bị phải online cùng lúc thì thay đổi mới truyền được giữa chúng. Không có URL để bạn gửi cho người khác, vì không có máy nào phục vụ một trang web.
Có 4 hệ quả, và đây là những vấn đề người dùng thường chỉ nhận ra sau này.
- Gửi file cho một người không muốn cài phần mềm cần một server gốc. Link là một URL, còn URL cần một process đang listening trên một port.
- Truy cập file từ một máy bạn không kiểm soát, chẳng hạn laptop công ty, cần một server gốc.
- Một thiết bị đã tắt trong nhiều tuần sẽ đồng bộ phần còn thiếu từ server mỗi khi được bật lên. Trong mô hình peer, thiết bị đó chỉ đồng bộ được khi một thiết bị khác đang giữ dữ liệu tương ứng cũng online. Vì vậy, nhiều người dùng Syncthing chạy một instance trên VPS làm peer luôn online.
- Dung lượng được tính khác nhau. Một server gốc giữ 1 bản sao đầy đủ, cộng với phần dữ liệu mỗi thiết bị giữ cục bộ. 4 peer cùng chia sẻ một folder sẽ giữ 4 bản sao đầy đủ, vì mỗi peer giữ toàn bộ folder.
Nextcloud: người dùng, nhóm và liên kết công khai
Nextcloud là một ứng dụng web PHP. Ứng dụng lưu file của bạn dưới dạng các file thông thường trong một thư mục dữ liệu và theo dõi chúng trong database. Bạn có thể chia sẻ một thư mục với một người dùng, một nhóm hoặc qua liên kết công khai có password và ngày hết hạn. Lịch sử phiên bản được bật mặc định. File đã xóa trước tiên sẽ được chuyển vào thùng rác. Client desktop hỗ trợ Linux, macOS và Windows. Các app iOS và Android là app chính thức. Nếu lý do bạn rời Dropbox là người khác cần nhận file của bạn, thì đây là câu trả lời thực tế.
Cái giá phải trả là có nhiều thành phần phải quản lý. Một cài đặt thông thường chạy web server, PHP-FPM (trình quản lý tiến trình PHP), database như MariaDB hoặc PostgreSQL, và Redis để khóa file. Một background job chạy mỗi 5 phút bằng cron hoặc systemd timer. Trên VPS 1 GB, hệ thống sẽ khởi động được, nhưng một lần upload lớn hoặc lệnh bảo trì occ chạy lâu có thể bị trình out-of-memory killer dừng. Hãy xem 2 GB là mức tối thiểu cho một số ít người dùng. Khi bật thêm app, bạn có thể sẽ cần 4 GB. Chi phí còn lại là việc nâng cấp: các app trong app store được build cho một bản core cụ thể. Vì vậy, hãy kiểm tra các app bạn phụ thuộc có hỗ trợ major version tiếp theo trước khi nâng cấp.
Nextcloud chậm đi khi một account chứa hàng trăm nghìn file nhỏ. Nguyên nhân là mỗi file tương ứng với một row trong bảng file cache và một file thật trên disk. Desktop client cũng phải duyệt từng file một. Ở quy mô gia đình, vấn đề này thường không xuất hiện. Phần cài Nextcloud bằng Docker với TLS và backup trình bày về sizing, TLS (bảo mật tầng truyền tải) và backup. Bạn nên xem phần đó sau khi đã quyết định dùng Nextcloud.
Cần xác định rõ phạm vi sử dụng. Nextcloud cũng có thể chạy calendar, danh bạ, ghi chú và thư viện ảnh. Mỗi app được bật sẽ thêm background work và thêm một thành phần có thể chặn quá trình nâng cấp. Nếu vấn đề thực tế là ảnh, một công cụ chuyên dụng sẽ xử lý tốt hơn: xem Immich để thay thế Google Photos tự host. Nếu vấn đề thực tế là tài liệu và wiki, hãy xem các lựa chọn Notion tự host thay vì chồng thêm app lên file server.
Seafile: được xây dựng cho số lượng rất lớn file nhỏ
Seafile chia mỗi file thành các block và lưu chúng trong một object store nội bộ, được định danh bằng content hash, tương tự cách git dùng cho các object. Đơn vị đồng bộ và chia sẻ là library thay vì cây thư mục. Client upload các block và một commit, thay vì gửi một request cho từng file. Vì vậy, việc đồng bộ một thư mục có 100,000 file nhỏ hoàn tất nhanh hơn nhiều so với giao thức xử lý từng file. Các block giống hệt nhau chỉ được lưu một lần, nên bản sao thứ hai của một file lớn gần như không tốn thêm dung lượng.
Đổi lại, các file trên server không còn là các file theo cách thông thường. Mở thư mục lưu trữ, bạn sẽ thấy các object file có tên dạng hexadecimal. Muốn lấy dữ liệu ra, bạn cần Seafile client hoặc các công cụ export và fsck của Seafile. Backup vẫn hoạt động vì các object đó là file thông thường, nhưng bạn không thể khôi phục riêng một spreadsheet bằng cp. Hãy quyết định ngay xem điều này có chấp nhận được không, vì đây là đặc tính mà nhiều người hối tiếc về sau.
Seafile có community edition và paid professional edition. Ranh giới tính năng giữa hai bản thay đổi theo từng release, vì vậy hãy đọc điều khoản hiện tại trên website của họ trước khi xây dựng hệ thống cho một nhóm dựa trên một tính năng cụ thể. Seafile có client desktop và mobile chính thức. Encrypted library được mã hóa trên client, nên server chỉ lưu ciphertext mà không thể đọc. Nếu mất passphrase, library sẽ không thể đọc được, kể cả với bạn. Mở encrypted library trong trình duyệt đồng nghĩa với việc cung cấp passphrase đó cho web session. Vì vậy, mức bảo đảm cao nhất của cơ chế này chỉ áp dụng cho client desktop và mobile.
Mức tiêu thụ tài nguyên gần tương đương Nextcloud. Bạn phải chạy một database, một memory cache và hai application process, nên 2 GB vẫn là mức tối thiểu hợp lý.
Syncthing: không có gì để đăng nhập
Syncthing là một binary Go duy nhất. Nó theo dõi các thư mục, tìm peer thông qua discovery server hoặc relay, rồi đồng bộ trực tiếp giữa các thiết bị. Không có account và cũng không có trang login cho những người mà bạn đồng bộ cùng. Bạn ghép cặp 2 thiết bị bằng ID và chấp nhận thư mục ở mỗi bên. Đây là phần dễ vận hành nhất trong các lựa chọn ở đây, vì gần như không có gì phải quản lý.
Điều bạn phải đánh đổi là toàn bộ khả năng chia sẻ. Mục tương ứng ghi Device pairing only, no links. Bạn không thể gửi link cho khách hàng, kế toán hoặc người thân. Mobile là khoảng trống còn lại: Android app, no official iOS. FAQ của chính dự án nói rõ: "There are no plans by the current Syncthing team to officially support iOS in the foreseeable future", vì iOS hạn chế xử lý nền đến mức việc đồng bộ ổn định trở nên khó khăn. Người dùng iOS phải dùng app của bên thứ ba.
Mức sử dụng tài nguyên thấp, nhưng có một điểm cần biết. Syncthing giữ một mục index cho mỗi file được đồng bộ, nên mức dùng memory và thời gian scan lần đầu tăng theo số lượng file, không phải theo tổng dung lượng. Lần đầu hash một thư mục lớn sẽ dùng CPU trong một khoảng thời gian, sau đó mức sử dụng sẽ ổn định. Trên gói VPS nhỏ nhất, nó vẫn chạy thoải mái.
Syncthing xử lý conflict bằng cách giữ cả 2 phía. Khi 2 thiết bị cùng thay đổi một file trong lúc không thể nhìn thấy nhau, Syncthing đổi tên một bản copy và giữ nó cạnh bản còn lại, nên bạn sẽ thấy các file như notes.sync-conflict-20260802-141530-K7MB3QT.md. Không có dữ liệu nào bị mất. Nhưng cũng không có dữ liệu nào được merge, và bạn phải tự xử lý.
Object storage với client: lưu trữ dữ liệu giá rẻ, không phải thư mục đồng bộ
Object storage là một bucket tương thích với S3 (simple storage service), có thể tự host bằng MinIO hoặc thuê từ nhà cung cấp. Bạn truy cập bucket bằng một công cụ: rclone trên command line hoặc desktop client hiển thị bucket dưới dạng một drive. Chia sẻ bucket bằng presigned URL, tức là một link có sẵn thời hạn hết hiệu lực do bạn tạo. Versioning là một thiết lập của bucket: Bucket versioning, off by default, vì vậy hãy bật tính năng này khi tạo bucket. Tính năng này không áp dụng cho các object đã upload trước đó.
Vấn đề bắt đầu khi bạn dùng bucket như một thư mục sync. Theo mặc định, không có thành phần nào theo dõi thư mục Documents của bạn. rclone bisync hỗ trợ sync hai chiều, còn tài liệu riêng của rclone nói rõ rằng tính năng này cần được sử dụng cẩn thận. Điểm mạnh của object storage là làm lớp lưu trữ bên dưới: làm đích backup hoặc lớp lưu trữ cho một ứng dụng. Object storage tương thích S3 tự host bằng MinIO trình bày phần server.
Chi phí tài nguyên ở đây có điểm khác biệt. MinIO chỉ là một binary và mức sử dụng khi idle rất thấp. Chi phí thực tế là disk, và trên VPS, đó là block volume thuê theo gigabyte, cộng với bandwidth dùng để chuyển object vào và ra. Cả hai khoản này đều không xuất hiện trong free -h, vì vậy hãy đọc chi phí thực tế mỗi tháng của một VPS trước khi xác định dung lượng archive.
So sánh chia sẻ, client di động và quản lý phiên bản
The data behind this chart
[
{
"tool": "Nextcloud",
"sharing": "Public links, users and groups",
"mobile": "Official iOS and Android apps",
"versioning": "On by default, plus trash"
},
{
"tool": "Seafile",
"sharing": "Public links with password and expiry",
"mobile": "Official iOS and Android apps",
"versioning": "Library history and snapshots"
},
{
"tool": "Syncthing",
"sharing": "Device pairing only, no links",
"mobile": "Android app, no official iOS",
"versioning": "Optional per folder, off by default"
},
{
"tool": "Object storage",
"sharing": "Presigned URLs you generate",
"mobile": "Third party clients only",
"versioning": "Bucket versioning, off by default"
}
]Toàn bộ 4 tùy chọn được chia theo một tiêu chí. Ba tùy chọn cho phép gửi file cho người lạ chỉ cần có trình duyệt. Một tùy chọn chỉ kết nối với các thiết bị bạn đã sở hữu. Mục quản lý phiên bản của Seafile, Library history and snapshots, cần lưu ý: lịch sử được lưu theo từng library, vì vậy khi xóa một library thì lịch sử của library đó cũng bị xóa.
Lấy dữ liệu ra lại
Chi phí thoát nền tảng hiện dễ kiểm tra nhưng có thể rất tốn kém nếu chỉ phát hiện sau này. Hãy kiểm tra trước khi cam kết sử dụng.
Nextcloud lưu file thật trong các thư mục thật, nên tar của thư mục dữ liệu vẫn lấy được tài liệu ngay cả khi ứng dụng không bao giờ khởi động lại. Syncthing cũng làm như vậy trên mọi peer. Đây là phương án thoát nền tảng tốt nhất trong các lựa chọn này: file chỉ đơn giản nằm trên từng thiết bị. Object store của Seafile cần Seafile hoặc các công cụ export của Seafile để ghép lại các block thành file. Object storage cần rclone hoặc công cụ tương đương, có thể thực hiện bằng một command.
Sync không phải là backup, và khoảng trống này là nơi dữ liệu bị mất
Mọi công cụ ở đây đều sao chép các thay đổi giữa các máy. Xóa cũng là một thay đổi. Bạn xóa một thư mục trên laptop, client báo cho server, server áp dụng thay đổi đó, rồi mọi thiết bị khác cũng xóa thư mục này. Ransomware cũng dùng cùng cơ chế: nó mã hóa các file trên máy cục bộ, client phát hiện các file đã thay đổi và upload bản đã mã hóa. Sync đã hoạt động đúng. Dữ liệu của bạn vẫn mất.
Thùng rác và lịch sử phiên bản giúp giảm tác động của sự cố này. Tuy nhiên, chúng cũng hết hạn, có thể bị chính account gây ra lỗi xóa sạch, và nằm trên cùng disk với bản dữ liệu đang dùng. Khi volume bị lỗi, cả file và lịch sử của chúng đều mất.
Backup là một bản sao riêng, nằm trên phần cứng riêng, được tạo theo lịch và đã được bạn restore ít nhất một lần. Hãy backup database trong cùng lần chạy với các file. Restore thư mục dữ liệu Nextcloud mà không có database sẽ tạo ra một instance không biết các file đó tồn tại, và một occ files:scan sau đó sẽ khôi phục các file nhưng làm mất các share và lịch sử phiên bản được lưu trong những bảng đó. Backup restic theo lịch từ một VPS trình bày phiên bản được mã hóa và deduplicate của quy trình này, bao gồm cách kiểm tra restore thay vì mặc định cho rằng nó hoạt động.
Lựa chọn của tôi
Nextcloud phù hợp với hầu hết người đọc bài này. Sau khi rời Dropbox, điều nhiều người thiếu là khả năng gửi một liên kết cho người không bao giờ cài thêm phần mềm và mở file trên điện thoại. Nextcloud hỗ trợ cả hai việc này bằng client chính thức và không có tier trả phí. Đổi lại, dùng 2 GB RAM là mức hợp lý.
Tôi giữ 2 ngoại lệ. Nếu thư mục chỉ thuộc về bạn và chỉ được sử dụng trên phần cứng do bạn sở hữu, hãy chạy Syncthing. Bạn sẽ không phải patch server và không phải bảo vệ web login. Nếu bạn đồng bộ một working directory có hàng trăm nghìn file, hãy chạy Seafile. Bạn phải chấp nhận storage dạng opaque để đổi lấy tốc độ. Object storage nên nằm bên dưới công cụ bạn chọn, làm backup target, không nên nằm phía trước để làm công cụ sync.
FAQ
Syncthing có phải là bản sao lưu cho laptop của tôi không?
Không. Syncthing sao chép các thay đổi giữa các thiết bị. Vì vậy, thao tác xóa cũng được xem là một thay đổi, và file bạn vô tình xóa sẽ biến mất khỏi mọi thiết bị đã ghép nối trong vài giây. Tính năng versioning theo từng folder có thể giúp hạn chế việc này, nhưng mặc định bị tắt cho đến khi bạn bật trên từng folder. Hãy duy trì một bản backup thực sự trên phần cứng riêng, thực hiện theo lịch, và thử restore một lần để xác nhận quá trình restore hoạt động.
Tôi có thể chạy Nextcloud và Syncthing trên cùng một VPS không?
Có. Hai dịch vụ listen trên các port khác nhau nên không xung đột. Không trỏ folder của Syncthing vào data directory của Nextcloud. Nextcloud theo dõi mọi file trong database. Vì vậy, các file xuất hiện trên disk bên dưới directory này sẽ vẫn vô hình cho đến khi bạn chạy occ files:scan. Các file bị xóa bên dưới directory này cũng để lại những row trong database trỏ đến file không còn tồn tại. Hãy cấp cho Syncthing một directory riêng, hoặc gắn directory đó vào Nextcloud dưới dạng external storage để Nextcloud biết cần kiểm tra directory này.
Dịch vụ nào cho phép tôi chia sẻ link với người không có account?
Nextcloud và Seafile đều tạo được public link, kèm tùy chọn password và ngày hết hạn. Object storage cung cấp presigned URL, tự ngừng hoạt động sau thời gian bạn đặt. Syncthing không hỗ trợ cách này. Mô hình chia sẻ của Syncthing là ghép nối thiết bị. Vì vậy, người kia phải cài Syncthing, cung cấp device ID cho bạn và chấp nhận folder.
Server cần bao nhiêu dung lượng disk?
Với server lưu bản dữ liệu chính, hãy dự trù toàn bộ dung lượng của dữ liệu được chia sẻ, cộng thêm dung lượng cho version history và trash, cùng khoảng trống làm việc cho các upload đang chạy. Version history là phần thường bị đánh giá thấp. Nếu giữ mọi version của một file 2 GB thay đổi hằng ngày, dung lượng sẽ tăng rất nhanh. Vì vậy, hãy đặt retention policy ngay từ đầu. Đặt dữ liệu trên một volume riêng giúp phần dung lượng tăng thêm không chiếm root filesystem. Khi disk đầy, toàn bộ server sẽ dừng hoạt động thay vì chỉ một upload bị lỗi.