簡介:
不管辦公、文件共享、團隊協做仍是家庭照片、視頻、音樂、高清電影的存儲,咱們經常都有文件同步和存儲的需求。但隨着國內各大網盤的花式陣亡或限速,早已沒什麼好選擇了。好吧,我已經轉戰使用onedriver了,可是在單位裏面,沒有互聯網,找開源的軟件試試本身搭建吧。git
自建網盤雲儲存同步服務的軟件有不少, Seafile、NextCloud、ownCloud、BT Sync (Resilio Sync) 等。github
而 Syncthing 則有着本身很是特別的優勢,受到衆多高手們的推薦,被譽爲是 Resilio Sync / BT Sync 和 Dropbox 的最佳開源替代品。web
Syncthing 最大的特點是採用了與 Resilio Sync (BitTorrent Sync) 相似的 P2P 分佈式技術,無需中心服務器,便可讓多臺設備互相實時同步文件。docker
Syncthing 官方支持 Linux、Windows、OS X、FreeBSD、Solaris 等系統,而且有第三方的 iOS、Android 應用。flask
我選擇它還有一個緣由就是,它只須要一個文件就能夠了。在linux下只有一個文件,在windows下也能夠只有一個文件,固然還有一個GUI桌面程序。windows
一:官網及下載
官網地址: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,
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的鏡像。這幾天寫好了,把地址給你們。
寫着也挺快,但這篇教程,又臭又長,讓我休息一下吧。