SSD Nodes Learn Hosting plans →
Hướng dẫn Matt ConnorBởi Matt Connor · Cập nhật ngày 2026-08-10

Syncthing hay Nextcloud cho đồng bộ file trên VPS?

Syncthing không có bản sao server, Nextcloud có tài khoản và share link. So sánh cách dùng trên VPS, yêu cầu hệ thống và vì sao cả hai không thay thế backup.

Syncthing và Nextcloud: khác biệt quyết định cách dùng

Syncthing và Nextcloud khác nhau ở một điểm mang tính cấu trúc, và mọi khác biệt khác đều bắt nguồn từ đó. Syncthing hoạt động theo mô hình peer-to-peer. Mỗi thiết bị giữ toàn bộ thư mục và không có bản sao nào là bản chính. Nextcloud hoạt động theo mô hình server. Một máy giữ các file, tài khoản người dùng được đặt phía trước chúng, còn các client tải bản sao xuống.

Đó là lý do Syncthing không có share link và không có giao diện web để xem tài liệu. Không có bản sao trung tâm để cung cấp, nên trình duyệt không có gì để yêu cầu. Nextcloud có cả hai tính năng này, nhưng cần có PHP runtime, database server, web server và reverse proxy cho TLS (transport layer security).

Chọn Syncthing khi mọi thiết bị tham gia đều thuộc quyền quản lý của bạn. Chọn Nextcloud khi cần truy cập file bằng trình duyệt hoặc khi người khác cần truy cập các file đó.

VPS thực sự làm gì trong từng thiết kế

VPS chạy Nextcloud là nơi lưu dữ liệu của bạn. Nếu xóa bản sao cục bộ trên laptop, file vẫn còn trên server vì server vốn luôn là bản gốc.

VPS chạy Syncthing có vai trò khác: đó là một peer luôn hoạt động. Syncthing truyền dữ liệu trực tiếp giữa hai thiết bị đang online cùng lúc. Vì vậy, hai laptop không bao giờ được bật cùng lúc sẽ không thể sync, dù bạn chờ bao lâu. Thêm một peer thứ ba trên VPS không bao giờ sleep thì vấn đề biến mất. Laptop A đẩy dữ liệu lúc 09:00, laptop B kéo dữ liệu lúc 22:00, còn VPS giữ folder trong khoảng thời gian đó.

Đây là một vai trò thực sự hữu ích và phạm vi hẹp hơn so với tuyên bố “thay thế Dropbox”. Syncthing sẽ không bao giờ tạo cho bạn một link để gửi cho client. Nếu đó là yêu cầu của bạn, hãy dừng tại đây và đọc bài tổng hợp các lựa chọn thay thế Dropbox tự host.

Chi phí của từng lựa chọn trên một VPS nhỏ

Syncthing là một binary Go duy nhất. Nó lắng nghe trên một socket, lưu index của các file trong cơ sở dữ liệu cục bộ, và đó là toàn bộ stack. Từ version 2.0, index này dùng SQLite thay cho LevelDB, nên khi nâng cấp từ bản cài đặt 1.x, hệ thống sẽ chạy migration một lần trong lần khởi chạy đầu tiên. Với một tập thư mục lớn, migration này có thể mất nhiều thời gian. Hãy để nó chạy xong. Không cần cài thêm gì và cũng không cần patch thêm thành phần nào.

Nextcloud cần nhiều hơn. Tính đến tháng 8 năm 2026, Nextcloud 35 hỗ trợ PHP 8.3 đến 8.5, dùng MariaDB hoặc PostgreSQL ở phía sau, và được phục vụ bởi Apache 2.4 hoặc nginx với php-fpm. Tài liệu quản trị khuyến nghị "tối thiểu 512MB RAM cho mỗi process", còn php-fpm chạy đồng thời nhiều worker process.

Trên VPS 1 GB, Syncthing chạy thoải mái còn Nextcloud khá chật. Điều đó không có nghĩa Nextcloud là lựa chọn sai. Nó chỉ là một cam kết lớn hơn, vì bạn phải duy trì 4 thành phần thay vì 1. Cách chạy bằng container trong hướng dẫn Nextcloud trên VPS về Docker, TLS và backup là cách ít vất vả nhất để vận hành toàn bộ stack đó. Thêm tính năng chỉnh sửa tài liệu trên trình duyệt sẽ tiếp tục nâng mức tài nguyên tối thiểu, và đó là nội dung được phân tích trong bài so sánh OnlyOffice và Collabora cho máy 2 đến 4 GB.

Cài đặt Syncthing trên VPS

Ubuntu có gói syncthing, nhưng phiên bản này đã lỗi thời khá xa so với upstream. Hãy dùng repository của dự án.

sudo mkdir -p /etc/apt/keyrings
sudo curl -L -o /etc/apt/keyrings/syncthing-archive-keyring.gpg https://syncthing.net/release-key.gpg
echo "deb [signed-by=/etc/apt/keyrings/syncthing-archive-keyring.gpg] https://apt.syncthing.net/ syncthing stable-v2" | sudo tee /etc/apt/sources.list.d/syncthing.list
sudo apt-get update
sudo apt-get install syncthing
syncthing --version

syncthing --version phải in ra một dòng bắt đầu bằng syncthing v2. Nếu thấy v1, apt vẫn ưu tiên gói của bản phân phối. Hãy đặt repository upstream có mức ưu tiên cao hơn rồi cài đặt lại.

printf "Package: *\nPin: origin apt.syncthing.net\nPin-Priority: 990\n" | sudo tee /etc/apt/preferences.d/syncthing.pref

Chạy Syncthing dưới dạng system service bằng một tài khoản người dùng thông thường, để service tự khởi động khi boot ngay cả khi không có ai đăng nhập.

sudo systemctl enable --now syncthing@youruser.service
systemctl status syncthing@youruser.service

systemctl status phải in ra active (running). Các file cấu hình và index được lưu trong /home/youruser/.local/state/syncthing, còn file cấu hình là config.xml. Các bản cài đặt được tạo trước Syncthing 1.27 vẫn lưu chúng trong ~/.config/syncthing, vì vậy hãy kiểm tra cả hai đường dẫn trước khi sao chép dữ liệu giữa các máy.

Tiếp theo, mở các cổng cần thiết. Syncthing dùng 22000/TCP cho giao thức đồng bộ, 22000/UDP cho transport QUIC và 21027/UDP cho cơ chế discovery trong mạng cục bộ. Discovery dùng broadcast và multicast, không đi qua Internet, nên trên VPS bạn chỉ cần hai cổng đầu tiên.

sudo ufw allow 22000/tcp
sudo ufw allow 22000/udp
sudo ufw status

ufw status phải liệt kê cả hai rule. Nếu lệnh in ra Status: inactive, ufw không lọc lưu lượng nào và firewall mạng của nhà cung cấp là firewall duy nhất đang hoạt động. Hãy kiểm tra cả trên panel đó, vì trên hầu hết host đây là một lớp kiểm soát riêng. Nếu thiết bị từ xa bị kẹt ở trạng thái Disconnected trong khi service vẫn đang chạy, nguyên nhân thường là một trong hai firewall đó vẫn chưa mở cổng.

Truy cập GUI Syncthing mà không public ra ngoài

GUI web (giao diện người dùng đồ họa) mặc định lắng nghe trên 127.0.0.1:8384, nên chỉ phản hồi từ chính server. Thiết lập mặc định này có tác dụng bảo vệ, vì GUI chứa API key (khóa API) có thể thay đổi mọi đường dẫn folder trên máy.

Đừng mở GUI cho toàn Internet ngay từ đầu. Tài liệu nói rõ việc bind vào một địa chỉ mạng mang lại điều gì: "chỉ định địa chỉ LAN của máy sẽ KHÔNG giới hạn quyền truy cập chỉ cho các thiết bị trong mạng nội bộ của bạn!" Thay vào đó, hãy forward cổng qua SSH từ laptop của bạn.

ssh -L 8384:127.0.0.1:8384 youruser@your.vps.example

Mở http://127.0.0.1:8384 trong browser trên máy local khi session đó còn hoạt động. Tunnel đóng cùng session SSH, nên sau đó không còn gì lắng nghe trên cổng này.

Nếu thực sự cần cho phép truy cập trực tiếp vào GUI, hãy đặt thông tin đăng nhập trước. Server không có browser, nên hãy thực hiện việc này từ command line.

sudo systemctl stop syncthing@youruser.service
sudo -H -u youruser syncthing generate --gui-user=admin --gui-password=-
sudo systemctl start syncthing@youruser.service

-H rất quan trọng, vì nếu thiếu nó thì sudo vẫn giữ home directory của root và bạn sẽ chỉnh sửa nhầm config.xml. Dùng một dấu gạch ngang làm giá trị password khiến syncthing generate đọc password từ standard input. Cách này không ghi password vào shell history, đồng thời giá trị được băm trước khi ghi vào file. Bật HTTPS trong phần cài đặt GUI sau khi đăng nhập được.

Vì sao Syncthing lan truyền cả lỗi của bạn

FAQ của Syncthing tự trả lời câu hỏi về backup: “Syncthing không phải là ứng dụng backup tốt vì mọi thay đổi đối với file của bạn (chỉnh sửa, xóa, v.v.) sẽ được lan truyền đến tất cả thiết bị.”

Nếu vô tình xóa một thư mục trên laptop, Syncthing sẽ hoạt động đúng như thiết kế. Nó xóa thư mục đó ở mọi nơi trong vài giây. Sync nghĩa là các bản sao đồng nhất, và sự đồng nhất bao gồm cả việc thống nhất rằng một file không còn tồn tại.

File versioning là biện pháp giảm thiểu, nhưng mặc định bị tắt nếu bạn không bật. Tài liệu ghi rõ versioning “mặc định là ‘không versioning file’, tức là không giữ bản sao cũ của file”. Có 4 chiến lược cho từng thư mục. Trash Can giữ một bản sao của mỗi file bị xóa hoặc thay thế do thay đổi từ remote. Simple giữ một số lượng phiên bản cũ cố định cho mỗi file. Staggered giảm dần lịch sử theo thời gian, giữ các bản sao theo giờ trong 1 ngày, theo ngày trong 1 tháng, v.v. External chuyển từng quyết định cho một command do bạn viết. Các bản sao cũ được lưu trong thư mục .stversions bên trong thư mục được chia sẻ.

Đặt Staggered trên peer VPS và tắt versioning trên các laptop. Peer luôn hoạt động sẽ giữ lịch sử, còn các laptop vẫn gọn nhẹ.

Nextcloud xử lý việc này tốt hơn nhưng vẫn không phải là backup. File đã xóa được chuyển vào trash bin, còn các lần chỉnh sửa được giữ bởi ứng dụng Versions, nhưng cả hai đều tự động bị dọn khi disk đầy dần. Nếu một process trên laptop mã hóa file, Syncthing sẽ sync các phiên bản đã mã hóa lên server, còn các bản sao tốt sẽ tự hết thời gian lưu theo lịch của chúng.

Dù dùng công cụ nào, bạn vẫn cần một hệ thống backup thực sự bên dưới: tạo snapshot bằng một chương trình riêng, ghi vào nơi mà sync client không thể truy cập, rồi restore ít nhất 1 lần để xác nhận quy trình restore hoạt động. So sánh restic và BorgBackup trình bày nên trỏ công cụ nào vào thư mục dữ liệu.

Cách xử lý xung đột khác nhau giữa hai công cụ

Cả hai công cụ đều tạo một file xung đột khi hai phía thay đổi cùng một file giữa các lần đồng bộ. Điểm khác nhau là ai sẽ nhìn thấy file đó.

Syncthing đổi tên bản sao thua thành <filename>.sync-conflict-<date>-<time>-<modifiedBy>.<ext>. Bản sao có thời gian sửa đổi cũ hơn sẽ thua. Nếu thời gian giống nhau, thiết bị có giá trị lớn hơn trong 63 bit đầu tiên của device ID sẽ thua. Quy tắc này mang tính tùy ý, nhưng cho cùng một kết quả trên mọi peer. Sau đó là điểm nhiều người không lường trước: các file này “được xử lý như file bình thường sau khi được tạo, nên chúng được đồng bộ giữa các thiết bị”. Mọi peer đều nhận được bản sao xung đột. Xóa file đó chỉ là một thao tác xóa được đồng bộ đi, nhưng trước tiên bạn sẽ thấy file này trên tất cả máy của mình.

Nextcloud desktop client ghi file thành <name> (conflicted copy YYYY-MM-DD HHMMSS).<ext>, ví dụ mydata (conflicted copy 2018-04-10 093612).txt, và mặc định không upload file đó. Tài liệu hướng dẫn của client giải thích lý do: người thực hiện thay đổi là người phù hợp nhất để xử lý xung đột, còn hiển thị xung đột cho những người dùng khác chỉ gây nhầm lẫn. Đặt OWNCLOUD_UPLOAD_CONFLICT_FILES=1 trong môi trường của client nếu bạn muốn hành vi ngược lại.

Vì vậy, xung đột trong Syncthing là một sự kiện trên toàn cluster, còn xung đột trong Nextcloud chỉ tồn tại trên một desktop.

Các loại folder giúp Syncthing an toàn hơn trên server

Syncthing có ba loại folder. Chọn đúng loại trên VPS giúp tránh nhiều sự cố.

  • Send & Receive là loại mặc định. Thay đổi được đồng bộ theo cả hai hướng.
  • Send Only bỏ qua mọi thứ cluster gửi đến. Dùng loại này khi thiết bị chỉ nên publish dữ liệu. Khi trạng thái không còn đồng bộ, GUI hiển thị nút màu đỏ "Override Changes". Nút này đẩy trạng thái cục bộ đến tất cả thiết bị.
  • Receive Only áp dụng thay đổi từ cluster và không bao giờ gửi chỉnh sửa cục bộ trở lại. Dùng loại này trên VPS đóng vai trò archive. Chỉnh sửa cục bộ tại đó sẽ hiển thị nút màu đỏ "Revert Local Changes" thay vào đó.

Folder Receive Only trên VPS, kết hợp với Staggered versioning được bật, sẽ tạo một bản mirror có version. Khi xóa một file trên laptop, thay đổi xóa đó vẫn được áp dụng vì đây là thay đổi hợp lệ của cluster. Tuy nhiên, bản cũ được chuyển vào .stversions thay vì bị xóa hoàn toàn.

Nên chọn giải pháp nào

7 hàng bên dưới tóm tắt những lý do thực tế khiến mọi người đặt câu hỏi này.

ChartWhich tool fits which job
The data behind this chart
[
  {
    "label": "Keep two of my own laptops in sync",
    "pick": "Syncthing",
    "notes": "No accounts to manage. The VPS is the peer that is always awake."
  },
  {
    "label": "Send a download link to a client",
    "pick": "Nextcloud",
    "notes": "Syncthing has no public link sharing at all."
  },
  {
    "label": "Open a file from a borrowed browser",
    "pick": "Nextcloud",
    "notes": "The Syncthing GUI shows sync state, never file contents."
  },
  {
    "label": "Sync 200 GB between machines I own",
    "pick": "Syncthing",
    "notes": "Peers transfer directly. The VPS copy is optional."
  },
  {
    "label": "Phone photo upload with a store app",
    "pick": "Nextcloud",
    "notes": "The official Syncthing Android app ended in December 2024."
  },
  {
    "label": "Calendar and contacts alongside files",
    "pick": "Nextcloud",
    "notes": "Syncthing syncs files. That is the entire feature set."
  },
  {
    "label": "1 GB VPS with nothing else to spare",
    "pick": "Syncthing",
    "notes": "One Go binary against PHP plus a database plus a web server."
  }
]

Hãy xem hàng đầu tiên. Việc đồng bộ hai laptop của bạn hướng đến Syncthing, và đây là trường hợp VPS phát huy giá trị như một peer luôn hoạt động. Mọi hàng có liên quan đến browser, link hoặc người khác đều dẫn đến lựa chọn ngược lại.

Nếu Nextcloud liên tục là lựa chọn phù hợp nhưng bạn lo ngại về footprint của nó, hãy đọc tiếp bài so sánh Seafile và Nextcloud, vì Seafile vẫn giữ mô hình server nhưng sử dụng sync engine khác bên dưới.

Chạy cả hai trên cùng một VPS

Hai công cụ này không loại trừ nhau. Dùng Syncthing để chuyển file giữa các máy của bạn, còn Nextcloud xử lý việc chia sẻ và lịch là một mô hình phổ biến.

Nếu dùng cả hai, có một quy tắc: không bao giờ trỏ Syncthing vào thư mục dữ liệu của Nextcloud. Nextcloud theo dõi mọi file trong database, nên các file xuất hiện trên disk từ bên ngoài sẽ chưa hiển thị trong web interface cho đến khi database được cập nhật. Từ thư mục cài đặt Nextcloud:

sudo -u www-data php occ files:scan --all

Lệnh đó in ra số file và thư mục đã quét. Chạy lệnh theo timer chỉ là cách khắc phục tạm thời, không phải thiết kế đúng. Hãy cấp cho mỗi công cụ một thư mục riêng. Nếu bạn vẫn chưa quyết định nên đặt gì trên máy này, hướng dẫn về những gì nên tự host trong năm 2026 sẽ là điểm bắt đầu phù hợp hơn so với việc chọn công cụ đồng bộ trước.

FAQ

Syncthing có thể thay thế Dropbox không?

Chỉ thay thế được phần đồng bộ giữa các thiết bị của bạn. Syncthing không có public share link và user account. Web interface của nó cũng không bao giờ hiển thị nội dung file, vì không có bản sao tập trung để browser yêu cầu. Android app chính thức đã bị ngừng phát hành sau bản release tháng 12 năm 2024 và bị gỡ khỏi Play Store, nên hỗ trợ điện thoại hiện phụ thuộc vào một community fork. Nếu cần gửi link cho người khác, bạn cần một server, tức là Nextcloud hoặc giải pháp tương tự.

Syncthing có phải là backup không?

Không. Project cũng nói rõ điều này. Các thao tác xóa và sửa đổi được đồng bộ đến mọi thiết bị, nên một file bị xóa nhầm sẽ biến mất ở mọi nơi chỉ trong vài giây. Bật file versioning cho từng folder, đặc biệt là Staggered trên một peer luôn hoạt động, sẽ tạo ra khoảng thời gian khôi phục thông qua directory .stversions. Đây không phải là giải pháp thay thế cho snapshot do một tool riêng tạo trên storage riêng.

Vì sao tôi không thấy file trong Syncthing web GUI?

Vì GUI là control panel cho trạng thái đồng bộ, không phải file browser. Nó hiển thị folder, device, tiến trình truyền dữ liệu và số lượng conflict, nhưng không bao giờ liệt kê hoặc mở nội dung file. Điều này xuất phát từ thiết kế peer to peer: file nằm trên các thiết bị của bạn, còn GUI trên VPS chỉ quản lý tiến trình di chuyển chúng.

Syncthing cần mở những port nào trên VPS?

Mở 22000/TCP cho sync protocol và 22000/UDP cho QUIC transport. Port 21027/UDP dùng cho local discovery qua broadcast và multicast. Loại traffic này không đi qua Internet, nên hãy đóng port đó trên public server. Giữ GUI trên port 8384 chỉ bind vào 127.0.0.1 và truy cập qua SSH tunnel. Đồng thời kiểm tra network firewall của provider và ufw, vì đây là hai lớp kiểm soát riêng biệt.

Tôi có thể chạy Syncthing và Nextcloud trên cùng VPS không?

Có. Cách này phù hợp với server có từ 2 GB RAM trở lên. Hãy giữ directory của hai ứng dụng riêng biệt. Nextcloud lập chỉ mục file trong database, nên mọi thứ Syncthing ghi vào storage của Nextcloud sẽ không xuất hiện trên web interface cho đến khi occ files:scan chạy. Hai tool cùng ghi vào một directory cũng tạo ra các conflict file mà không tool nào trong hai tool này mong đợi.