概述
gofs
是基于golang开发的一款开箱即用的跨平台文件同步工具,开源地址如下:https://github.com/no-src/gofs,欢送点个Star或者提交Issue和PR,共同进步!
装置
首先须要确保曾经装置了Go (版本必须是1.18+),而后你就能够应用上面的命令来装置gofs
了
如果你不须要自行从源码编译装置,也能够间接下载最新公布的二进制文件 Release
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.12021/12/30 17:21:54 wrote cert.pem2021/12/30 17:21:54 wrote key.pem
查看你的工作目录
$ lscert.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_server
Web文件服务器地址,例如https://127.0.0.1
local_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