自架 Dropbox 替代方案比較:Nextcloud、Seafile 與 Syncthing
比較 Nextcloud、Seafile、Syncthing 與物件儲存的同步拓撲、VPS 實際成本與適用情境,並說明為何同步不等於備份。
應執行哪個自架 Dropbox 替代方案?
以下 4 個自架 Dropbox 替代方案值得考慮:Nextcloud、Seafile、Syncthing,以及搭配用戶端的物件儲存。它們不能互相替代。Nextcloud 適合家用或小型團隊,尤其是需要讓其他人接收檔案的情境。Seafile 適合需要同步大量小型檔案的個人或團隊,且同步速度比資料在磁碟上的儲存形式更重要。Syncthing 適合同步個人裝置,且不需要讓外部人員取得連結。物件儲存適合用於封存:儲存成本低,但很少開啟其中的資料。
比較功能前,先根據同步方式做選擇。功能清單看起來都很相似。拓撲,也就是每台其他裝置都認定為準的那份副本由哪台機器保存,才是決定你在 6 個月後是否仍感到滿意的關鍵。
同步拓撲:權威伺服器,或無伺服器的對等節點
目前有兩種設計可選,後續大部分內容都取決於你選擇哪一種。
權威伺服器。 Nextcloud、Seafile 和 object storage 都採用這種方式。由一台通常是 VPS(virtual private server)的機器保存權威副本。每台裝置都會與該機器連線。你的筆記型電腦即使離線 1 個月,重新上線後也能自行追上進度。可用空間只有 6 GB 的手機可以只保存部分資料,而伺服器保存全部資料。瀏覽器也能存取檔案,因此才能建立分享連結。
無伺服器的對等節點。 Syncthing 採用這種方式。裝置會互相尋找,並透過加密連線直接交換檔案清單。沒有任何副本具有權威性:檔案只存在於保存該檔案的裝置上,其他地方都沒有。兩台裝置必須同時上線,變更才能在兩者之間傳遞。這種架構沒有可提供給他人的 URL,因為沒有任何機器在提供網頁。
這會帶來 4 個後果,而使用者通常到後期才會遇到。
- 將檔案傳給不會安裝軟體的人,需要權威伺服器。連結就是 URL,而 URL 需要有程序監聽連接埠。
- 從不受你控制的機器(例如公司的筆記型電腦)存取檔案,需要權威伺服器。
- 從伺服器同步時,離線數週的裝置每次重新上線後都能追上進度。在對等節點架構中,只有在另一台保存該資料的裝置也上線時,才會追上進度。因此,許多 Syncthing 使用者會在 VPS 上執行一個 instance,作為長時間在線的對等節點。
- 儲存空間的計算方式不同。權威伺服器保存 1 份完整副本,再加上各裝置在本機保存的資料。共用同一個資料夾的 4 個對等節點會保存 4 份完整副本,因為每個對等節點都會保存整個資料夾。
Nextcloud:使用者、群組與公開連結
Nextcloud 是 PHP Web 應用程式。它會將檔案以一般檔案的形式儲存在資料目錄下,並在資料庫中追蹤這些檔案。您可以與使用者或群組共用資料夾,也可以建立附帶密碼與到期日的公開連結。版本歷程預設為啟用,刪除的檔案會先移至垃圾桶。桌面用戶端支援 Linux、macOS 與 Windows,iOS 和 Android 也有官方應用程式。如果您離開 Dropbox 的原因是其他人需要接收您的檔案,Nextcloud 就是直接的答案。
代價在於需要維護多個元件。一般安裝會執行 Web 伺服器、PHP-FPM(PHP process manager)、MariaDB 或 PostgreSQL 等資料庫,以及用於檔案鎖定的 Redis。背景工作每五分鐘由 cron 或 systemd timer 執行一次。在 1 GB VPS 上它可以啟動,但大型上傳或較長的 occ 維護命令會觸發 out-of-memory killer。少量使用者至少需要 2 GB;啟用更多應用程式後,預期需要 4 GB。另一項代價是升級:App Store 應用程式是針對特定核心版本建置,因此升級前請確認所依賴的應用程式支援下一個 major version。
當單一帳戶包含數十萬個小檔案時,Nextcloud 的速度會變慢。原因是每個檔案都是 file cache table 的一列,也是磁碟上的實體檔案,而桌面用戶端會逐一處理這些檔案。在家庭使用規模下通常不會遇到這個問題。以 Docker 安裝具備 TLS 與備份的 Nextcloud 說明容量規劃、TLS(transport layer security)與備份;決定使用 Nextcloud 後,請參考該文章。
有一點需要注意範圍。Nextcloud 也能管理行事曆、聯絡人、筆記與相片庫,而每個啟用的應用程式都會增加背景工作,並多出一項可能阻擋升級的相依元件。如果實際問題是相片,專用工具的處理效果更好,請參考 以 Immich 取代自架的 Google Photos。如果實際問題是文件與 wiki,請參考 自架的 Notion 替代方案,不要把應用程式持續堆疊到檔案伺服器上。在瀏覽器中編輯這些文件需要另一台伺服器,而不是 Nextcloud 應用程式,因此在假設 2 GB 仍然足夠前,請先比較 OnlyOffice 與 Collabora。
Seafile:適合大量小型檔案
Seafile 會將每個檔案切分成多個區塊,並以內容雜湊值定址,儲存在內部 object store 中。這與 git 儲存物件的方式相同。同步與分享的單位是 library,而不是資料夾樹狀結構。由於 client 上傳的是區塊和一次 commit,而不是每個檔案各發出一個 request,因此同步包含 100,000 個小型檔案的目錄時,速度會遠快於逐檔案處理的 protocol。相同的區塊只會儲存一次,因此大型檔案的第二份副本幾乎不會增加成本。
代價是,伺服器上的檔案不再是一般檔案。開啟 storage directory 後,會看到名稱由十六進位字元組成的 object files。要取出資料,必須使用 Seafile client,或 Seafile 自有的 export 和 fsck tools。備份仍可正常運作,因為這些 object 都是一般檔案;但你無法使用 cp 還原單一試算表。請現在決定是否能接受這項限制,因為這正是許多人事後最感後悔的特性。
Seafile 提供 community edition 和付費的 professional edition,兩者的功能區分會隨 releases 改變,因此在規劃團隊使用特定功能前,請先閱讀其網站上的最新條款。Seafile 提供官方 desktop 和 mobile clients。加密 library 會在 client 端加密,因此伺服器儲存的是無法讀取的 ciphertext。若遺失 passphrase,該 library 將無法讀取,包括你自己也無法讀取。在 browser 中開啟加密 library,表示必須將 passphrase 提供給 web session,因此這項保證的完整強度僅適用於 desktop 和 mobile clients。
資源需求與 Nextcloud 接近。你需要執行 database、memory cache 和兩個 application processes,因此 2 GB 仍是合理的最低配置。
Syncthing:不需要登入
Syncthing 是單一 Go 二進位檔。它會監看資料夾,透過探索伺服器或 relay 找到對等裝置,並在裝置之間直接同步。與你同步資料的人不需要帳號,也沒有登入頁面。你只要以裝置 ID 配對兩台裝置,並在兩端接受資料夾即可。在這些方案中,它的執行維護工作最少,因為需要運作的元件非常少。
你放棄的是完整的分享功能。其項目內容為 Device pairing only, no links。你無法將連結交給客戶、會計人員或親友。行動裝置支援是另一項缺口:Android app, no official iOS。專案自己的 FAQ 對此說得很直接:「目前 Syncthing 團隊沒有在可預見的未來正式支援 iOS 的計畫」,因為 iOS 對背景處理的限制很大,難以實現可靠的同步。iOS 使用者只能改用第三方應用程式。
資源使用量很少,但有一點需要注意。Syncthing 會為每個同步的檔案保留索引項目,因此記憶體使用量與第一次掃描所需時間會隨檔案數量增加,而不是隨總容量增加。第一次對大型資料夾建立雜湊值時,CPU 會持續使用一段時間,之後便會趨於穩定。在最小的 VPS 方案上也能順暢運作。
衝突會透過保留兩個版本來處理。當兩台裝置在彼此無法連線時修改同一個檔案,Syncthing 會重新命名其中一份,並將它保留在另一份旁邊,因此你會看到類似 notes.sync-conflict-20260802-141530-K7MB3QT.md 的檔案。資料不會遺失,但也不會自動合併,必須手動解決。
使用用戶端操作物件儲存:低成本儲存空間,而非同步資料夾
物件儲存是指相容於 S3(simple storage service)的 bucket,可以使用 MinIO 自行架設,也可以向供應商租用。您可以透過工具存取,例如命令列的 rclone,或將 bucket 顯示為磁碟機的桌面用戶端。分享方式是 presigned URL,也就是由您產生、並包含自身到期時間的連結。版本控制是 bucket 的設定:Bucket versioning, off by default;因此請在建立 bucket 時啟用,因為這不會套用到之前上傳的物件。
將 bucket 當成同步資料夾使用,問題就會從這裡開始。預設不會監控您的 Documents 目錄。rclone bisync 會執行雙向同步,而 rclone 的官方文件也明確說明需要謹慎操作。物件儲存最適合扮演底層角色:作為備份目標,或作為應用程式後方的儲存層。使用 MinIO 自行架設相容於 S3 的物件儲存涵蓋伺服器端設定。
這裡的資源成本有所不同。MinIO 只有一個 binary,閒置時的資源用量很低。實際需要支付的成本是磁碟空間;在 VPS 上,這表示按 GB 租用的 block volume,另外還有傳入及傳出物件所產生的頻寬費用。這兩項都不會顯示在 free -h 中,因此請先閱讀VPS 每月實際成本,再決定封存空間的大小。
比較分享、行動用戶端與版本管理
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"
}
]所有 4 個選項都沿著同一條軸線分布。其中 3 個選項能讓只有瀏覽器的陌生人取得檔案。另有 1 個選項只會與你已擁有的裝置互通。Seafile 的版本管理項目 Library history and snapshots 值得特別說明:歷程記錄是以 library 為單位保存,因此刪除 library 時,其歷程記錄也會一併刪除。
再次取出資料
現在確認退出成本很容易,等到日後才發現代價會很高。因此,請在承諾採用前先確認。
Nextcloud 會將實際檔案儲存在實際目錄中,因此即使應用程式之後再也無法啟動,對資料目錄執行 tar 仍可取得文件。Syncthing 在每個對等端也採用相同方式,這是此處最可靠的退出方案:檔案會直接儲存在每台裝置上。Seafile 的物件儲存區需要使用 Seafile 或其匯出工具,才能將區塊重新組合成檔案。物件儲存則需要使用 rclone 或同等工具,只需執行一個命令即可。
同步不是備份,資料遺失往往就發生在這個差異上
這裡的每個工具都會在不同機器之間複製變更。刪除也是一種變更。你在筆記型電腦上刪除資料夾後,客戶端會通知伺服器,伺服器套用這項變更,其他裝置也會一併刪除該資料夾。勒索軟體使用相同的路徑:它會在本機加密檔案,客戶端偵測到檔案已修改,接著上傳加密後的版本。同步功能正常運作,但資料仍然遺失。
垃圾桶與版本歷程可以降低影響,但也會過期。建立錯誤的同一個帳號也可能清空它們,而且它們與即時副本位於同一個磁碟。磁碟區故障時,檔案與其歷程會一併遺失。
備份是位於不同硬體上的獨立副本,依排程建立,且你至少實際還原過一次。請在備份檔案的同一個執行流程中備份資料庫。還原 Nextcloud 資料目錄而未還原資料庫,會得到一個不知道這些檔案存在的執行個體;之後執行 occ files:scan 雖然可以復原檔案,卻會遺失儲存在這些資料表中的分享與版本歷程。從 VPS 執行排程式 restic 備份說明這種加密與去重版本的做法,包括如何測試還原,而不是假設還原一定可行。
我會選擇的方案
對大多數讀者而言,我會選 Nextcloud。離開 Dropbox 後,使用者最容易缺少的功能,是把連結交給完全不會安裝任何軟體的人,以及在手機上開啟檔案。Nextcloud 透過官方用戶端提供這兩項功能,而且沒有付費方案;以此換取 2 GB RAM,是合理的代價。我只接受兩個例外。如果該資料夾永遠只屬於你,且只會存放在你擁有的硬體上,請使用 Syncthing。這樣就不必修補伺服器,也不必保護 Web 登入介面。如果你要同步包含數十萬個檔案的工作目錄,請使用 Seafile,並接受其不透明的儲存方式,以換取更高的速度。無論選擇哪一個方案,Object storage 都應放在其下方作為備份目標,而不是放在前方充當同步工具。
FAQ
Syncthing 可以作為筆電的備份嗎?
不行。Syncthing 會在裝置之間同步變更,而刪除也是一種變更,因此誤刪的檔案會在幾秒內從所有配對裝置消失。每個資料夾的檔案版本控制可以提供協助,但必須在各資料夾中個別啟用,預設為關閉。請將真正的備份儲存在獨立硬體上,依排程執行備份,並實際還原一次,以確認還原功能正常。
可以在同一台 VPS 上執行 Nextcloud 和 Syncthing 嗎?
可以。兩者監聽不同的連接埠,不會互相衝突。不要將 Syncthing 資料夾指向 Nextcloud 的資料目錄。Nextcloud 會在資料庫中追蹤每個檔案,因此直接出現在其底層磁碟上的檔案,在執行 occ files:scan 之前都不會顯示;直接從底層磁碟移除的檔案,則會在資料庫中留下指向不存在檔案的資料列。請為 Syncthing 指定專用目錄,或將該目錄附加至 Nextcloud 作為外部儲存空間,讓 Nextcloud 知道要檢查該目錄。
哪一個可以讓我與沒有帳號的人分享連結?
Nextcloud 和 Seafile 都能建立公開連結,並可選擇設定密碼與到期日期。物件儲存空間可提供預先簽署的 URL,設定的時間到期後會自動失效。Syncthing 無法提供這種功能。它採用裝置配對的分享模式,因此對方必須安裝 Syncthing、提供裝置 ID,並接受該資料夾。
伺服器需要多少磁碟空間?
對於作為正式資料來源的伺服器,請預留共用資料的完整容量,以及檔案版本歷程、垃圾桶和進行中上傳作業所需的額外空間。檔案版本歷程最容易被低估:如果保留每天變更的 2 GB 檔案之所有版本,容量會快速增加,因此應及早設定保留政策。將資料放在獨立磁碟區上,可以避免這些資料占滿 root 檔案系統;如果整個磁碟已滿,會使整台伺服器停止運作,而不只是單一上傳作業失敗。