快轉到主要內容

免費跨裝置檔案同步軟體,Syncthing架設+無線同步教學

Linux系統 Self-hosting自架 Syncthing
✍ 切換正體/簡體字
目錄

本文介紹Syncthing的基礎使用方法,後面再講述如何透過內網穿透軟體實現無線、免Wifi的檔案同步方式。

1. Syncthing簡介
#

Syncthing是由Jakob Borg等人開發的自由軟體,方便讓你在多裝置同步檔案。不論是電腦、手機、NAS都可以安裝。

例如我的使用情境:Android手機 ←→ Linux電腦 ←→ Windows電腦 ←→ Linux筆電,在這幾個裝置安裝Syncthing,就可以高速同步檔案。

同步的時候每個裝置都會收到一個檔案副本,裝置之間是互相同步的。

  1. Syncthing是開源軟體,不需要註冊。流量無限制,上傳速度取決你的網速;資料傳輸全程加密,資料不會上傳到第三方伺服器。

  2. 可以用Wifi同步,也可以P2P,或是自架中繼伺服器(relay server),跨網域同步。

  3. Syncthing同步的是整個資料夾,比方說讓手機跟電腦共享電腦上的DCIM資料夾,兩邊的檔案會互相同步。有點類似Google雲端硬碟「我的電腦」的功能,只不過所有檔案都存在你的裝置上,不會上傳到第三方伺服器。

  4. Syncthing也是一種無線傳檔案的手段,可以作為SMB、FTP伺服器的替代方案。

  5. Syncthing支援各大作業系統,如果你有自架服務,還能用Syncthing進行資料同步。例如照片可從手機同步到伺服器,用再 Immich管理;或是在各個裝置間同步 Joplin筆記資料

說到同步檔案,那麼Syncthing與自架雲端硬碟有何差別?為什麼要使用Syncthing而不是Nextcloud?請參見 Syncthing vs Nextcloud

2. 安裝Syncthing軟體
#

Syncthing官方程式支援Linux/FreeBSD/Solaris/Windows/macOS/Android系統。

如果你的伺服器沒有圖形環境也可以裝Docker版,操作介面跟二進位版大同小異。

2.1. 二進位安裝檔
#

官網按照你的系統下載Syncthing。

  1. Linux可以從套件管理器安裝Syncthing。
sudo apt install syncthing
  1. 我希望Syncthing是登入Linux桌面環境後才啟動,因此採用Desktop Entry,將其加入到自動啟動的列表
cd ~/.config/autostart

wget https://raw.githubusercontent.com/syncthing/syncthing/main/etc/linux-desktop/syncthing-start.desktop

如果你的Linux是當作伺服器用途,請改用 Systemd Unit方式來設定Syncthing系統服務。

  1. 重開機,登入,Syncthing應該就會在背景執行了。

  2. Syncthing預設介面是透過網頁存取的。如果你想要桌面程式,Linux請用 Syncthing GTK

2.2. Docker版
#

將二進位檔放在容器執行。Docker方案適合部署在NAS或者沒有提供Syncthing套件的發行版。

撰寫docker-compose,把要同步的資料夾掛載到volumes。此處Syncthing的頂層資料夾是/var/syncthing。Network mode使用host mode。

version: "3"
services:
  syncthing:
    image: syncthing/syncthing
    container_name: syncthing
    hostname: my-syncthing
    environment:
      - PUID=1000
      - PGID=1000
    volumes:
      - /home/user/Syncthing:/var/syncthing
    network_mode: host
    restart: unless-stopped

2.3. 手機版APP
#

Android到 F-Droid Google Play下載

iOS還沒有官方APP,僅有第三方開發的付費軟體 Möbius Sync

3. Syncthing初始設定
#

Syncthing預設同步模式是雙向的,只要二台裝置在線上,一邊新增的檔案就會馬上傳送到另外一邊。刪除的話兩邊都會同時刪除。

讓我們先設定電腦上的Snycthing程式,再設定手機上的,測試二者同步情況。

  1. 請讓二個裝置處於同一個Wifi連線。

  2. 確認Linux電腦上的Snycthing有在執行後,開啟網頁介面http://localhost:8384

  3. 首先按照指示到設定 → GUI,給Syncthing設定一組帳號密碼

  4. 點選儲存後頁面會重新載入,以剛剛新增的帳號密碼登入網頁界面。

  5. 現在是什麼都沒有設定的狀態。Syncthing左邊的面板是電腦要分享的資料夾,右上角的面板是本機上傳的狀態,右下角遠端裝置的狀態。

  6. 點選左邊Default Folder,按編輯,你會看到它用於同步的資料夾路徑是為/home/user/SyncSync就是用於存放同步檔案的資料夾。

你可以自行新增其他同步資料夾,比方說新增~/Root路徑,即指向/home/user/下面的資料夾Root

另外,Syncthing伺服器的設定檔和log會存在/home/user/.local/share/state

  1. Syncthing在同步的時候若遇到同樣名稱的檔案會直接蓋掉,你可以啟用「檔案版本控制」讓檔案不會馬上被刪除。

  2. 開啟檔案管理員,切換到要同步的/home/user/Sync資料夾,先放個檔案進去

  3. 接著開放電腦防火牆通訊埠

sudo ufw allow 22000/tcp
sudo ufw allow 22000/udp
sudo ufw allow 21027/udp
sudo ufw reload
  1. 在手機上開啟Syncthing APP,左邊滑進來,點選「顯示裝置識別碼」,複製下來

  2. 在Syncthing網頁介面點選右下角的「新增遠端裝置」,填入手機上顯示的識別碼

  3. 點選Default Folder,點編輯,切換到「正在共享」,勾選跟手機分享資料夾。

  4. 點選Syncthing網頁左邊的「全部重新掃描」嘗試同步到遠端裝置

  5. 手機應該會收到通知,點選同意連線

  6. 手機會收到新增資料夾的請求

  7. 給資料夾取名,再點選資料夾圖示(紅框處),設定手機上用於存放同步的資料夾。請在手機內部儲存空間建立Syncthing/Sync結構的資料夾,再點選確定。

  8. 幾秒後檔案就會同步到手機上了。網頁界面顯示「最新」代表雙方都已完成同步。

  9. 日後你想新增第三個裝置,同樣也是到電腦上的Syncthing點選「新增遠端裝置」。電腦的話記得開啟防火牆。

4. Syncthing的同步連線方式
#

本節介紹Syncthing的同步原理和連線方式。每個Syncthing裝置都有一組隨機產生的識別碼。Syncthing在傳輸資料的時候會使用TLS加密連線。

首先是Wifi連線,Syncthing預設會啟用探索模式,二個的裝置在同一個Wifi下就能互相發現對方,進行P2P。

How Syncthing works

但若是位於不同網路(比方說手機連4G,電腦位於NAT後面),那就不可能P2P。這時連線高機率走官方中繼伺服器。儘管可以連線啦,但速度會很慢。

How Syncthing works

官方文件推薦的做法是通訊埠轉發(port forwarding),再讓你的電腦取得公網IP,使其能從外網存取。這樣就不需要走走官方中繼伺服器也可以讓二個裝置P2P,速度比較快。

而我是使用內網穿透的方式,來讓二個裝置P2P。

5. 內網穿透軟體搭配Syncthing使用
#

我希望Syncthing不只是可以在內網傳輸,在外網也可以使用。甚至不需要Wifi也能連線。

就像使用BT軟體一樣,要讓不同網路的二個裝置P2P,你就得將裝置暴露到公開網路。

但是把電腦暴露給公網很危險,而且若有人可以整天掃我的通訊埠也怪可怕的,我不想讓裝置上的Syncthing伺服器可以被任意探索。

要解決以上問題,我用 內網穿透軟體TailScale或ZeroTier,用VPN的機制讓所有裝置處於虛擬內網,就不需要把電腦暴露給公共網路了,也不需要讓Syncthing開自動探索,加強安全性。

在裝好內網穿透軟體後,回到Syncthing網頁介面,點選右上角操作 → 設定 → 連線,關閉所有自動探索選項。

剛剛設定的手機同步資料夾應該不會斷掉,只不過你得點選遠端裝置,編輯 → 進階,把「位址」改成tcp://裝置的虛擬區域IP才可以繼續同步。

6. 設定Syncthing單向同步
#

跟雙向同步不同,「單向同步」就是指定一個資料夾,將其做單向傳輸。

比方說電腦新增一個~/Backup資料夾,點選編輯 → 進階,將資料夾類型設為「僅接收」。這樣在手機新增該資料夾之後,就只會接收手機傳過來的檔案,而不會把電腦端的檔案也同步到手機上。

參考資料
#

相關文章

開源友好的主機供應商「PikaPods」,一鍵架設Docker雲端服務
Linux系統 Self-hosting自架 Nextcloud Docker Podman
自架開源SearXNG元搜尋引擎,一次搜尋Google、Duckduckgo多個搜尋引擎
Linux系統 Self-hosting自架 Search Engine SearXNG Google Search
Gluetun:讓Docker容器走VPN連線,沒網路就斷線,使用教學
Linux系統 Self-hosting自架 Docker VPN Torrent

留言板

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。要討論程式碼請用Giscus,匿名討論請用Disqus。

這是Giscus留言板,需要Github帳號才能留言。支援markdown語法,若要上傳圖片請貼Imgur連結。您的留言會在Github Discussions向所有人公開。

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。