自架 Dropbox 替代方案比較:Nextcloud、Seafile 與 Syncthing
比較 Nextcloud、Seafile、Syncthing 與物件儲存的同步拓撲、VPS 實際成本與適用情境,並說明為何同步不等於備份。
應該執行哪一種自架 Dropbox 替代方案?
有 4 種自架 Dropbox 替代方案值得考慮:Nextcloud、Seafile、Syncthing,以及搭配用戶端的物件儲存。這些方案不能互相替代。Nextcloud 適合家用或小型團隊,尤其是需要讓其他人接收檔案的情境。Seafile 適合需要同步大量小型檔案的個人或團隊,且同步速度比資料在磁碟上的儲存形式更重要。Syncthing 適合同步個人裝置,且不需要提供連結給外部人員。物件儲存適合用作封存:儲存成本低,但很少開啟資料。
比較功能之前,先根據同步方式做選擇。功能清單看起來都很相似。真正決定你 6 個月後是否仍然滿意的,是拓撲,也就是每台其他裝置都認定哪台機器持有該副本。
同步拓撲:權威伺服器,或沒有伺服器的對等節點
目前有兩種設計可供選擇,後續大部分內容都取決於採用哪一種。
權威伺服器。 Nextcloud、Seafile 和物件儲存都採用這種方式。通常由一台 VPS(virtual private server)保存權威副本。所有裝置都會連線到這台機器。筆電可以離線一個月,重新連線後自行追上進度。可用空間只有 6 GB 的手機可以只保存部分資料,而伺服器保存全部內容。瀏覽器也能存取檔案,因此才能建立分享連結。
沒有伺服器的對等節點。 Syncthing 採用這種方式。裝置會彼此尋找,並透過加密連線直接交換檔案清單。沒有任何副本具有權威性:檔案只存在於保存該檔案的裝置上,其他地方都沒有。兩台裝置必須同時在線,變更才能在兩者之間傳遞。沒有可提供給他人的 URL,因為沒有任何機器在提供網頁。
這會帶來四項後果,而這些通常是使用者較晚才會遇到的問題。
- 若要將檔案傳給不會安裝軟體的人,需要權威伺服器。連結就是 URL,而 URL 需要有程序在連接埠上監聽。
- 若要從不受你控制的機器(例如工作用筆電)存取檔案,需要權威伺服器。
- 從伺服器同步的裝置離線數週後,重新啟動時即可追上進度。在對等節點架構中,只有另一台保存該資料的裝置也在線時,這台裝置才能追上進度。因此,許多 Syncthing 使用者會在 VPS 上執行一個執行個體,作為持續在線的對等節點。
- 儲存空間的計算方式不同。權威伺服器保存一份完整副本,另加各裝置在本機保存的內容。共用一個資料夾的 4 個對等節點會保存 4 份完整副本,因為每個對等節點都會保存整個資料夾。
Nextcloud:使用者、群組與公開連結
Nextcloud 是 PHP Web 應用程式。它會將檔案以一般檔案的形式儲存在資料目錄下,並在資料庫中追蹤這些檔案。您可以與使用者或群組共用資料夾,也可以建立帶有密碼與到期日的公開連結。版本歷程記錄預設會啟用,刪除的檔案會先移至垃圾桶。桌面用戶端支援 Linux、macOS 與 Windows,iOS 和 Android 也有官方應用程式。如果您離開 Dropbox 的原因,是其他人需要接收您的檔案,Nextcloud 就是直接可行的答案。
代價在於需要維護多個元件。一般安裝會執行 Web 伺服器、PHP-FPM(PHP 程序管理員)、MariaDB 或 PostgreSQL 等資料庫,以及用於檔案鎖定的 Redis。背景工作會由 cron 或 systemd timer 每五分鐘執行一次。在 1 GB VPS 上它可以啟動,但大型上傳或長時間執行的 occ 維護命令可能會觸發 out-of-memory killer。對少量使用者而言,請將 2 GB 視為最低需求;啟用更多應用程式後,通常會需要 4 GB。另一項代價是升級:應用程式商店中的應用程式是針對特定核心版本建置,因此升級前請確認您依賴的應用程式支援下一個主要版本。
當單一帳戶包含數十萬個小檔案時,Nextcloud 的速度會變慢。原因是每個檔案都會成為 file cache 資料表中的一列,以及磁碟上的實際檔案,而桌面用戶端會逐一處理這些檔案。在家庭使用規模下通常不會遇到這個問題。採用 Docker 的 Nextcloud 安裝、TLS 與備份涵蓋容量規劃、TLS(傳輸層安全性)與備份;決定採用 Nextcloud 後,請參考該內容。
有一點需要先界定範圍。Nextcloud 也能執行行事曆、聯絡人、筆記與相片庫,而您啟用的每個應用程式都會增加背景工作,也會多出一個可能阻礙升級的元件。如果實際需求是相片管理,專用工具的處理效果更好:請參閱將 Immich 作為自架 Google Photos 替代方案。如果實際需求是文件與 wiki,請改看自架 Notion 替代方案,不要在檔案伺服器上不斷堆疊應用程式。在瀏覽器中編輯這些文件需要另一台伺服器,而不是 Nextcloud 應用程式,因此在假設 2 GB 仍然足夠前,請先比較OnlyOffice 與 Collabora。
Seafile:專為大量小型檔案打造
Seafile 會將每個檔案拆分成區塊,並依內容雜湊儲存在內部物件儲存區中,原理與 git 儲存物件的方式相同。同步與分享的單位是 library,而不是資料夾樹狀結構。由於用戶端會上傳區塊並建立一次 commit,而不是每個檔案各發出一個請求,因此同步包含 100,000 個小型檔案的目錄時,速度會遠快於逐檔處理的協定。相同的區塊只會儲存一次,因此大型檔案的第二份副本幾乎不會增加成本。
代價是,伺服器上的檔案不再是一般檔案。開啟儲存目錄後,會看到名稱由十六進位字元組成的物件檔案。要取出資料,必須使用 Seafile 用戶端,或 Seafile 自有的 export 與 fsck 工具。備份仍然可正常運作,因為這些物件是一般檔案;但你無法只使用 cp 還原某一份試算表。請現在就決定這是否可接受,因為這正是許多人日後感到後悔的特性。
Seafile 提供 community edition 與付費的 professional edition,兩者的功能區分會隨 release 改變,因此在根據特定功能規劃團隊使用方式前,請先查看其網站上的最新條款。Seafile 提供官方桌面與行動用戶端。加密 library 會在用戶端進行加密,因此伺服器儲存的是無法讀取的密文。遺失 passphrase 後,該 library 將無法讀取,包括你自己也無法讀取。在瀏覽器中開啟加密 library,代表必須將該 passphrase 提供給網頁工作階段,因此上述保證的完整強度僅適用於桌面與行動用戶端。
資源需求與 Nextcloud 相近。你需要執行資料庫、記憶體快取與兩個應用程式程序,因此 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 會保留兩個版本。如果兩台裝置在彼此無法連線時修改同一個檔案,Syncthing 會重新命名其中一份,並將它保留在另一份旁邊,因此你會看到類似 notes.sync-conflict-20260802-141530-K7MB3QT.md 的檔案。資料不會遺失,但也不會自動合併;你必須手動處理。
使用客戶端操作物件儲存:低成本容量,不是同步資料夾
物件儲存是指相容於 S3(simple storage service)的 bucket,可使用 MinIO 自行架設,也可向供應商租用。你需要透過工具存取它:可以在命令列使用 rclone,也可以使用將 bucket 顯示為磁碟機的桌面客戶端。如果你想從網頁瀏覽 bucket,而不是使用 shell,這份自架檔案管理器比較中的數個工具可將 S3 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 不會顯示這兩項成本,因此在規劃 archive 大小前,請先閱讀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 值得特別說明:歷程記錄會依程式庫保存,因此刪除程式庫時,其中的歷程記錄也會一併刪除。
重新取回資料
現在檢查退出成本很容易,等到之後才發現代價會很高,因此請在採用前先確認。
Nextcloud 將實際檔案儲存在實際目錄中,因此只要對資料目錄進行 tar,即使應用程式之後完全無法啟動,仍可取得文件。Syncthing 在每個對等端點上也是如此,這是此處最可靠的退出方式:檔案會直接儲存在每台裝置上。Seafile 的物件儲存需要透過 Seafile 或其匯出工具,才能將區塊重新組合成檔案。物件儲存則需要 rclone 或同等工具,執行一個命令即可完成。
同步不是備份,而資料遺失往往就發生在這個落差中
這裡的每項工具都會在機器之間複製變更。刪除也是一項變更。在筆記型電腦上移除資料夾後,client 會通知 server,server 套用這項變更,其他裝置也會一併移除該資料夾。勒索軟體使用相同的路徑:它會在本機加密檔案,client 偵測到檔案已修改,接著上傳加密後的版本。同步功能正常運作,但資料仍然遺失。
垃圾桶和版本歷程能降低這類問題的影響,但它們也會過期,可能被犯錯的同一個帳戶清空,而且與線上副本位於同一個磁碟區。磁碟區故障時,檔案及其歷程會一併遺失。
備份是位於不同硬體上的獨立副本,依排程建立,而且至少要成功還原過一次。請在同一次作業中備份資料庫和檔案。只還原 Nextcloud 資料目錄而沒有資料庫,會得到一個不知道這些檔案存在的執行個體;之後執行 occ files:scan 雖然能復原檔案,卻會遺失儲存在這些資料表中的分享和版本歷程。從 VPS 排程執行 restic 備份說明這種加密且去重複的做法,包括如何測試還原,而不是假設還原一定可行。
我的選擇
對大多數讀者而言,我會選 Nextcloud。離開 Dropbox 後,使用者最容易缺少的功能,是把連結交給永遠不會安裝任何程式的人,以及在手機上開啟檔案。Nextcloud 透過官方用戶端提供這兩項功能,而且沒有付費方案;為此使用 2 GB RAM 是合理的代價。我只保留兩個例外。如果該資料夾永遠只由你使用,且只會存在於你擁有的硬體上,請執行 Syncthing。這樣不必修補伺服器,也不必防護網頁登入介面。如果你要同步包含數十萬個檔案的工作目錄,請執行 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 檔案系統;磁碟滿載時會使整台伺服器停止運作,而不只是單一上傳作業失敗。