Syncthing – 資料同步利器---自己的網盤,詳細安裝配置指南,內網使用,發現伺服器配置,更新docker
簡介:
無論辦公、檔案共享、團隊協作還是家庭照片、視訊、音樂、高清電影的儲存,我們常常都有檔案同步和儲存的需求。但隨著國內各大網盤的花式陣亡或限速,早已沒什麼好選擇了。好吧,我已經轉戰使用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,
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=
-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: