概述
gofs是基于golang開發的一款開箱即用的跨平臺檔案同步工具,支持在本地磁盤之間同步、從遠程服務器同步變更到本地、將本地檔案變更推送到遠程服務器三種模式,開源地址如下:https://github.com/no-src/gofs ,歡迎Star或者提交Issue和PR,共同進步!
安裝
首先需要確保已經安裝了Go (版本必須是1.18+),然后你就可以使用下面的命令來安裝gofs了
如果你不需要自行從原始碼編譯安裝,也可以直接下載最新發布的二進制檔案
go install github.com/no-src/gofs/...@latest
在Docker中運行
如果你想要在docker中運行,請在安裝或者編譯的時候使用-tags netgo命令列引數或者設定環境變數CGO_ENABLED=0,否則當你運行docker容器時可能會報找不到gofs的錯誤
go install -tags netgo github.com/no-src/gofs/...@latest
后臺運行
在windows系統中,你可以使用下面的命令構建一個在后臺運行的不帶命令列界面的程式
go install -ldflags="-H windowsgui" github.com/no-src/gofs/...@latest
移除Web檔案服務器
如果你不需要一個Web檔案服務器,可以使用下面命令構建一個體積更小的不帶Web檔案服務器的程式
go install -tags "no_server" github.com/no-src/gofs/...@latest
快速開始
先決條件
請確保檔案同步的源目錄和目標目錄都已經存在,如果目錄不存在,則用你實際的目錄替換下面的路徑進行提前創建
$ mkdir source dest
生成僅用于測驗的證書和密鑰檔案,生產中請替換為正式的證書
TLS證書和密鑰檔案僅用于與Web檔案服務器和遠程磁盤服務端進行安全通訊
$ go run $GOROOT/src/crypto/tls/generate_cert.go --host 127.0.0.1
2021/12/30 17:21:54 wrote cert.pem
2021/12/30 17:21:54 wrote key.pem
查看你的作業目錄
$ ls
cert.pem key.pem source dest
本地磁盤
監控本地源目錄將變更同步到目標目錄
你可以使用logically_delete命令列引數來啟用邏輯洗掉,從而避免誤刪資料
$ gofs -source=./source -dest=./dest
全量同步
執行一次全量同步,直接將整個源目錄同步到目標目錄
$ gofs -source=./source -dest=./dest -sync_once
定時同步
定時執行全量同步,將整個源目錄同步到目標目錄
# 每30秒鐘將源目錄全量同步到目標目錄
$ gofs -source=./source -dest=./dest -sync_cron="*/30 * * * * *"
守護行程模式
啟動守護行程來創建一個作業行程處理實際的任務,并將相關行程的pid資訊記錄到pid檔案中
$ gofs -source=./source -dest=./dest -daemon -daemon_pid
Web檔案服務器
啟動一個Web檔案服務器用于訪問遠程的源目錄和目標目錄
Web檔案服務器默認使用HTTPS協議,使用tls_cert_file和tls_key_file命令列引數來指定相關的證書和密鑰檔案
如果你不需要使用TLS進行安全通訊,可以通過將tls命令列引數指定為false來禁用它
如果將tls設定為true,則服務器默認運行埠為443,反之默認埠為80,你可以使用server_addr命令列引數來自定義服務器運行埠,例如-server_addr=":443"
出于安全考慮,你應該設定rand_user_count命令列引數來隨機生成指定數量的用戶或者通過users命令列引數自定義用戶資訊來保證資料的訪問安全,禁止用戶匿名訪問資料
如果rand_user_count命令列引數設定大于0,則隨機生成的賬戶密碼將會列印到日志資訊中,請注意查看
如果你需要啟用gzip壓縮回應結果,則添加server_compress命令列引數,但是目前gzip壓縮不是很快,在局域網中可能會影響傳輸效率
# 啟動一個Web檔案服務器并隨機創建3個用戶
# 在生產環境中請將`tls_cert_file`和`tls_key_file`命令列引數替換為正式的證書和密鑰檔案
$ gofs -source=./source -dest=./dest -server -tls_cert_file=cert.pem -tls_key_file=key.pem -rand_user_count=3
遠程磁盤服務端
啟動一個遠程磁盤服務端作為一個遠程檔案資料源
source命令列引數詳見遠程磁盤服務端資料源協議
注意遠程磁盤服務端的用戶至少要擁有讀權限,例如:-users="gofs|password|r"
# 啟動一個遠程磁盤服務端
# 在生產環境中請將`tls_cert_file`和`tls_key_file`命令列引數替換為正式的證書和密鑰檔案
# 為了安全起見,請使用復雜的賬戶密碼來設定`users`命令列引數
$ gofs -source="rs://127.0.0.1:8105?mode=server&local_sync_disabled=true&path=./source&fs_server=https://127.0.0.1" -dest=./dest -users="gofs|password|r" -tls_cert_file=cert.pem -tls_key_file=key.pem
遠程磁盤客戶端
啟動一個遠程磁盤客戶端將遠程磁盤服務端的檔案變更同步到本地目標目錄
使用sync_once命令列引數,可以直接將遠程磁盤服務端的檔案整個全量同步到本地目標目錄,就跟全量同步一樣
使用sync_cron命令列引數,可以定時將遠程磁盤服務端的檔案整個全量同步到本地目標目錄,就跟定時同步一樣
source命令列引數詳見遠程磁盤服務端資料源協議
# 啟動一個遠程磁盤客戶端
# 請將`users`命令列引數替換為上面設定的實際賬戶名密碼
$ gofs -source="rs://127.0.0.1:8105" -dest=./dest -users="gofs|password"
遠程推送服務端
啟動一個遠程磁盤服務端作為一個遠程檔案資料源,并使用push_server命令列引數啟用遠程推送服務端
注意遠程推送服務端的用戶至少要擁有讀寫權限,例如:-users="gofs|password|rw"
# 啟動一個遠程磁盤服務端并啟用遠程推送服務端
# 在生產環境中請將`tls_cert_file`和`tls_key_file`命令列引數替換為正式的證書和密鑰檔案
# 為了安全起見,請使用復雜的賬戶密碼來設定`users`命令列引數
$ gofs -source="rs://127.0.0.1:8105?mode=server&local_sync_disabled=true&path=./source&fs_server=https://127.0.0.1" -dest=./dest -users="gofs|password|rw" -tls_cert_file=cert.pem -tls_key_file=key.pem -push_server
遠程推送客戶端
啟動一個遠程推送客戶端將本地檔案變更同步到遠程推送服務端
使用chunk_size命令列引數來設定大檔案上傳時切分的區塊大小,默認值為1048576,即1MB
更多命令列引數用法請參見遠程磁盤客戶端
# 啟動一個遠程推送客戶端并且啟用本地磁盤同步,將source目錄下的檔案變更同步到本地dest目錄和遠程推送服務器上
# 請將`users`命令列引數替換為上面設定的實際賬戶名密碼
$ gofs -source="./source" -dest="rs://127.0.0.1:8105?local_sync_disabled=false&path=./dest" -users="gofs|password"
遠程磁盤服務端資料源協議
遠程磁盤服務端資料源協議基于URI基本語法,詳見RFC 3986
方案
方案名稱為rs
主機名
遠程磁盤服務端資料源在遠程磁盤服務端模式下使用0.0.0.0或者其他本地網卡IP地址作為主機名,在遠程磁盤客戶端
模式下使用遠程磁盤服務端的IP地址或者域名作為主機名
埠號
遠程磁盤服務端資料源埠號,默認為8105
引數
僅在遠程磁盤服務端模式下設定以下引數
path遠程磁盤服務端真實的本地源目錄mode指定運行模式,只有在遠程磁盤服務端模式下需要手動指定為server,默認為遠程磁盤客戶端模式fs_serverWeb檔案服務器地址,例如https://127.0.0.1local_sync_disabled是否將遠程磁盤服務端的檔案變更同步到遠程本地的目標目錄,可選值為true或false,默認值為false
示例
遠程磁盤服務端模式下的示例
rs://127.0.0.1:8105?mode=server&local_sync_disabled=true&path=./source&fs_server=https://127.0.0.1
\_/ \_______/ \__/ \____________________________________________________________________________/
| | | |
方案 主機名 埠號 引數
管理介面
基于Web檔案服務器的應用管理介面
默認情況下,僅允許私有地址和回環地址訪問管理介面的相關路由
你可以通過將manage_private命令列引數設定為false來禁用默認行為,允許公網IP訪問管理介面的路由
$ gofs -source=./source -dest=./dest -server -tls_cert_file=cert.pem -tls_key_file=key.pem -rand_user_count=3 -manage
性能分析介面
pprof訪問地址如下:
https://127.0.0.1/manage/pprof/
配置介面
讀取應用程式配置,默認回傳json格式,當前支持json和yaml格式
https://127.0.0.1/manage/config
或者使用format引數來指定回傳的配置格式
https://127.0.0.1/manage/config?format=yaml
報告介面
使用report命令列引數來啟用報告介面的路由并且開始收集報告資料,需要先啟用manage命令列引數
報告介面詳情參見Report API
https://127.0.0.1/manage/report
日志
默認情況下會啟用檔案日志與控制臺日志,你可以將log_file命令列引數設定為false來禁用檔案日志
使用log_level命令列引數設定日志的等級,默認級別是INFO,可選項為:DEBUG=0 INFO=1 WARN=2 ERROR=3
使用log_dir命令列引數來設定日志檔案目錄,默認為./logs/
使用log_flush命令列引數來設定自動重繪日志到檔案中,默認啟用
使用log_flush_interval命令列引數設定自動重繪日志到檔案中的頻率,默認為3s
使用log_event命令列引數啟用事件日志,所有事件都會記錄到檔案中,默認為禁用
# 在"本地磁盤"模式下設定日志資訊
$ gofs -source=./source -dest=./dest -log_file -log_level=0 -log_dir="./logs/" -log_flush -log_flush_interval=3s -log_event
使用組態檔
如果需要的話,你可以使用組態檔來代替所有的命令列引數,當前支持json和yaml格式
所有的配置欄位名稱跟命令列引數一樣,你可以參考配置示例或者配置介面的回應結果
$ gofs -conf=./gofs.yaml
更多資訊
幫助資訊
$ gofs -h
版本資訊
$ gofs -v
關于資訊
$ gofs -about
Write By 陌上荼靡
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/452809.html
標籤:Go
上一篇:背包問題(2):0/1背包
下一篇:IO(自定義例外類及測驗)
