資料同步工具-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,這些工具可能是你需要的:
- winSCP
用來登入到linux系統,我都拿它來上傳、下載檔案,編輯純文字檔案、新增檔案、資料夾等等,軟體介面支援中文
點我前往winSCP官方網站 - PuTTY
搭配winSCP使用的命令行工具,當你已經在winSCP登入了linux系統時,在winSCP視窗中按ctrl+p,就能打開PuTTY命令行視窗並自動登入
點我前往PuTTY官方網站 - syncthing主程式
按照本系列的第一篇文章下載用於linux系統的syncthing可執行檔,懶得看自己linux是什麼架構的話可以無腦用amd 64架構的版本,無法啟動再研究要換什麼版本。
如果你不在乎是否為最新版,也可以直接從我的下載站下載,很大可能不是最新版本,不過後續也可以從syncthing的網頁裡手動更新
點我下載linux 64位系統架構的syncthing
之後你需要把這個檔案上傳到你的linux電腦上 - syncthing的服務檔案
為了讓syncthing能在linux系統的後台運行,你需要一個服務設定檔,這個設定檔理論上ubuntu20.04之後的版本應該都能用,不過我自己的系統是ubuntu24.04,
點我下載syncthing的服務配置檔案
這個檔案在之後也需要上傳到你的linux電腦上
linux基本部署介紹
- 如果以root帳戶啟動syncthing,會有報錯訊息,一直推薦你用一般帳戶來啟動syncthing,
在現在的版本中,其實用root也可以啟動,直接無視警告就好,
如果你使用普通帳戶來啟動syncthing,之後如果要自動更新,可能會產生權限不足的錯誤,處理起來也會比較麻煩。
因此我一直都是用root啟動,當然,你不見得要跟我一樣~
p.s 如果你要使用我的服務設定檔達到開機自動啟動syncthing的目的,那還是需要用root直接啟動,或是你可以讓AI協助修改服務設定檔 - 現在,用你會的方式,從命令行登入到linux電腦,
然後打開winSCP並登入到linux電腦上, - 接下來你可以選擇新增一個帳戶,然後把它配置成跟root一樣的權限,這樣更新也不會報錯,但其實跟直接用root也沒什麼大區別了
新增帳戶有兩種方法,把下面的使用者名稱替換成自己想要的帳戶使用者名稱:- 第一種方法(較為簡單,按照提示即可新增完成)
輸入指令:
sudo adduser 使用者名稱 - 第二種方法(需要手動輸入每一個動作的指令)
新增帳戶,輸入指令:
sudo useradd 使用者名稱
設定密碼,輸入指令:
sudo passwd 使用者名稱
強制建立帳戶的目錄(如果沒有帳戶目錄,登入後會無法操作,
當你登入後發現無法操作,才使用root帳戶輸入此指令)
輸入指令:
sudo useradd -m 使用者名稱
- 第一種方法(較為簡單,按照提示即可新增完成)
- 接著為了保證在使用一般帳戶登入後,仍然有足夠權限來執行檔案,需要到這個路徑修改sudoers檔案,
這裡可以用winSCP打開檔案來編輯,會比用nano之類的編輯器方便
/etc/sudoers
在打開的檔案中找到這行
root ALL=(ALL:ALL) ALL
假設你前面創建的使用者名稱是 lamb 這個名字,複製上面這行,把root替換成你剛創建的使用者名稱,然後再新增一行,修改後會像這樣→
root ALL=(ALL:ALL) ALL
lamb ALL=(ALL:ALL) ALL
修改好後保存檔案,就能用這個帳戶登入linux並輸入指令了
- 在windows上下載linux版本的syncthing,之後我會先在windows上解壓壓縮包,把裡面的這個可執行檔案
syncthing
傳輸到linux主機上
p.s 注意,這個檔案是沒有副檔名的喔,linux上的可執行檔案沒有必須加副檔名的要求 - 將這個執行檔放到以下路徑,如果/opt沒有syncthing這個資料夾的話,可以用winSCP手動創建,
創建好後就把檔案上傳進去即可,路徑是:
/opt/syncthing/
之後移動命令行的工作目錄到可執行檔案所在的目錄,輸入指令:
cd /opt/syncthing/ - 設定一下可執行檔案的權限,不然可能會因為權限問題無法執行
chmod 755 /opt/syncthing/syncthing - 接下來啟動syncthing,輸入指令:
./syncthing
此時會開始初始化syncthing,順利的話可以看到一堆包含時間戳的輸出 - 之後在本地windows這裡按
win+r
輸入
cmd
打開命令行視窗 - 接下來需要把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密碼,輸入正確後送出指令,不會有其他輸出,
所以不用太驚訝怎麼沒反應,如果沒有提示密碼錯誤,或顯示錯誤訊息的話,這就代表已經成功轉發了 - 最後只要打開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/
這個目錄裡面,不然服務設定檔在執行的時候會找不到檔案,
如果你在前面有乖乖按照我的步驟操作的話,那應該是沒問題的。
下面就來介紹一下步驟:
- 把之前提供的服務設定檔下載好,它是一個純文字檔案,你也可以用任何文字編輯器打開來瀏覽。
然後把這個服務設定檔
syncthing.service
上傳到linux電腦的這個路徑
/etc/systemd/system/ - 之後刷新服務設定,在命令行輸入指令:
sudo systemctl daemon-reload - 然後啟動syncthing服務,輸入指令:
sudo systemctl start syncthing.service - 把syncthing的服務設為開機自動啟動
sudo systemctl enable syncthing.service - 檢查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啦! - 如果在過程中出了什麼狀況,或是有些小毛病,你還可以直接一條指令來重啟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反向代理設定步驟
- 你的linux機器需要一個固定IP,且這個IP外部可以直接訪問,
如果沒有可以讓外部直接連進來的IP,那下面的設定也就沒有意義了,因為跟你不同往綠的裝置永遠找不到你的linux機器在哪裡 - 在linux上安裝nginx,以ubuntu來說可以用apt直接安裝
- 寫好一個nginx配置檔案,主要功能是代理請求到127.0.0.1的8384端口,
你需要有一個域名,加上一個ssl證書,才能配置比較安全的https連接,
如果這兩個都沒有,也可以直接用ip作為syncthing頁面的網址,但是ip應該不太好記,不用的話過幾天就忘了 - 把nginx配置檔案放到這個路徑
/etc/nginx/sites-available/ - 接下來做一個連結到下面路徑,linux的連結功能類似於windows的捷徑(快捷方式),
而nginx目錄中的sites-enabled裡拉進去的連結,就是要啟用的網站設定檔,
有的人也會直接把網站設定檔放到sites-enabled,這樣就不用拉連結過來,但當你想要臨時停用網站的時候,只能把檔案刪除或移動到其他位置,反而更麻煩
/etc/nginx/sites-enabled/
輸入的指令類似這樣
ln -s /etc/nginx/sites-available/配置檔案名稱 /etc/nginx/sites-enabled/配置檔案名稱 - 輸入這個指令檢查配置檔案是否有錯誤,如果沒看到一堆報錯那就代表沒問題
nginx -t - 重啟nginx來加載新的nginx配置
nginx -s reload - 在任何裝置的瀏覽器中,輸入你在nginx設定檔中的server name,
順利的話你應該能看到syncthing頁面了,記得設定一個複雜點的帳號和密碼,否則任何人都能偷走你的資料
直接設定syncthing讓任何裝置都能訪問的步驟
- 打開syncthing網頁
- 點擊syncthing網頁中的:操作→設定
- 按tab找到gui按enter
- 修改(GUI 監聽位址)這個編輯框內的內容,例如
0.0.0.0:8384
0.0.0.0 代表開放給任何裝置都能連線,
8384可以隨意修改成其他你喜歡的端口,但之後若要打開syncthing網頁也需要輸入這裡指定的端口。