So sánh Nextcloud, Seafile, Syncthing tự host
So sánh Nextcloud, Seafile, Syncthing và object storage theo topology sync, chi phí thật trên VPS nhỏ, cùng lý do sync không thay thế backup.
Nên chạy giải pháp Dropbox tự host nào?
Bốn giải pháp thay thế Dropbox tự host đáng để bạn cân nhắc là Nextcloud, Seafile, Syncthing và object storage kết hợp với 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ỏ, nơi người khác cần nhận file. Seafile phù hợp với cá nhân hoặc nhóm cần sync số lượng rất lớn file nhỏ, khi 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 cần sync các thiết bị của chính mình, khi không ai bên ngoài cần dùng link. Object storage phù hợp với lưu trữ archive: dung lượng rẻ và bạn hiếm khi mở dữ liệu.
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 thường trông giống nhau. Topology, tức máy nào giữ bản copy mà mọi máy khác đồng thuận, mới quyết định sau sáu tháng bạn còn hài lòng hay không.
Cấu trúc đồng bộ: một server lưu bản chính hoặc các peer không có server
Có 2 thiết kế, và phần lớn nội dung bên dưới phụ thuộc vào lựa chọn của bạn.
Một server lưu bản chính. 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 chính thức. Mọi thiết bị đều kết nối với máy đó. Laptop của bạn có thể tắt trong một tháng, sau đó bật lại và tự catch up. Đ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ộ dữ liệu. 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 chính thức: file chỉ tồn tại trên các thiết bị đang giữ file đó, 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 được truyền giữa chúng. Không có URL để gửi cho người khác, vì không có máy nào đang 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ỉ gặp về sau.
- Gửi file cho người không muốn cài phần mềm cần một server lưu bản chính. Link là một URL, còn URL cần một process đang listen 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 lưu bản chính.
- Thiết bị đã tắt trong nhiều tuần sẽ catch up từ server mỗi khi được bật lại. Trong mô hình peer, thiết bị chỉ catch up khi một thiết bị khác đang giữ dữ liệu đó 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 lưu trữ được tính khác nhau. Server lưu bản chính giữ 1 bản sao đầy đủ, cộng với phần dữ liệu mà 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: user, group và public link
Nextcloud là một web application viết bằng PHP. Nó lưu file của bạn dưới dạng file thông thường trong một data directory và theo dõi chúng trong database. Bạn có thể share một folder với một user, một group hoặc tạo public link có password và ngày hết hạn. Version history được bật mặc định và file đã xóa trước tiên sẽ được chuyển vào trash bin. Desktop client hỗ trợ Linux, macOS và Windows; 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à lựa chọn phù hợp.
Đổi lại, hệ thống có nhiều thành phần. Một cài đặt thông thường chạy web server, PHP-FPM (PHP process manager), database như MariaDB hoặc PostgreSQL và Redis để khóa file. Một background job chạy mỗi 5 phút từ cron hoặc systemd timer. Trên VPS 1 GB, Nextcloud sẽ khởi động được, nhưng một lần upload lớn hoặc occ maintenance command chạy lâu có thể khiến out-of-memory killer can thiệp. Hãy xem 2 GB là mức tối thiểu cho một nhóm nhỏ user, và dự kiến cần 4 GB khi bật thêm app. Chi phí khác là việc upgrade: app trong app store được build cho một core release 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 upgrade.
Nextcloud sẽ chậm khi một account chứa hàng trăm nghìn file nhỏ, vì mỗi file là một row trong file cache table và một file thực trên disk; desktop client phải duyệt từng file một. Ở quy mô gia đình, vấn đề này hầu như không xảy ra. Nội dung về sizing, TLS (transport layer security) và backup có trong bài cài Nextcloud bằng Docker có TLS và backup, đây là nơi bạn nên xem sau khi đã quyết định.
Một cảnh báo về phạm vi sử dụng. Nextcloud cũng có thể chạy calendar, contact, note và photo library của bạn. Mỗi app được bật sẽ thêm background work và thêm một yếu tố có thể chặn quá trình upgrade. Nếu vấn đề thực sự là photo, một tool chuyên dụng sẽ xử lý tốt hơn: xem Immich, lựa chọn thay thế Google Photos tự host. Nếu vấn đề thực sự là document và wiki, hãy xem các lựa chọn thay thế Notion tự host thay vì chất thêm app lên file server. Việc chỉnh sửa các document đó trong browser lại cần một server riêng, không phải một Nextcloud app. Vì vậy, hãy cân nhắc OnlyOffice so với Collabora trước khi giả định rằng mức tối thiểu 2 GB vẫn đủ.
Seafile: được thiết kế 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 object store nội bộ, được định danh bằng content hash, theo cùng ý tưởng mà git dùng cho các object của nó. Đơn vị đồng bộ và chia sẻ là library, không phải 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 thông thường. Mở thư mục storage, 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 riêng 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ể restore 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 điểm mà nhiều người chỉ thấy 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 có thể thay đổi theo từng release, nên hãy đọc điều khoản hiện tại trên website của Seafile trước khi lên kế hoạch triển khai team dựa trên một tính năng cụ thể. Seafile có client chính thức cho desktop và mobile. 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 browser đồ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 desktop client và mobile client.
Mức tiêu thụ tài nguyên gần với Nextcloud. Bạn phải chạy một database, một memory cache và 2 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à không có trang đăng nhập cho những người cùng đồng bộ với bạn. Bạn ghép đôi hai thiết bị bằng ID rồi chấp nhận thư mục ở mỗi bên. Trong các lựa chọn ở đây, đây là phần mềm ít công sức vận hành nhất vì cần quản lý rất ít thành phần.
Điều bạn phải bỏ qua là toàn bộ chức năng chia sẻ. Mục tương ứng là Device pairing only, no links. Bạn không thể gửi một 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 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 index entry 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, Syncthing vẫn chạy thoải mái.
Syncthing xử lý conflict bằng cách giữ cả hai phiên bản. Khi hai thiết bị thay đổi cùng một file trong lúc không thể nhìn thấy nhau, Syncthing đổi tên một bản và giữ nó bê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; bạn phải xử lý thủ công.
Object storage với client: lưu trữ giá rẻ, không phải thư mục sync
Object storage là một bucket tương thích với S3 (simple storage service), được self-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. Nếu muốn duyệt bucket bằng trang web thay vì shell, một số công cụ trong bài so sánh các file manager self-host có thể dùng bucket S3 làm backend và bổ sung share link riêng. Chia sẻ bucket được thực hiện bằng presigned URL, tức link tự mang thời hạn hết hạn. 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, do nó không áp dụng cho các object đã upload trước đó.
Vấn đề bắt đầu khi bạn xem bucket như một thư mục sync. Mặc định không có gì monitor 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. Object storage hoạt động rất tốt ở lớp bên dưới: làm nơi nhận backup hoặc lớp storage phía sau 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 khá đặc thù. MinIO chỉ là một binary và khi idle dùng rất ít tài nguyên. Chi phí thực tế bạn phải trả là disk; trên VPS, đó là block volume thuê theo gigabyte, cộng với bandwidth dùng để truyề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ế của một VPS mỗi tháng trước khi xác định dung lượng archive.
So sánh tính năng chia sẻ, client mobile và versioning
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"
}
]Tất cả 4 tùy chọn được phân chia theo cùng một tiêu chí. Ba tùy chọn có thể cung cấp file cho người lạ chỉ có browser. Một tùy chọn chỉ giao tiếp với các thiết bị bạn đã sở hữu. Mục versioning của Seafile, Library history and snapshots, cần được lưu ý: lịch sử được lưu theo từng library, nên khi xóa một library thì lịch sử của library đó cũng bị xóa.
Đưa dữ liệu của bạn ra lại
Chi phí thoát có thể dễ kiểm tra ngay bây giờ nhưng sẽ tốn kém nếu chỉ phát hiện sau này, vì vậy hãy kiểm tra trước khi cam kết.
Nextcloud lưu các file thực trong các thư mục thực, vì vậy một tar của thư mục dữ liệu sẽ cung cấp cho bạn cá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 tốt nhất trong nhóm này: các 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 nó để ghép lại các block thành file. Object storage cần rclone hoặc công cụ tương đương; bạn có thể thực hiện việc này chỉ bằng một command.
Đồng bộ không phải là backup, và khoảng trống đó là nơi dữ liệu bị mất
Mọi công cụ trong phần nà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 hoạt động theo cùng đường đó: nó mã hóa file cục bộ, client phát hiện các file đã bị thay đổi rồi upload các bản đã mã hóa. Quá trình đồng bộ đã hoạt động đúng. Dữ liệu của bạn vẫn mất.
Trash bin và version history giúp giảm tác động của việc này. Nhưng 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 sao đang hoạt động. Khi volume bị hỏng, cả file lẫn 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à bạn đã khôi phục thử ít nhất một lần. Hãy backup database trong cùng lần chạy với các file. Khôi phục data directory của Nextcloud mà không có database sẽ tạo ra một instance không biết các file đó tồn tại. Một occ files:scan sau đó có thể khôi phục file nhưng làm mất các share và version history được lưu trong những table đó. 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 thử việc khôi phục thay vì mặc định cho rằng backup có thể dùng được.
Tôi sẽ chọn gì
Nextcloud, 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à gửi một link cho người sẽ không bao giờ cài thêm phần mềm nào, và mở file trên điện thoại. Nextcloud hỗ trợ cả hai thông qua các client chính thức mà không có tier trả phí, và 2 GB RAM là mức chi phí hợp lý cho việc đó. Tôi giữ 2 ngoại lệ. Nếu thư mục chỉ thuộc về bạn và chỉ tồn tại 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ệ một web login nào. Nếu bạn sync một working directory có hàng trăm nghìn file, hãy chạy Seafile và chấp nhận storage không minh bạch để đổ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 nó với vai trò sync tool.
FAQ
Syncthing có phải là hệ thống backup 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à việc xóa cũng là một thay đổi như mọi thay đổi khác. Vì vậy, file bạn vô tình xóa sẽ biến mất trên 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, rồi khôi phục từ bản đó một lần để xác nhận quy 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 ứng dụng 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, nên các file xuất hiện trên disk bên dưới directory này sẽ vẫn bị ẩn 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 phải kiểm tra directory này.
Công cụ nào cho phép tôi share link với người không có account?
Nextcloud và Seafile đều tạo được public link, kèm password tùy chọn và ngày hết hạn. Object storage cung cấp presigned URL, tự ngừng hoạt động sau khoảng thời gian bạn đặt. Syncthing không hỗ trợ cách này. Mô hình share của nó là ghép nối thiết bị, nên người kia phải cài Syncthing, cung cấp device ID cho bạn và accept folder.
Server cần bao nhiêu disk?
Với server lưu bản dữ liệu chính, hãy dự trù đủ dung lượng cho toàn bộ shared data, cộng thêm dung lượng cho version history và trash, cùng phần dung lượng tạm cho các upload đang xử lý. 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 data trên một volume riêng giúp phần tăng trưởng này không ảnh hưởng đến root filesystem. Khi disk đầy, toàn bộ server sẽ dừng hoạt động thay vì chỉ một upload bị lỗi.