1. 程式人生 > 實用技巧 >Syncthing – 資料同步利器---自己的網盤,詳細安裝配置指南,內網使用,發現伺服器配置,更新docker

Syncthing – 資料同步利器---自己的網盤,詳細安裝配置指南,內網使用,發現伺服器配置,更新docker

原文連結:https://www.cnblogs.com/jackadam/p/8568833.html

簡介:

無論辦公、檔案共享、團隊協作還是家庭照片、視訊、音樂、高清電影的儲存,我們常常都有檔案同步和儲存的需求。但隨著國內各大網盤的花式陣亡或限速,早已沒什麼好選擇了。好吧,我已經轉戰使用onedriver了,但是在單位裡面,沒有網際網路,找開源的軟體試試自己搭建吧。

自建網盤雲儲存同步服務的軟體有很多, Seafile、NextCloud、ownCloud、BT Sync (Resilio Sync) 等。

而 Syncthing 則有著自己非常特別的優點,受到眾多高手們的推薦,被譽為是 Resilio Sync / BT Sync 和 Dropbox 的最佳開源替代品。

Syncthing 最大的特色是採用了與 Resilio Sync (BitTorrent Sync) 類似的 P2P 分散式技術,無需中心伺服器,即可讓多臺裝置互相實時同步檔案。

Syncthing 官方支援 Linux、Windows、OS X、FreeBSD、Solaris 等系統,並且有第三方的 iOS、Android 應用。

我選擇它還有一個原因就是,它只需要一個檔案就可以了。在linux下只有一個檔案,在windows下也可以只有一個檔案,當然還有一個GUI桌面程式。

回到頂部

一:官網及下載

官網地址:https://syncthing.net/

linux64位就是我主力使用的,放在一個fedora伺服器上,不過是跑在docker裡面。

SyncTrayzor是官方提供的GUIwindows客戶端,方便設定開機啟動進行自動同步。可以縮小到工作列。實在是方便部署到客戶端,讓它自動上傳啊。

SyncTrayzor維護在github。https://github.com/canton7/SyncTrayzor/releases

Portable是免安裝版本。

Setup就是安裝版本。

X64 X86,根據你的系統,隨便下載吧。

回到頂部

二:在linux下進行安裝

1.下載

隨你喜歡wget curl winscp了。解壓後只需要一個檔案:

2.配置

2.1複製檔案

cp syncthing /usr/bin/syncthing

只需要複製這一個檔案,其他的可以刪了。

2.2修改許可權

chmod +x /usr/bin/syncthing

加上可執行許可權

2.3執行

./usr/bin/syncthing

就這一個檔案,直接執行。

它會自動生成配置檔案,還不能先改,只好執行一遍,等它出現

[CKEAY] 17:44:53 INFO: Detected 1 NAT service
[CKEAY] 17:45:39 INFO: Joined relay relay://36.229.223.123:22067
大概就是已經生成配置檔案,並執行起來了。

ctrl+c 停止這個程序。

2.4修改配置檔案

sed 's/127.0.0.1/0.0.0.0/g' /root/.config/syncthing/config.xml

預設配置檔案在/root/.config/syncthing/config.xml,預設監聽網路是127.0.0.1,遠端不能訪問,所以用sed命令修改為0.0.0.0

3.執行

./usr/bin/syncthing

再次執行起來。

4.測試

http://youip:8384/ 或者 http://hostname:8384/ 都可以訪問,記得改你的ip,或者網路名。複製不能用。

只要沒出亂七八糟的錯誤,就算安裝成功了。

回到頂部

二:在Docker中安裝

1.下載

docker pull syncthing/syncthing

2.執行

docker run -it -p 8384:8384 -p 22000:22000
-v /storage/conf/syncthing:/var/syncthing/config
-v /storage/data/syncthing:/var/syncthing
syncthing/syncthing:latest

官方給的執行引數就是這樣了。

/storage/conf/syncthing,配置檔案儲存位置。

/storage/data/syncthing,資料儲存主目錄。

兩個目錄根據自己的情況替換。

8384 22000,兩個埠一般不佔用,直接執行。

3.測試

和linux測試一樣。

http://youip:8384/ 或者 http://hostname:8384/ 都可以訪問,記得改你的ip,或者網路名。複製不能用。

只要沒出亂七八糟的錯誤,就算安裝成功了。

回到頂部

三:在windows中安裝

1.下載

windows下我們就不使用linux那樣的單檔案版了。

https://github.com/canton7/SyncTrayzor/releases/download/v1.1.21/SyncTrayzorPortable-x64.zip

目前最新的應該是這個版本。如果你是32位的系統,請下載x86版

2.執行

解壓後找到SyncTrayzor.exe,雙擊執行即可

3.配置

還是老問題,預設只有127.0.0.1,localhost可以訪問,沒有遠端訪問許可權。

照下圖,右邊的設定,用來修改圖形介面監聽地址,並且可以設定隨開機自動啟動

回到頂部

四:基本配置

1.配置簡介

我們要配置自動同步,那麼就要有2臺電腦執行syncthing,相互要能連通,並配置相同ID的共享資料夾。

每臺電腦,第一次執行syncthing時,會自動生成隨機ID,並註冊ID,網路地址到全球發現伺服器。新增遠端裝置時,去全球發現伺服器,來查ID,取得遠端裝置的網路地址。

所以,在windows不要複製解壓執行過的SyncTrayzorPortable-x64.zip,只複製壓縮包,解壓,重新生成新的ID。

後面的例子以2臺裝置同步一個資料夾為例講解。裝置1:WORKER(操作機,本地裝置),裝置2: NUC(家庭伺服器,放在路由器邊上,沒鍵盤,沒滑鼠,只接了HDMI到電視,遠端裝置) 同步一個資料夾,WORKER路徑:D:\PythonTest\flasktest ,nuc路徑:/var/syncthing/temp/app。WORKER作業系統windows,NUC作業系統fedora,syncthing執行在docker中,對映容器路徑/var/syncthing到物理路徑/storage,那麼最後的共享資料夾,即NUC物理機的/storage/temp/app。對這些不理解的,自己慢慢補docker的知識。忽略NUC執行的DOCKER。

2.配置中文.

如下圖,先點English,在彈出的下拉框,點選Chinese(china),就變成中文了。

3.配置WEB安全

我們輸入地址:8384,預設設定,syncthing只允許localhost本地登入,但是我們為了方便配置,已經給它改了監聽0.0.0.0,任意地址都可以訪問,貌似不安全啊。

那麼我們就配置一下web登入密碼:

訪問web頁面後在右上角 ,操作--設定--圖形使用者介面

圖形管理介面使用者名稱

圖形管理介面密碼

這兩項就可以設定圖形介面登入賬戶密碼了。

使用加密連線到圖形管理頁面

如果你怕被監聽到,開啟加密也可以。

每個執行syncthing的機器(WORKER NUC)都要單獨設定。

4.配置裝置名稱

訪問web頁面後在右上角 ,操作--設定--常規--裝置名

為了方便使用,還是設個裝置名吧,不然貌似是使用ID前幾位的隨機字串做裝置名,機器多了,可真不方便。

還是每個裝置設定。

回到頂部

五:新增遠端裝置

1.獲取遠端裝置ID

在WORKER上新增NUC。

你時去NUC抄,還是遠端登入看?當然時遠端登入看了,安裝的時候,我都設定了任意IP監聽登入。

訪問NUCweb頁面後在右上角 ,操作--顯示ID,

BTQMGH2-JBPTQGX-HQWBLLW-EBEQJUC-NMZOUMQ-3TLYVSV--

這一長串就是遠端裝置的ID。下面的二維碼時方便android手機端使用的掃碼新增。

2.本地裝置新增遠端裝置

訪問WORKERweb頁面(或SyncTrayzor視窗)後在右下角 ,新增遠端裝置

在裝置ID,填上剛複製過來的遠端裝置ID。

下面有兩個選項介紹一下:

作為中介,syncthing使用了P2P技術來實現檔案同步,現在我們實驗的時候時2臺裝置,同步一個資料夾,如果加入新裝置,是要分別給這兩臺裝置配置一個新的遠端裝置。如果開啟作為中介,那麼,WORKER,會自動新增,或稱為同步NUC的遠端裝置(新裝置)。

自動接受,如果在NUC建立了一個共享資料夾,並共享給WORKER,無需WORKER選擇接受,即在預設目錄,建立共享資料夾,並同步。

根據自己的需要來選擇開啟吧。我都沒開啟,因為我實驗2臺裝置,部署也就3-4個裝置。

3.等待

因為預設使用全球發現伺服器,受網速影響,還是要等等的。

注意NUC的web介面。出現新裝置,就是已經連上了,選擇新增裝置,就會自動把WORKER,作為遠端裝置,連線到NUC。

此時兩臺裝置web頁面,右下角部分,都會出現遠端裝置(即對方)

回到頂部

六:新增同步資料夾

1.刪除預設資料夾

貌似新裝,管理頁左邊都會出現 default ***

點選 資料夾名--下拉框右下部分--選項--移除--確認

刪除是因為路徑問題,它們分別生成在每臺裝置的預設共享目錄下,基本不是我們需要的路徑。

2.本地裝置新增資料夾

管理頁中間部分,新增資料夾。

資料夾路徑,估計要你自己寫一下了(D:\PythonTest\flasktest ),到資源管理器去複製也可以的。

關鍵設定資料夾ID(app) ,說明在所有從裝置上必須一致,也就是在我們這多個裝置同步時,都用這個ID,來同步這個資料夾。下面還有共享給遠端裝置(NUC),勾選遠端裝置的名字就好了。

其中的高階設定,看一下也能明白。最後儲存即可。

回到頂部

七:給遠端裝置新增同步資料夾

1.還是等待,我們使用的是全球發現伺服器

直到這個在NUC的管理頁面出現,點選新增即可。

2.配置遠端裝置共享資料夾路徑

/var/syncthing/temp/app

這個應該時前期就決定好的,這時填一下就可以了,記得勾選下面的共享給WORKER。不勾選的時候是單向同步?

3.配置資料夾 ID

app

這個也是在本地裝置配置資料夾時給定的ID

4.檢視同步狀態

看下面兩個圖,區別是遠端裝置是否顯示同步完成,因為使用P2P 分散式技術,所以沒有中心伺服器,那麼每臺裝置,都即是客戶端,又是伺服器。

資料夾上的同步完成,僅代表本地客戶端已經和本地伺服器同步了。(兩臺裝置沒完成完全同步)

遠端裝置上的同步完成,代表本地客戶端和這個遠端伺服器同步了。(兩臺裝置完成完全同步)

有的時候那個同步完成,會顯示同步中。

回到頂部

八:內部網路使用(固定IP),無法連線全球發現伺服器

1.簡介

當我們在內部網路使用syncthing時,因為沒有辦法連線全球發現伺服器,那麼我們該如何配置呢?這章節說明一下在固定IP的情況下,我們可以使用IP地址來配置互相發現。只要能互相ping通,跨網段也沒關係的。

我們在官方的DOCKER執行命令中可以看出對映兩個端口出來,8384和22000,8384是我們用來web控制的,那麼22000就是syncthing的監聽埠了。

2.配置

看下面兩圖,這時編輯已經建立連線的遠端裝置,新建裝置時也一樣,我在地址列表中填入了遠端裝置的協議,IP,埠。看說明,host計算機名字也可以,域名應該也可以。

dynamic,就是自動發現,也是預設值,難道時自動掃描麼?刪除也可以。

3.驗證連通

下面兩圖,都是連線斷開的狀態,不過,我這兩臺裝置,都能連線網際網路,估計獲取了發現伺服器記錄的地址。但這並不影響我們做測試。

第二張圖看出地址多了一行我們配置的tcp://192.168.1.4:22000

下面兩圖是使用dynamic時的連通狀態,真不知道時什麼IP地址。

下面兩圖就是都配置對方地址後的連通狀態了。使用對方的網路地址連線。

回到頂部

九:內部網路使用(動態IP),無法連線全球發現伺服器

1.簡介

上一章節我們使用固定ip,可以通過填寫對方的網路連線引數來配置遠端裝置。如果同網段動態IP,應該也可以用host計算機名來配置遠端裝置。

那麼另一個麻煩又跳出來了,如果是不同網段,又是動態IP,怎麼辦?連線引數中IP是變動的,計算機名時無法廣播解析的。或許可以建個DNS伺服器來實現。

太扯了。又可能影響原來的DNS解析。

Syncthing Discovery Server---syncting發現伺服器來解救你,你這麼複雜的執行環境,相信會有一個小型伺服器的,只要有一個固定IP,就可以了。幾十臺裝置,幾百臺裝置,都可以註冊到這個發現伺服器,替代全球發現伺服器。

發現服務介紹https://docs.syncthing.net/users/stdiscosrv.html 發現服務原始碼 https://github.com/syncthing/discosrv 發現服務下載:https://github.com/syncthing/discosrv/releases

2.命令參考

stdiscosrv [-cert=] [-db-dir=] [-debug] [-http] [-key=] [-listen=

] [-metrics-listen=
] [-replicate=] [-replication-listen=
]

-cert=
證書檔案(default “./cert.pem”).

-db-dir=
資料儲存目錄 (default “./discovery.db”).

-debug
debug模式輸出

-http
使用http協議還要求在https代理後面 (behind an HTTPS proxy).

-key=
key檔案 (default “./key.pem”).

-listen=


監聽埠 (default “:8443”).

-metrics-listen=


不知道是什麼意思 (default disabled).

-replicate=
複製另一臺發現伺服器?

-replication-listen=


另一臺發現伺服器監聽埠?

3.執行

syncthing真是良心,也不用複雜的安裝,linux下也不用編譯,不論linux還是windows,都是一個檔案,直接執行。而且這個發現伺服器,看著挺多的執行引數,其實一個也不用寫。它和單檔案的客戶端一樣,直接執行就可以了,自動生成各個目錄和檔案。

windows下是這樣

linux下是這樣

如果你有自己的證書,那麼可以這樣執行,把證書路徑作為引數,啟動發現伺服器。

stdiscosrv -cert=/path/to/cert.pem -key=/path/to/key.pem

4.生成節點配置URL

如果您使用的是非CA簽名證書,則必須將該裝置ID(指紋)交給使用發現伺服器URL的客戶機。

這個客戶機的意思時對發現伺服器,所有執行syncthing的節點都是發現伺服器的客戶機。

非CA簽名的證書,自動生成的一定時非CA簽名證書。

官方給的示例是這樣的

https://disco.example.com:8443/?id=7DDRT7J-UICR4PM-PBIZYL3-MZOJ7X7-EX56JP6-IK6HHMW-S7EK32W-G3EUPQA

看到那串像序列號的東西,就是裝置ID,啟動發現伺服器的時候,它也顯示出來了。記下來,用來組合我們自己的發現伺服器地址。

本來就內網了,域名就算了,可以使用IP地址。

對應上面啟動的兩個發現伺服器。

windows:IP 192.168.1.4

URL https://192.168.1.4:8443/?id=ZRXXI2M-XEARVGA-SSYYEWO-6QGNNIZ-HPBVH3K-PIR6DCY-HJERGZE-PXF7NAL

linux: IP 192.168.1.3

URL http://192.168.1.3:8443/?id=5OJDGM7-BZ6EJT2-M2BEAIX-MK2SBMY-N4STHNI-MEP3VKO-RI6H27D-PYXTPAB

如果你有CA簽名的證書,那麼URL就不需要ID引數了。

https://disco.example.com:8443/ https://disco_server_ip:8443/

4.給節點配置URL

管理介面,右上角 操作--設定--連線

全球發現伺服器,刪除原來的default,填上我們生成的節點配置URL。

提示重啟syncthing,重啟一下就可以了。

5.關閉手動指定的遠端裝置地址

遠端裝置--選項--地址列表

原來的:tcp://192.168.1.4:22000,dynamic

改為:dynamic

6.測試

其實就是看遠端裝置的地址,原來我們使用defalut全球發現伺服器的時候,遠端裝置地址,反正是我不認識的地址。

當我們配置了遠端裝置IP地址之後,遠端裝置地址,是我們配置的遠端裝置地址。

現在我們取消了遠端裝置地址,使用了我們自己的發現伺服器地址。

也就是syncthing,把自己註冊到我們自己的發現伺服器上,並根據ID從我們自己的發現伺服器地址,查詢遠端裝置地址。

如果遠端裝置地址,是我們的內部網IP地址,並可以顯示同步完成。

那就一切OK了。

回到頂部

結語:

syncthing,使用方便,配置方便,在各大網盤紛紛關停,收費,限速………………因素下。

自己搭建一個,也挺好。或者百度搜索5T onedriver已失效。

我的用途呢,其實是在進行軟體開發的時候。worker編寫了原始碼,server生成docker,以前用ftp,sftp上傳,然後docker build。

檔案少的時候還好,檔案多的時候,又覆蓋,那是一個慢啊。都在一個區域網,又沒必要使用github的自動構建,用自動構建,還要等docker hub 伺服器空暇。

現在是把woker的原始碼資料夾,同步到server的docker build目錄。docker build的時候把原始碼copy進映象。編譯前還可以到web管理介面掃描同步一下。

尤其時原始碼只改幾個檔案的時候,同步很快。方便了我這個偽全棧的開發過程。

個人現在比較喜歡在伺服器上使用docker作為服務。官方提供了linux_syncthing的dockre映象。

我還需要一個linux_stdiscosrv的映象。這幾天寫好了,把地址給大家。

寫著也挺快,但這篇教程,又臭又長,讓我休息一下吧。

回到頂部

更新docker-compose

更新一個docker-compose檔案,用來使用docker-compose啟動。同時包含syncthing 和 discosrv。

不需要discosrv的可以刪掉。

version: '2'
services:
    syncthing:
        image: syncthing/syncthing
        container_name: syncthing
        volumes:
            - syncthing_con=/var/syncthing/config
            - /opt/data=/var/syncthing"]
        ports :
            - "8384:8384"
            - "22000:22000"
            - "21027:21027/udp"
        networks:
            - sync_net
        restart: always
    discosrv:
        image: syncthing/discosrv
        container_name: discosrv
        volumes:
            - discosrv_con=/var/stdiscosrv
        ports :
            - "19200:19200"
            - "8443:8443"
        networks:
            - sync_net
        restart: always
    
networks:
    sync_net:
volumes:
    syncthing_con:
    discosrv_con: