Syncthing – 數據同步利器---自己的網盤,詳細安裝配置指南,內網使用,發現服務器配置
簡介:
無論辦公、文件共享、團隊協作還是家庭照片、視頻、音樂、高清電影的存儲,我們常常都有文件同步和存儲的需求。但隨着國內各大網盤的花式陣亡或限速,早已沒什么好選擇了。好吧,我已經轉戰使用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桌面程序。
一:官網及下載
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,
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=<file>] [-db-dir=<string>] [-debug] [-http] [-key=<string>] [-listen=<address>] [-metrics-listen=<address>] [-replicate=<peers>] [-replication-listen=<address>]
-cert=<file>
證書文件(default “./cert.pem”).
-db-dir=<string>
數據存儲目錄 (default “./discovery.db”).
-debug
debug模式輸出
-http
使用http協議還要求在https代理后面 (behind an HTTPS proxy).
-key=<file>
key文件 (default “./key.pem”).
-listen=<address>
監聽端口 (default “:8443”).
-metrics-listen=<address>
不知道是什么意思 (default disabled).
-replicate=<peers>
復制另一台發現服務器?
-replication-listen=<address>
另一台發現服務器監聽端口?
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的鏡像。這幾天寫好了,把地址給大家。
寫着也挺快,但這篇教程,又臭又長,讓我休息一下吧。