gofs使用教程-基于golang的開源跨平臺文件同步工具

概述

gofs是基于golang開發(fā)的一款開箱即用的跨平臺文件同步工具,支持在本地磁盤之間同步、從遠程服務(wù)器同步變更到本地、將本地文件變更推送到遠程服務(wù)器三種模式。開源地址如下:開源地址如下:Github & Gitee,歡迎Star或者提交Issue和PR!

安裝

首先需要確保已經(jīng)安裝了Go (版本必須是1.18+),然后你就可以使用下面的命令來安裝gofs

如果你不需要自行從源碼編譯安裝,也可以直接下載最新發(fā)布的二進制文件Release

go install github.com/no-src/gofs/...@latest

在Docker中運行

如果你想要在docker中運行,請在安裝或者編譯的時候使用-tags netgo命令行參數(shù)或者設(shè)置環(huán)境變量CGO_ENABLED=0,否則當你運行docker容器時可能會報找不到gofs的錯誤

go install -tags netgo github.com/no-src/gofs/...@latest

后臺運行

在windows系統(tǒng)中,你可以使用下面的命令構(gòu)建一個在后臺運行的不帶命令行界面的程序

go install -ldflags="-H windowsgui" github.com/no-src/gofs/...@latest

移除Web文件服務(wù)器

如果你不需要一個Web文件服務(wù)器,可以使用下面命令構(gòu)建一個體積更小的不帶Web文件服務(wù)器的程序

go install -tags "no_server" github.com/no-src/gofs/...@latest

快速開始

先決條件

請確保文件同步的源目錄和目標目錄都已經(jīng)存在,如果目錄不存在,則用你實際的目錄替換下面的路徑進行提前創(chuàng)建

$ mkdir source dest

生成僅用于測試的證書和密鑰文件,生產(chǎn)中請?zhí)鎿Q為正式的證書

TLS證書和密鑰文件僅用于與Web文件服務(wù)器遠程磁盤服務(wù)端進行安全通訊

$ 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

本地磁盤

監(jiān)控本地源目錄將變更同步到目標目錄

你可以使用logically_delete命令行參數(shù)來啟用邏輯刪除,從而避免誤刪數(shù)據(jù)

$ gofs -source=./source -dest=./dest

全量同步

執(zhí)行一次全量同步,直接將整個源目錄同步到目標目錄

$ gofs -source=./source -dest=./dest -sync_once

定時同步

定時執(zhí)行全量同步,將整個源目錄同步到目標目錄

# 每30秒鐘將源目錄全量同步到目標目錄
$ gofs -source=./source -dest=./dest -sync_cron="*/30 * * * * *"

守護進程模式

啟動守護進程來創(chuàng)建一個工作進程處理實際的任務(wù),并將相關(guān)進程的pid信息記錄到pid文件中

$  gofs -source=./source -dest=./dest -daemon -daemon_pid

Web文件服務(wù)器

啟動一個Web文件服務(wù)器用于訪問遠程的源目錄和目標目錄

Web文件服務(wù)器默認使用HTTPS協(xié)議,使用tls_cert_filetls_key_file命令行參數(shù)來指定相關(guān)的證書和密鑰文件

如果你不需要使用TLS進行安全通訊,可以通過將tls命令行參數(shù)指定為false來禁用它

如果將tls設(shè)置為true,則服務(wù)器默認運行端口為443,反之默認端口為80,你可以使用server_addr命令行參數(shù)來自定義服務(wù)器運行端口,例如-server_addr=":443"

出于安全考慮,你應(yīng)該設(shè)置rand_user_count命令行參數(shù)來隨機生成指定數(shù)量的用戶或者通過users命令行參數(shù)自定義用戶信息來保證數(shù)據(jù)的訪問安全,禁止用戶匿名訪問數(shù)據(jù)

如果rand_user_count命令行參數(shù)設(shè)置大于0,則隨機生成的賬戶密碼將會打印到日志信息中,請注意查看

如果你需要啟用gzip壓縮響應(yīng)結(jié)果,則添加server_compress命令行參數(shù),但是目前gzip壓縮不是很快,在局域網(wǎng)中可能會影響傳輸效率

# 啟動一個Web文件服務(wù)器并隨機創(chuàng)建3個用戶
# 在生產(chǎn)環(huán)境中請將`tls_cert_file`和`tls_key_file`命令行參數(shù)替換為正式的證書和密鑰文件
$ gofs -source=./source -dest=./dest -server -tls_cert_file=cert.pem -tls_key_file=key.pem -rand_user_count=3

遠程磁盤服務(wù)端

啟動一個遠程磁盤服務(wù)端作為一個遠程文件數(shù)據(jù)源

source命令行參數(shù)詳見遠程磁盤服務(wù)端數(shù)據(jù)源協(xié)議

注意遠程磁盤服務(wù)端的用戶至少要擁有讀權(quán)限,例如:-users="gofs|password|r"

# 啟動一個遠程磁盤服務(wù)端
# 在生產(chǎn)環(huán)境中請將`tls_cert_file`和`tls_key_file`命令行參數(shù)替換為正式的證書和密鑰文件
# 為了安全起見,請使用復(fù)雜的賬戶密碼來設(shè)置`users`命令行參數(shù)
$ 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

遠程磁盤客戶端

啟動一個遠程磁盤客戶端將遠程磁盤服務(wù)端的文件變更同步到本地目標目錄

使用sync_once命令行參數(shù),可以直接將遠程磁盤服務(wù)端的文件整個全量同步到本地目標目錄,就跟全量同步一樣

使用sync_cron命令行參數(shù),可以定時將遠程磁盤服務(wù)端的文件整個全量同步到本地目標目錄,就跟定時同步一樣

source命令行參數(shù)詳見遠程磁盤服務(wù)端數(shù)據(jù)源協(xié)議

# 啟動一個遠程磁盤客戶端
# 請將`users`命令行參數(shù)替換為上面設(shè)置的實際賬戶名密碼
$ gofs -source="rs://127.0.0.1:8105" -dest=./dest -users="gofs|password"

遠程推送服務(wù)端

啟動一個遠程磁盤服務(wù)端作為一個遠程文件數(shù)據(jù)源,并使用push_server命令行參數(shù)啟用遠程推送服務(wù)端

注意遠程推送服務(wù)端的用戶至少要擁有讀寫權(quán)限,例如:-users="gofs|password|rw"

# 啟動一個遠程磁盤服務(wù)端并啟用遠程推送服務(wù)端
# 在生產(chǎn)環(huán)境中請將`tls_cert_file`和`tls_key_file`命令行參數(shù)替換為正式的證書和密鑰文件
# 為了安全起見,請使用復(fù)雜的賬戶密碼來設(shè)置`users`命令行參數(shù)
$ 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

遠程推送客戶端

啟動一個遠程推送客戶端將本地文件變更同步到遠程推送服務(wù)端

使用chunk_size命令行參數(shù)來設(shè)置大文件上傳時切分的區(qū)塊大小,默認值為1048576,即1MB

更多命令行參數(shù)用法請參見遠程磁盤客戶端

# 啟動一個遠程推送客戶端并且啟用本地磁盤同步,將source目錄下的文件變更同步到本地dest目錄和遠程推送服務(wù)器上
# 請將`users`命令行參數(shù)替換為上面設(shè)置的實際賬戶名密碼
$ gofs -source="./source" -dest="rs://127.0.0.1:8105?local_sync_disabled=false&path=./dest" -users="gofs|password"

遠程磁盤服務(wù)端數(shù)據(jù)源協(xié)議

遠程磁盤服務(wù)端數(shù)據(jù)源協(xié)議基于URI基本語法,詳見RFC 3986

方案

方案名稱為rs

主機名

遠程磁盤服務(wù)端數(shù)據(jù)源在遠程磁盤服務(wù)端模式下使用0.0.0.0或者其他本地網(wǎng)卡IP地址作為主機名,在遠程磁盤客戶端
模式下使用遠程磁盤服務(wù)端的IP地址或者域名作為主機名

端口號

遠程磁盤服務(wù)端數(shù)據(jù)源端口號,默認為8105

參數(shù)

僅在遠程磁盤服務(wù)端模式下設(shè)置以下參數(shù)

示例

遠程磁盤服務(wù)端模式下的示例

 rs://127.0.0.1:8105?mode=server&local_sync_disabled=true&path=./source&fs_server=https://127.0.0.1
 \_/  \_______/ \__/ \____________________________________________________________________________/
  |       |       |                                      |
 方案   主機名   端口號                                    參數(shù)

管理接口

基于Web文件服務(wù)器的應(yīng)用管理接口

默認情況下,僅允許私有地址和回環(huán)地址訪問管理接口的相關(guān)路由

你可以通過將manage_private命令行參數(shù)設(shè)置為false來禁用默認行為,允許公網(wǎng)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/

配置接口

讀取應(yīng)用程序配置,默認返回json格式,當前支持jsonyaml格式

https://127.0.0.1/manage/config

或者使用format參數(shù)來指定返回的配置格式

https://127.0.0.1/manage/config?format=yaml

報告接口

使用report命令行參數(shù)來啟用報告接口的路由并且開始收集報告數(shù)據(jù),需要先啟用manage命令行參數(shù)

報告接口詳情參見Report API

https://127.0.0.1/manage/report

日志

默認情況下會啟用文件日志與控制臺日志,你可以將log_file命令行參數(shù)設(shè)置為false來禁用文件日志

使用log_level命令行參數(shù)設(shè)置日志的等級,默認級別是INFO,可選項為:DEBUG=0 INFO=1 WARN=2 ERROR=3

使用log_dir命令行參數(shù)來設(shè)置日志文件目錄,默認為./logs/

使用log_flush命令行參數(shù)來設(shè)置自動刷新日志到文件中,默認啟用

使用log_flush_interval命令行參數(shù)設(shè)置自動刷新日志到文件中的頻率,默認為3s

使用log_event命令行參數(shù)啟用事件日志,所有事件都會記錄到文件中,默認為禁用

# 在"本地磁盤"模式下設(shè)置日志信息
$ gofs -source=./source -dest=./dest -log_file -log_level=0 -log_dir="./logs/" -log_flush -log_flush_interval=3s -log_event

使用配置文件

如果需要的話,你可以使用配置文件來代替所有的命令行參數(shù),當前支持jsonyaml格式

所有的配置字段名稱跟命令行參數(shù)一樣,你可以參考配置示例或者配置接口的響應(yīng)結(jié)果

$ gofs -conf=./gofs.yaml

更多信息

幫助信息

$ gofs -h

版本信息

$ gofs -v

關(guān)于信息

$ gofs -about
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容