So sánh Nextcloud, Seafile, Syncthing và object storage
So sánh Nextcloud, Seafile, Syncthing và object storage theo topology đồng bộ, chi phí thực tế trên VPS nhỏ, và 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 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ỏ, nơi những người khác cần nhận file. Seafile phù hợp với cá nhân hoặc nhóm cần đồng bộ số lượng rất lớn các file nhỏ, khi tốc độ đồng bộ quan trọng hơn cách dữ liệu được lưu trên ổ đĩa. Syncthing phù hợp với một người đồng bộ các thiết bị của chính họ, khi không cần chia sẻ link cho người bên ngoài. Object storage phù hợp với việc lưu trữ archive: dung lượng rẻ, nhưng bạn hiếm khi mở dữ liệu.
Hãy chọn dựa trên cách cơ chế đồng bộ 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 trông gần như giống nhau. Topology, tức máy nào giữ bản copy mà mọi máy khác đều đồng thuận, mới là yếu tố quyết định sau 6 tháng bạn còn hài lòng hay không.
Mô hình đồng bộ: server lưu bản chính hoặc các peer không có server
Có 2 thiết kế đang được cân nhắc. Phần lớn nội dung tiếp theo phụ thuộc vào lựa chọn của bạn.
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 đến máy đó. Laptop của bạn có thể tắt trong một tháng, sau đó tự kết nối lại và đồng bộ phần còn thiếu. Điện thoại còn trống 6 GB có thể chỉ lưu 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. Đây là lý do share link có thể hoạt động.
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 lưu 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ó thể truyền từ thiết bị này sang thiết bị kia. Không có URL để gửi cho người khác, vì không có máy nào cung cấp một trang web.
Có 4 hệ quả, và người dùng thường chỉ nhận ra chúng 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, và 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.
- 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 khởi động lại. Trong mô hình peer, thiết bị đó chỉ đồng bộ được khi một thiết bị khác đang lưu 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 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à từng thiết bị lưu cục bộ. 4 peer cùng chia sẻ một thư mục sẽ giữ 4 bản sao đầy đủ, vì mỗi peer đều giữ toàn bộ thư mục.
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 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 tạo 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 và 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à lựa chọn thực tế.
Cái giá phải trả là có nhiều thành phần phải vận hành. 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 năm 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 một lệnh bảo trì occ chạy lâu có thể gặp out-of-memory killer. Hãy xem 2 GB là mức tối thiểu cho một nhóm nhỏ người dùng và dự kiến cần 4 GB khi bật thêm app. Chi phí khác là việc nâng cấp: app từ 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 hay không 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ỏ, vì mỗi file là một row trong bảng file cache và một file thật trên disk, còn desktop client phải duyệt từng file một. Ở quy mô gia đình, vấn đề này hầu như không xuất hiện. Phần sizing, TLS (bảo mật tầng truyền tải) và backup được trình bày trong cách cài Nextcloud bằng Docker với TLS và backup. Đây là tài liệu bạn nên xem sau khi đã quyết định dùng Nextcloud.
Có một lưu ý về phạm vi sử dụng. Nextcloud cũng có thể chạy calendar, contacts, notes và thư viện ảnh của bạn. 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 sự là ảnh, một công cụ 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à tài liệu và wiki, hãy xem các lựa chọn thay thế Notion tự host thay vì tiếp tục thêm app vào file server. Chỉnh sửa các tài liệu đó trong browser lại cần một server riêng thay vì một app Nextcloud, vì vậy hãy cân nhắc OnlyOffice và Collabora trước khi cho rằng mức tối thiểu 2 GB vẫn đủ cho bạn.
Seafile: được thiết kế cho số lượng rất lớn các tệp nhỏ
Seafile chia mỗi tệp 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 lưu các object. Đơn vị đồng bộ và chia sẻ là library thay vì cây thư mục. Vì client upload các block và một commit thay vì gửi một request cho mỗi tệp, việc đồng bộ một thư mục có 100,000 tệp nhỏ hoàn tất nhanh hơn nhiều so với protocol xử lý từng tệp. Các block giống hệt nhau chỉ được lưu một lần, nên tạo bản sao thứ hai của một tệp lớn hầu như không tốn thêm dung lượng.
Đổi lại, các tệp trên server không còn là các tệp thông thường. Mở storage directory, 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à các tệp thông thường, nhưng bạn không thể khôi phục một bảng tính 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ỉ tiếc nuối về sau.
Seafile có community edition và paid professional edition. Ranh giới tính năng giữa hai edition 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 lập kế hoạch triển khai cho một 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, nên mức bảo đảm chặt chẽ nhất 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à hai application process, nên 2 GB tiếp tục 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 các 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 mà bạn đồng bộ cùng. Bạn ghép cặp hai thiết bị bằng ID và chấp nhận thư mục ở mỗi phía. Đây là phần dễ vận hành nhất trong các lựa chọn ở đây vì cần chạy rất ít thành phần.
Đổi lại, bạn mất hoàn toàn phần chia sẻ. Mục đó 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ất 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ộ đáng tin cậy 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 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.
Xung đột được xử lý bằng cách giữ cả hai phía. Khi hai thiết bị thay đổi cùng một file trong lúc không kết nối được với nhau, Syncthing đổi tên một bản sao và giữ nó bên cạnh bản còn lại, để bạn 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 tự xử lý bằng tay.
Object storage với client: lưu trữ 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 từ command line, hoặc client desktop hiển thị bucket như một ổ đĩa. Chia sẻ bằng presigned URL, tức một liên kết tự chứa thời hạn hết hiệu lực. Versioning là thiết lập của bucket: Bucket versioning, off by default, vì vậy hãy bật tùy chọn 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 đồng bộ. 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 thực hiện đồng bộ hai chiều, và 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ữ 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 máy chủ.
Chi phí tài nguyên trong trường hợp này khá đặc thù. MinIO chỉ là một binary và khi idle thì dùng rất ít tài nguyên. Chi phí thực tế bạn phải trả là dung lượng đĩa, và 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ế mỗi tháng của một VPS trước khi xác định dung lượng archive.
So sánh tính năng 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"
}
]Cả 4 tùy chọn đều được phân loại 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ó trình duyệt. Một tùy chọn chỉ hoạt động 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 đượ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 ra ngoài
Chi phí chuyển dữ liệu ra ngoài hiện dễ kiểm tra nhưng về sau có thể tốn kém, vì vậy hãy kiểm tra trước khi cam kết sử dụng.
Nextcloud lưu file thực trong các thư mục thực, nên tar thư mục dữ liệu sẽ lấy lại được tài liệu của bạn 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 rời đi thuận lợi 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; bạn có thể thực hiện việc này bằng một lệnh.
Đồng bộ không phải là backup, và khoảng cách đó là nơi dữ liệu thường 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 thay đổi đó cho server, server áp dụng, rồi mọi thiết bị khác cũng xóa thư mục đó. Ransomware cũng dùng đúng đường đi này: nó mã hóa các file cục bộ, client thấy 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.
Thùng rác và lịch sử phiên bản giúp giảm hậu quả. Nhưng chúng cũng hết hạn, có thể bị chính account gây ra lỗi làm trống, và nằm trên cùng disk với bản dữ liệu đang hoạt động. Khi volume bị hỏng, cả file lẫn lịch sử của chúng sẽ mất cùng nhau.
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 thư mục dữ liệu 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; sau đó một occ files:scan 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à loại bỏ dữ liệu trùng lặp của quy trình này, bao gồm cách kiểm tra việc khôi phục thay vì mặc định cho rằng backup có thể khôi phục.
Tôi sẽ chọn gì
Với hầu hết người đọc bài này, tôi sẽ chọn Nextcloud. Sau khi rời Dropbox, điều nhiều người thiếu là khả năng gửi link cho người sẽ không bao giờ cài thêm gì 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ó gói trả phí. Đổi lại, dùng 2 GB RAM là một mức chi phí hợp lý. Tôi giữ 2 ngoại lệ. Nếu thư mục chỉ thuộc về bạn và chỉ nằm 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ếu bạn đồng bộ một working directory có hàng trăm nghìn file, hãy chạy Seafile và chấp nhận storage opaque để đổi lấy tốc độ. Object storage nên nằm bên dưới công cụ bạn chọn và làm backup target, không nên nằm phía trước để làm công cụ đồng bộ.
FAQ
Syncthing có phải là 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 khỏi mọi thiết bị đã ghép nối chỉ trong vài giây. Tính năng versioning theo từng folder có thể giúp giảm rủi ro, nhưng mặc định đang tắt và bạn phải bật riêng cho 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 thử một lần để biết chắc 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ó. Chú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ực tiếp trên disk bên dưới directory này sẽ không hiển thị cho đến khi bạn chạy occ files:scan. Các file bị xóa trực tiếp bên dưới directory này sẽ để lại các row trong database trỏ đến những 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 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, URL này 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 chia sẻ của Syncthing là ghép nối thiết bị, nên người kia phải cài Syncthing, gửi cho bạn device ID và chấp nhận folder.
Server cần bao nhiêu disk?
Đối 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 phần dung lượng làm việc cho các upload đang thực hiện. Version history là phần mọi người thường đánh giá thấp: nếu giữ mọi phiên bản 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 từ sớm. Đặt dữ liệu trên một volume riêng sẽ giữ phần tăng trưởng này khỏi root filesystem. Khi disk đầy, toàn bộ server sẽ dừng hoạt động thay vì chỉ một upload bị lỗi.