資料同步工具-2 在linux上配置syncthing

資料同步工具-2 在linux上配置syncthing

這篇主要會介紹在linux系統上部署syncthing的步驟,
我使用的發行版是ubuntu server24.04,
ubuntu server是一個完全沒有gui介面,純靠輸入指令來跟電腦交互的linux系統,基本上linux的各種發行版部署方式應該都一樣。
這篇主要是給會使用linux系統的用戶一個參考,所以不會講太基礎的linux操作細節,
一些基礎知識可以參考我以前寫過的系列文章,雖然比較舊→
點我前往linux不專業心得分享系列文章

基本能力要求

想要真的學會怎麼在linux上部署syncthing,你至少需要具備以下能力:

  • 知道如何用ssh登入到你的linux電腦
  • 知道如何貼上指令和查看命令行的輸出
  • 知道如何上傳檔案到你的linux電腦上
  • 一顆強大的心臟,把linux搞壞了不會來找我問責,能勇敢的接受現實

需要的工具

介紹一下我會用到的工具,也是我操作linux系統的常用組合,
如果你跟我一樣會在windows上需要連線到linux,這些工具可能是你需要的:

  1. winSCP
    用來登入到linux系統,我都拿它來上傳、下載檔案,編輯純文字檔案、新增檔案、資料夾等等,軟體介面支援中文
    點我前往winSCP官方網站
  2. PuTTY
    搭配winSCP使用的命令行工具,當你已經在winSCP登入了linux系統時,在winSCP視窗中按ctrl+p,就能打開PuTTY命令行視窗並自動登入
    點我前往PuTTY官方網站
  3. syncthing主程式
    按照本系列的第一篇文章下載用於linux系統的syncthing可執行檔,懶得看自己linux是什麼架構的話可以無腦用amd 64架構的版本,無法啟動再研究要換什麼版本。
    如果你不在乎是否為最新版,也可以直接從我的下載站下載,很大可能不是最新版本,不過後續也可以從syncthing的網頁裡手動更新
    點我下載linux 64位系統架構的syncthing
    之後你需要把這個檔案上傳到你的linux電腦上
  4. syncthing的服務檔案
    為了讓syncthing能在linux系統的後台運行,你需要一個服務設定檔,這個設定檔理論上ubuntu20.04之後的版本應該都能用,不過我自己的系統是ubuntu24.04,
    點我下載syncthing的服務配置檔案
    這個檔案在之後也需要上傳到你的linux電腦上

linux基本部署介紹

  1. 如果以root帳戶啟動syncthing,會有報錯訊息,一直推薦你用一般帳戶來啟動syncthing,
    在現在的版本中,其實用root也可以啟動,直接無視警告就好,
    如果你使用普通帳戶來啟動syncthing,之後如果要自動更新,可能會產生權限不足的錯誤,處理起來也會比較麻煩。
    因此我一直都是用root啟動,當然,你不見得要跟我一樣~
    p.s 如果你要使用我的服務設定檔達到開機自動啟動syncthing的目的,那還是需要用root直接啟動,或是你可以讓AI協助修改服務設定檔
  2. 現在,用你會的方式,從命令行登入到linux電腦,
    然後打開winSCP並登入到linux電腦上,
  3. 接下來你可以選擇新增一個帳戶,然後把它配置成跟root一樣的權限,這樣更新也不會報錯,但其實跟直接用root也沒什麼大區別了
    新增帳戶有兩種方法,把下面的使用者名稱替換成自己想要的帳戶使用者名稱:
    • 第一種方法(較為簡單,按照提示即可新增完成)
      輸入指令:
      sudo adduser 使用者名稱
    • 第二種方法(需要手動輸入每一個動作的指令)
      新增帳戶,輸入指令:
      sudo useradd 使用者名稱
      設定密碼,輸入指令:
      sudo passwd 使用者名稱
      強制建立帳戶的目錄(如果沒有帳戶目錄,登入後會無法操作,
      當你登入後發現無法操作,才使用root帳戶輸入此指令)
      輸入指令:
      sudo useradd -m 使用者名稱
  4. 接著為了保證在使用一般帳戶登入後,仍然有足夠權限來執行檔案,需要到這個路徑修改sudoers檔案,
    這裡可以用winSCP打開檔案來編輯,會比用nano之類的編輯器方便
    /etc/sudoers
    在打開的檔案中找到這行
    root ALL=(ALL:ALL) ALL
    假設你前面創建的使用者名稱是 lamb 這個名字,複製上面這行,把root替換成你剛創建的使用者名稱,然後再新增一行,修改後會像這樣→
root	ALL=(ALL:ALL) ALL
lamb	ALL=(ALL:ALL) ALL

修改好後保存檔案,就能用這個帳戶登入linux並輸入指令了

  1. 在windows上下載linux版本的syncthing,之後我會先在windows上解壓壓縮包,把裡面的這個可執行檔案
    syncthing
    傳輸到linux主機上
    p.s 注意,這個檔案是沒有副檔名的喔,linux上的可執行檔案沒有必須加副檔名的要求
  2. 將這個執行檔放到以下路徑,如果/opt沒有syncthing這個資料夾的話,可以用winSCP手動創建,
    創建好後就把檔案上傳進去即可,路徑是:
    /opt/syncthing/
    之後移動命令行的工作目錄到可執行檔案所在的目錄,輸入指令:
    cd /opt/syncthing/
  3. 設定一下可執行檔案的權限,不然可能會因為權限問題無法執行
    chmod 755 /opt/syncthing/syncthing
  4. 接下來啟動syncthing,輸入指令:
    ./syncthing
    此時會開始初始化syncthing,順利的話可以看到一堆包含時間戳的輸出
  5. 之後在本地windows這裡按
    win+r
    輸入
    cmd
    打開命令行視窗
  6. 接下來需要把linux機器上的8384端口轉發到windows上,
    因為linux是遠端登入的,沒有瀏覽器,所以你需要把linux上的8384端口轉發到windows本地的某個端口上,
    這樣就可以透過windows上的瀏覽器,直接訪問linux上正在監聽8384端口的syncthing了,是不是很神奇?
    先看一下下面的指令
    ssh -CNg -L 16006:127.0.0.1:8384 使用者名稱@serverIP -p 端口號
    把使用者名稱替換成你登入linux的使用者名稱
    把serverIP替換成你linux機器的ip或域名
    把端口號替換成你連線到linux ssh使用的端口號,通常使用的是22,
    如果你確定使用的是22,也可以刪除-p參數和後面的端口號,
    16006是要轉發到windows本地的端口,可以隨意改,只要是沒被使用的端口都可以!
    127.0.0.1:8384的意思是linux本地的8384port(端口),
    8384端口是不能隨意修改的,因為syncthing預設會使用8384作為網頁的入口。
    指令修改後類似這樣→
    ssh -CNg -L 16006:127.0.0.1:8384 root@192.168.50.3
    送出指令後你應該能看到
    Are you sure you want to continue connecting (yes/no/[fingerprint])?
    詢問你是否要登入到這台機器,輸入指令:
    yes
    之後會要求輸入ssh密碼,輸入正確後送出指令,不會有其他輸出,
    所以不用太驚訝怎麼沒反應,如果沒有提示密碼錯誤,或顯示錯誤訊息的話,這就代表已經成功轉發了
  7. 最後只要打開windows上的瀏覽器,輸入
    127.0.0.1:端口號
    以前面我的例子來說,就是
    127.0.0.1:16006
    就能看到linux的syncthing的頁面跑出來囉!
    可以先設定好要新增的遠端裝置和共享資料夾,完成後就可以把用來轉發的命令行視窗關閉,
    然後再linux的那個命令行視窗中,按
    ctrl+c
    來停止運行syncthing,稍後我會告訴你怎麼把syncthing配置成可以長時間在後台持續運行的方法。
    以後如果要新增遠端裝置或新增共享資料夾,只要透過那條指令來把linux上的端口轉發到本地,就能直接訪問syncthing的頁面了,
    這也間接顯示了ssh的安全性是十分重要的,別人只要知道了你的ssh密碼,就可以直接把你linux上的任何端口轉發到自己電腦上,然後你的linux就等同裸奔啦!

把syncthing配置為系統服務

配製程系統服務的最大用途,是為了讓syncthing可以在後台運行,而不是像執行檔案那樣,把視窗關閉後或按了ctrl+c就停止運行了,
而且系統服務還可以配置為開機自動啟動,全部弄好之後,以後就可以放著不管了。
另外,我的服務設定檔會直接使用root帳戶來啟動syncthing,
你的syncthing可執行檔也必須放在
/opt/syncthing/
這個目錄裡面,不然服務設定檔在執行的時候會找不到檔案,
如果你在前面有乖乖按照我的步驟操作的話,那應該是沒問題的。
下面就來介紹一下步驟:

  1. 把之前提供的服務設定檔下載好,它是一個純文字檔案,你也可以用任何文字編輯器打開來瀏覽。
    然後把這個服務設定檔
    syncthing.service
    上傳到linux電腦的這個路徑
    /etc/systemd/system/
  2. 之後刷新服務設定,在命令行輸入指令:
    sudo systemctl daemon-reload
  3. 然後啟動syncthing服務,輸入指令:
    sudo systemctl start syncthing.service
  4. 把syncthing的服務設為開機自動啟動
    sudo systemctl enable syncthing.service
  5. 檢查syncthing服務的啟動狀態,輸入指令:
    sudo systemctl status syncthing.service
    如果正常啟動的話可以在輸出中看到類似這樣的內容
    Active: active (running) since Thu 2025-09-04 21:51:40 CST; 2 weeks 2 days>
    Docs: man:syncthing(1)
    Main PID: 927 (syncthing)
    重點在於狀態顯示為running,這就代表目前syncthing的服務有在正常運行,這樣就設定好啦!
    以後重開機linux的時候syncthing就能自動在後台啟動了!
    記得/opt/syncthing、和裡面的可執行檔不要移動,不燃服務設定檔再啟動的時候會找不到可執行檔,那就無法啟動syncthing啦!
  6. 如果在過程中出了什麼狀況,或是有些小毛病,你還可以直接一條指令來重啟syncthing服務
    sudo systemctl restart syncthing.service

隨時隨地透過瀏覽器訪問linux上的syncthing網頁

如果你想要讓linux上的syncthing可以在任何其他電腦、手機等,透過瀏覽器訪問,有兩種作法,
第一種,使用nginx做反向代理,直接把流量轉發到linux電腦中的8384端口,
優點: 如果你有自己的域名,可以直接使用域名來連線到syncthing網頁,可以配置比較安全的https連線,不需要打端口號,
缺點: 需要花錢購買域名、ssl證書,需要自己配置nginx
連線的網址類似這樣→
hppts:yyy.com
第二種,在syncthing網頁中,直接修改設定,讓任何裝置都能連到syncthing網頁
優點: 不需要花錢購買域名、ssl證書
缺點: 如果沒有域名,需要打IP:端口號才能連到syncthing頁面,且只能用相對不安全的http連線,還要知道怎麼開防火牆的端口
連線的網址類似這樣→
http:100.100.1.1:8384
不過我認為,開放任何裝置都能訪問syncthing網頁並沒有很必要,通常設定好共享資料夾和新增遠端裝置後,也不會頻繁編輯syncthing設定,
讓syncthing直接暴露在網路上可能也容易帶來額外的風險,畢竟syncthing雖然可以在顯示設定頁面之前,讓用戶輸入帳號密碼,但一樣有被暴力破解的可能,
syncthing的登入頁面在帳號密碼錯誤時,無法配合防火牆做到錯誤多少次,就自動封鎖IP,所以想做壞事的人可以反覆的暴力破解,直到猜到你的帳號和密碼。

nginx反向代理設定步驟
  1. 你的linux機器需要一個固定IP,且這個IP外部可以直接訪問,
    如果沒有可以讓外部直接連進來的IP,那下面的設定也就沒有意義了,因為跟你不同往綠的裝置永遠找不到你的linux機器在哪裡
  2. 在linux上安裝nginx,以ubuntu來說可以用apt直接安裝
  3. 寫好一個nginx配置檔案,主要功能是代理請求到127.0.0.1的8384端口,
    你需要有一個域名,加上一個ssl證書,才能配置比較安全的https連接,
    如果這兩個都沒有,也可以直接用ip作為syncthing頁面的網址,但是ip應該不太好記,不用的話過幾天就忘了
  4. 把nginx配置檔案放到這個路徑
    /etc/nginx/sites-available/
  5. 接下來做一個連結到下面路徑,linux的連結功能類似於windows的捷徑(快捷方式),
    而nginx目錄中的sites-enabled裡拉進去的連結,就是要啟用的網站設定檔,
    有的人也會直接把網站設定檔放到sites-enabled,這樣就不用拉連結過來,但當你想要臨時停用網站的時候,只能把檔案刪除或移動到其他位置,反而更麻煩
    /etc/nginx/sites-enabled/
    輸入的指令類似這樣
    ln -s /etc/nginx/sites-available/配置檔案名稱 /etc/nginx/sites-enabled/配置檔案名稱
  6. 輸入這個指令檢查配置檔案是否有錯誤,如果沒看到一堆報錯那就代表沒問題
    nginx -t
  7. 重啟nginx來加載新的nginx配置
    nginx -s reload
  8. 在任何裝置的瀏覽器中,輸入你在nginx設定檔中的server name,
    順利的話你應該能看到syncthing頁面了,記得設定一個複雜點的帳號和密碼,否則任何人都能偷走你的資料
直接設定syncthing讓任何裝置都能訪問的步驟
  1. 打開syncthing網頁
  2. 點擊syncthing網頁中的:操作→設定
  3. 按tab找到gui按enter
  4. 修改(GUI 監聽位址)這個編輯框內的內容,例如
    0.0.0.0:8384
    0.0.0.0 代表開放給任何裝置都能連線,
    8384可以隨意修改成其他你喜歡的端口,但之後若要打開syncthing網頁也需要輸入這裡指定的端口。