概述
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.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_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