SSD Nodes Learn 🎉 VPS $5.50/月起
指南 Matt Connor作者: Matt Connor · 已更新 2026-08-13

Syncthing 與 Nextcloud 該選哪個?VPS 同步架構分析

Syncthing 採用點對點架構,適合個人裝置同步;Nextcloud 則是伺服器架構,支援網頁存取與權限管理。兩者皆非備份方案,請根據 VPS 資源與檔案共享需求選擇合適的工具。

Syncthing 與 Nextcloud:決定性的差異

Syncthing 與 Nextcloud 的選擇取決於一個結構上的差異,而其他所有特性皆由此衍生。Syncthing 採用點對點(peer to peer)架構。每個裝置都持有完整的資料夾,且沒有任何一份副本是權威版本。Nextcloud 則是伺服器架構。由一台機器存放檔案,使用者帳號管理存取權限,客戶端則從伺服器拉取副本。

這就是為什麼 Syncthing 沒有分享連結,也無法在網頁上檢視文件。因為沒有中心化的副本可供服務,瀏覽器也就無從請求資料。Nextcloud 兩者皆具備,但為了實現這些功能,它需要 PHP 執行環境、資料庫伺服器、網頁伺服器以及處理 TLS (transport layer security) 的反向代理。

若所有參與的裝置皆為您個人所有,請選擇 Syncthing。若需要透過瀏覽器存取檔案,或需與他人共享檔案,請選擇 Nextcloud。

各項設計中 VPS 的實際運作方式

執行 Nextcloud 的 VPS 是您資料的存放核心。即使刪除筆記型電腦上的本機副本,檔案依然存在於伺服器上,因為伺服器始終是原始資料的來源。

執行 Syncthing 的 VPS 則扮演不同的角色:它是一個全天候運作的節點(peer)。Syncthing 會在兩台同時在線的裝置間直接傳輸資料。因此,若兩台筆記型電腦從未同時開機,它們將永遠無法同步,無論等待多久皆然。在從不休眠的 VPS 上新增第三個節點即可解決此問題。筆記型電腦 A 在 09:00 推送資料,筆記型電腦 B 在 22:00 拉取資料,而 VPS 則在兩者之間負責保存該資料夾。

這是一個極具實用性的角色,且其定位比「Dropbox 替代方案」更為精確。Syncthing 無法提供連結供您傳送給客戶。若這是您的需求,請在此停止,並改為閱讀 自架 Dropbox 替代方案總覽

在小型 VPS 上的成本分析

Syncthing 僅是一個單一的 Go 二進位檔案。它監聽一個 socket,並在本地資料庫中維護檔案索引,這就是完整的堆疊。自 2.0 版本起,該索引改用 SQLite 而非 LevelDB,因此從 1.x 版本升級時,首次啟動會執行一次性的遷移程序。若資料夾集龐大,遷移可能耗時較長,請務必讓其完成。除此之外,無需安裝或修補任何其他元件。

Nextcloud 的需求則較高。截至 2026 年 8 月,Nextcloud 35 支援 PHP 8.3 至 8.5,後端需搭配 MariaDB 或 PostgreSQL,並由 Apache 2.4 或 nginx 配合 php-fpm 提供服務。管理手冊建議「每個處理程序至少配置 512MB RAM」,而 php-fpm 會同時執行多個工作處理程序。

在 1 GB RAM 的 VPS 上,Syncthing 運行起來游刃有餘,但 Nextcloud 會顯得相當吃力。這並不代表 Nextcloud 是錯誤的選擇,而是意味著它需要投入更多心力,因為你需要維護四個元件而非一個。採用容器化部署(請參考 涵蓋 Docker、TLS 與備份的 Nextcloud VPS 架設指南)是減輕此負擔最輕鬆的方式。若要在其上額外增加瀏覽器端文件編輯功能,硬體需求門檻會再次提高,這正是 OnlyOffice 與 Collabora 比較指南 針對 2 至 4 GB 記憶體伺服器所探討的內容。

在 VPS 上安裝 Syncthing

Ubuntu 內建 syncthing 套件,但版本遠落後於官方發布。請使用專案官方的軟體庫。

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 應顯示一行以 syncthing v2 開頭的內容。若出現 v1,表示 apt 仍優先選用發行版套件。請將官方軟體庫的優先級(Pin)設為較高,並重新安裝。

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

請以一般使用者帳號將其作為系統服務執行,確保在無人登入的情況下也能於開機時自動啟動。

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

systemctl status 應顯示 active (running)。設定檔與索引檔案位於 /home/youruser/.local/state/syncthing,其中設定檔為 config.xml。Syncthing 1.27 版本以前的安裝路徑為 ~/.config/syncthing,因此在機器間複製檔案前,請務必檢查上述兩個路徑。

接著開啟連接埠。Syncthing 使用 22000/TCP 進行同步協定,22000/UDP 用於 QUIC 傳輸,以及 21027/UDP 用於區域網路探索。由於探索功能使用廣播與多播,無法跨越網際網路,因此在 VPS 上僅需開啟前兩者。

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

ufw status 應列出兩條規則。若顯示 Status: inactive,表示 ufw 未過濾任何流量,此時僅有供應商的網路防火牆在運作。請務必檢查該控制面板,因為大多數主機商將其視為獨立的控制層。若服務執行中但遠端裝置仍卡在 Disconnected,通常表示上述其中一個防火牆尚未放行。

在不公開的情況下存取 Syncthing GUI

網頁 GUI(圖形使用者介面)預設監聽 127.0.0.1:8384,因此僅回應來自伺服器本身的請求。此預設值具有保護作用,因為該 GUI 帶有 API(應用程式介面)金鑰,可重寫伺服器上的所有資料夾路徑。

請勿將其直接對外公開。官方文件已明確指出綁定網路位址的風險:「指定電腦的區域網路位址並不會將存取權限限制在僅限區域網路內的裝置!」請改用 SSH 將該連接埠從筆記型電腦轉發出來。

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

在 SSH 連線期間,於本機瀏覽器開啟 http://127.0.0.1:8384。當 SSH 連線關閉時,通道亦隨之關閉,後續不會有任何監聽中的服務。

若確實需要直接存取該 GUI,請務必先設定憑證。由於伺服器上沒有瀏覽器,請透過命令列執行。

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

-H 的設定至關重要,若未設定,sudo 將會使用 root 的家目錄,導致您編輯到錯誤的 config.xml。將密碼值設為單一破折號(dash),可讓 syncthing generate 從標準輸入讀取密碼,避免密碼被記錄在 shell 歷史紀錄中,且該值在寫入檔案前會先經過雜湊處理。成功登入後,請在 GUI 設定中啟用 HTTPS。

為何 Syncthing 會同步您的錯誤操作

Syncthing 的 FAQ 本身就回答了備份相關的問題:「Syncthing 並非理想的備份應用程式,因為您對檔案所做的任何變更(修改、刪除等)都會同步到所有裝置。」

若您不慎在筆記型電腦上刪除資料夾,Syncthing 會依照其設計運作,在幾秒鐘內將該資料夾從所有裝置上刪除。「同步」意味著「一致」,而一致性也包含「同意檔案已不存在」這件事。

檔案版本控制是緩解此問題的手段,但除非您手動開啟,否則預設為關閉。官方文件指出,版本控制「預設為『不進行檔案版本控制』,即不會保留檔案的舊版本」。每個資料夾可選用四種策略:Trash Can 會保留每個因遠端變更而被刪除或取代的檔案副本。Simple 會為每個檔案保留固定數量的舊版本。Staggered 則會隨時間推移精簡歷史紀錄,例如保留一天的每小時副本、一個月的每日副本等。External 則將決策權交給您編寫的指令。舊版本會存放在共享資料夾內的 .stversions 目錄中。

建議在 VPS 節點上設定 Staggered,並讓筆記型電腦保持關閉版本控制。這樣一來,常駐運行的節點將負責保存歷史紀錄,而筆記型電腦則能保持輕量。

Nextcloud 在這方面的處理較佳,但它依然不是備份工具。刪除的檔案會進入資源回收桶,編輯紀錄則由 Versions 應用程式保留,但兩者都會在磁碟空間不足時自動清理。若筆記型電腦上的處理程序將檔案加密,這些加密版本會同步上傳,而原始的良好副本則會依排程自動過期。

無論使用哪種工具,底層都需要真正的備份機制:由獨立程式建立快照,並寫入同步客戶端無法存取的儲存空間,且必須至少執行過一次還原測試,以確保還原流程有效。restic 與 BorgBackup 的比較 說明了該如何針對資料目錄選擇合適的工具。

兩者在衝突處理上的差異

當兩端在同步間隔內修改了同一個檔案時,這兩款工具都會產生衝突檔案。兩者的差異在於誰會看到這些檔案。

Syncthing 會將落敗的副本重新命名為 <filename>.sync-conflict-<date>-<time>-<modifiedBy>.<ext>。修改時間較舊的副本會被判定為落敗。若修改時間相同,則裝置 ID 前 63 位元數值較大的裝置會落敗;此判定雖屬隨機,但在所有節點上的結果皆一致。接下來是使用者較不習慣的部分:這些檔案「一旦建立,即被視為一般檔案,因此會在各裝置間傳播」。每個節點都會收到該衝突副本。清理衝突檔案只需執行一次刪除動作並同步即可,但在清理前,您會在所有裝置上看到該檔案。

Nextcloud 桌面客戶端則會寫入 <name> (conflicted copy YYYY-MM-DD HHMMSS).<ext>(例如 mydata (conflicted copy 2018-04-10 093612).txt),且預設不會上傳該檔案。客戶端手冊說明了原因:變更的發起者最適合解決衝突,向其他使用者顯示衝突只會造成困擾。若您希望改變此行為,請在客戶端的環境變數中設定 OWNCLOUD_UPLOAD_CONFLICT_FILES=1

總結來說,Syncthing 的衝突是叢集層級的事件,而 Nextcloud 的衝突則僅限於單一桌面端。

資料夾類型能提升 Syncthing 在伺服器上的安全性

Syncthing 提供三種資料夾類型,在 VPS 上選擇正確的類型可避免各類操作失誤。

  • Send & Receive 為預設值。變更會雙向同步。
  • Send Only 會忽略叢集傳送的所有變更。適用於僅需發佈資料的裝置。當狀態不同步時,GUI 會顯示紅色的 "Override Changes" 按鈕,將本地狀態強制推送至所有節點。
  • Receive Only 會套用來自叢集的變更,且絕不回傳本地編輯。適用於作為封存用途的 VPS。若在該處進行本地編輯,會出現 "Revert Local Changes" 按鈕。

在 VPS 上設定 Receive Only 資料夾並開啟 Staggered versioning,即可建立具備版本控制的鏡像。筆記型電腦上的刪除操作仍會同步,因為刪除被視為合法的叢集變更,但舊版本檔案會被移至 .stversions 而非直接消失。

該如何選擇

下方的 7 列涵蓋了人們提出此問題的實際原因。

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."
  }
]

請查看第一列。若目的是同步兩台個人筆記型電腦,請選擇 Syncthing,因為 VPS 在此情境下可作為永不關機的節點。若涉及瀏覽器、連結或與他人協作,則應選擇另一種方案。

若 Nextcloud 表現優異但您擔心其資源佔用,請閱讀 Seafile 與 Nextcloud 的比較,Seafile 同樣採用伺服器架構,但底層使用了不同的同步引擎。

在同一台 VPS 上同時執行兩者

兩者並不衝突。使用 Syncthing 在您自己的機器間傳輸檔案,同時由 Nextcloud 處理分享與行事曆,是常見的配置方式。

若您要這樣做,請遵守一項原則:絕對不要將 Syncthing 指向 Nextcloud 的資料目錄。Nextcloud 會在資料庫中追蹤每一個檔案,因此從外部直接寫入磁碟的檔案,在資料庫更新前,無法在網頁介面中顯示。從 Nextcloud 的安裝目錄執行:

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

該指令會顯示它所掃描的檔案與資料夾數量。透過計時器定期執行該指令僅是權宜之計,而非正規設計。請為每個工具分配各自的目錄。如果您還在考慮這台機器該架設哪些服務,2026 年自架服務指南 會比先挑選同步工具更適合作為起點。

FAQ

Syncthing 可以取代 Dropbox 嗎?

僅限於同步您個人裝置的用途。Syncthing 沒有公開分享連結,也沒有使用者帳號,其網頁介面不會顯示檔案內容,因為它沒有可供瀏覽器請求的中央副本。官方 Android 應用程式在 2024 年 12 月發布後已停止維護並從 Play Store 下架,因此手機端的支援目前依賴社群維護的分支版本。若您需要傳送連結給他人,您需要一台伺服器,這意味著您需要 Nextcloud 或類似的解決方案。

Syncthing 是備份工具嗎?

不是,專案官方也明確指出這點。刪除與修改動作會同步至所有裝置,因此誤刪檔案會在幾秒內消失於所有裝置。若為每個資料夾開啟檔案版本控制(尤其是針對常駐連線節點使用 Staggered 模式),可透過 .stversions 目錄取得復原緩衝期。這無法取代由獨立工具將資料備份至獨立儲存空間的快照機制。

為什麼我在 Syncthing 網頁 GUI 看不到我的檔案?

因為該 GUI 是同步狀態的控制面板,而非檔案瀏覽器。它僅顯示資料夾、裝置、傳輸進度與衝突數量,絕不會列出或開啟檔案內容。這是基於點對點(peer to peer)架構的設計:您的檔案存在於您的裝置上,而 VPS 上的 GUI 僅負責管理檔案傳輸的程序。

Syncthing 在 VPS 上需要開啟哪些埠?

需開啟 22000/TCP 用於同步協定,以及 22000/UDP 用於 QUIC 傳輸。21027/UDP 埠用於區域網路廣播與多播發現,此流量不會跨越網際網路,因此請在公開伺服器上保持關閉。請將 GUI 綁定在 8384 埠並設定為 127.0.0.1,並透過 SSH 通道存取。請同時檢查供應商的網路防火牆與 ufw,因為它們是分開的控制機制。

我可以在同一台 VPS 上同時執行 Syncthing 與 Nextcloud 嗎?

可以,這在記憶體 2 GB 以上的伺服器上是合理的做法。請將兩者的目錄分開。Nextcloud 會將檔案索引至其資料庫中,因此任何由 Syncthing 寫入 Nextcloud 儲存空間的檔案,在執行 occ files:scan 之前,皆無法在網頁介面中顯示。此外,若兩個工具同時寫入同一個目錄,會產生雙方皆無法預期的衝突檔案。