上一篇寫 《Karpathy 的 LLM-Wiki 方法論:我的 Obsidian 實踐》 的時候,提了一句資料同步的事。LLM-Wiki 的資料層靠多端同步撐著,Syncthing 就是那個底座。當時只說了用 ZeroTier 組網加上 Syncthing 同步,一筆帶過了。今天單獨寫一篇展開講講。
為什麼是 Syncthing
我之前試過好幾種方案,沒一個順心的:
網盤吧,隱私這塊總覺得隔著一層,大檔案傳上去再下載回來也挺慢的。iCloud 空間要錢,而且同步 Markdown 檔案偶爾會出 .icloud 殘留檔案,看著煩。Git 呢,對程式碼友善,但 Obsidian 的附件、圖片塞進去每次 commit 都巨大。
後來知道了 Syncthing。
它做的事很簡單:兩台機器之間同步資料夾。P2P 直傳,不經過中介伺服器。開源、免費、沒有任何容量限制。資料只在你自己的設備上存。
對我來說就兩點夠用了:不用花錢,別人看不見。
我的環境
三台設備:
- 一台 Macbook Pro(主力機),日常開發、寫 Obsidian、跑 LLM-Wiki,人走到哪跟到哪
- 一台 MacBook Pro(備用機),家裡用,同樣一套目錄結構
- 一台 Linux 伺服器(Debian 版本),24 小時開著,Docker 裡跑著 Syncthing
三台機器之間用 ZeroTier 組虛擬區域網路。我租了一台 VPS 搭了一個 Moon 節點來做中繼,對我自己的虛擬網路的穩定性提升很明顯。不管哪台 Mac 在公司網路還是家裡 Wi-Fi,都能穩定連通。
同步關係不是我想象中的「三台設備三台互相連」,而是採用了一種串聯的方式:
先讓主力 Mac 和 Linux 伺服器建立好雙向共享關係,再從 Linux 伺服器上把同一個知識庫共享給備用 Mac。這樣一來,主力 Mac 上的所有知識變更會先同步到伺服器,再透過伺服器推給備用 Mac。反向也一樣——備用 Mac 改的東西先匯總到伺服器,再拉回主力 Mac。
Linux 伺服器在中間充當知識庫的中轉樞紐。兩台 Mac 各自寫的 Obsidian 筆記、跑的 LLM-Wiki 資料,最終都會匯總到伺服器上同一個知識庫。
一個重要的使用習慣
在講搭建步驟之前,先說一個我在 LLM-Wiki 場景下踩過的坑:
不要讓多個 LLM 同時修改知識庫裡的檔案。
LLM 跑工作流程的時候,可能會批次更新、新增、刪除知識頁面。如果兩台 Mac 上同時觸發 /my-wiki-src 或 /my-wiki-talk,兩邊都在寫同一個資料夾裡的檔案,Syncthing 就會偵測到衝突,生成一堆 .sync-conflict 檔案。
我的做法是:同一時間只在一台機器上跑 LLM 工作流程。另一台只負責瀏覽和手動編輯。如果你也想在兩台機器上都跑 AI 工作流程,記得排隊——等一台跑完、同步完成了,再觸發另一台。
搭建步驟
1. ZeroTier 組網
三台設備透過 ZeroTier 拉到同一個虛擬網路裡。組好之後就不受地域和網路限制了,不管 Mac 是在公司還是在家,都能和伺服器直連。
|
|
加入同一個網路後,ZeroTier 會給每台機器分一個虛擬 IP,類似 10.147.20.x。兩邊互相 ping 一下,能通就對了。
Moon 節點我租了一台 VPS 來搭。ZeroTier 官方的中繼伺服器有時候很慢,加了 Moon 之後跨網路流量走自己的中繼節點,對這個虛擬網路的穩定性提升很明顯。具體怎麼建網上有不少教學,不在此展開。
2. 安裝 Syncthing
網路通了之後再來裝 Syncthing。
Mac 端一行指令:
|
|
喜歡有畫面介面的可以用 brew install --cask syncthing 裝 GUI 版本。我是直接用命令列啟動,本機 http://127.0.0.1:8384 打開就能進 Web 控制台。
Linux 伺服器端我用的 Docker,不污染宿主機環境:
|
|
路徑換成你自己的。config 卷掛載著,之後升級映像檔重建容器,設定不會丟。--restart unless-stopped 保證伺服器重啟後自己起來。
啟動完訪問 http://ZeroTier虛擬IP:8384,能看到和 Mac 端一樣的 Web 控制台。
3. 互相添加設備
Syncthing 在同一個區域網路裡能自動發現設備。打開 Web GUI 底部經常會彈提示「發現新設備」,問你要不要添加。點一下就能加,省得手動輸入設備 ID。
但要注意一點:自動發現後確認一下地址。
預設發現出來的地址可能是區域網路 IP,比如 192.168.x.x。如果是透過 ZeroTier 走的虛擬網路,一定要手動改成 ZeroTier 的虛擬 IP,格式 tcp://10.147.20.x:22000。不然 Mac 換了個網路環境(比如從公司回家),地址一變就連不上了。
兩邊都要加:Mac 上點發現彈出的添加,伺服器上也要反過來點 Mac 的發現提示。兩邊互相加了,連接才算建起來。

4. 共享資料夾
這裡的順序有講究:先讓主力 Mac 和伺服器建立共享,再用伺服器去共享給備用 Mac。
第一步:主力 Mac → 伺服器
在主力 Mac 的 Web GUI 裡:「資料夾」→「添加資料夾」,選好 my-wiki 的路徑,起個標籤名,然後在「共享」裡勾選 Linux 伺服器。
一定要勾選「加密」選項。 勾選後伺服器端只能看到加密後的檔名和內容,只有發起共享的 Mac 端能解密。這樣即使伺服器被攻破,別人也看不到你存了什麼。
伺服器那邊會收到共享請求,點接受,選本機保存路徑就行。
第二步:伺服器 → 備用 Mac
在伺服器的 Web GUI 裡,對同一個資料夾選擇「添加設備」,勾選備用 Mac 的設備。備用 Mac 那邊會收到共享請求,接受並選好本機保存路徑。
這樣下來,兩台 Mac 的資料都會匯總到伺服器上的同一個知識庫。主力 Mac 改了,伺服器拿到,然後推到備用 Mac;備用 Mac 改了,伺服器拿到,再拉回主力 Mac。伺服器就是中間那根線。

.stignore 檔案
每個同步目錄根目錄可以建一個 .stignore,告訴 Syncthing 哪些檔案別同步。
我第一次搭的時候沒配,裸跑了一段時間,也沒什麼問題。後來用久了發現有些檔案確實沒必要同步,加了一下:
|
|
註解用 //,支援萬用字元。改完自動生效,不用重啟。
我的建議是先跑起來再說。跑一陣子發現有些檔案不該同步,再加進去也不遲。
安全項
Syncthing 的 Web GUI 預設是不設密碼的。如果綁了 ZeroTier 虛擬 IP,網段內其他機器能直接訪問。至少做一件事:
Web GUI → Actions → Settings → GUI → 勾選「Enable GUI Authentication」→ 設密碼。
花十秒鐘的事,但很多人會忘。
常見問題
| 問題 | 怎麼查 |
|---|---|
| 設備連不上 | ZeroTier 兩邊互相 ping 通沒?22000 埠防火牆放沒放? |
| 同步卡住不動 | GUI 裡看「Recent Changes」,可能有大檔案在傳,耐心等 |
| 一堆 .sync-conflict 檔案 | 兩台同時改了同一個檔案。手動看一眼保留哪個就行。如果是在跑 LLM 工作流程(比如 /my-wiki-src 或 /my-wiki-talk),注意不要兩台機器同時觸發,等一台跑完同步完了再跑另一台 |
| 重啟後連不上 | ZeroTier 的虛擬 IP 變了嗎?建議在網路裡分配靜態地址,固定 IP |
| Web GUI 打不開 | Mac 跑 brew services restart syncthing,Docker 跑 docker restart syncthing |
寫完
搭完之後最大的變化就是:不再想「這個檔案在哪台設備上了」。
主力 Mac 上改了東西,伺服器自動拿到,再推給備用 Mac。備用 Mac 改了,也透過伺服器匯總回來。不管在哪台機器上打開 Obsidian,讀到的都是最新的知識庫。ZeroTier 負責網路打通,Syncthing 負責傳檔案,誰也不知道我存了什麼。
有一點要提醒:LLM 跑工作流程的時候,同一時間只在一台機器上跑。兩邊並行改知識庫的話,.sync-conflict 檔案會教你做人。
之前試過好幾個同步方案,Syncthing 是最省心的一個。不用花錢、不用管容量、不用關心隱私策略。搭一次,跑著跑著就忘了它的存在——這才是好工具應該有的樣子。