概述

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_filetls_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 是否将近程磁盘服务端的文件变更同步到近程本地的目标目录,可选值为truefalse,默认值为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格局,以后反对jsonyaml格局

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

应用配置文件

如果需要的话,你能够应用配置文件来代替所有的命令行参数,以后反对jsonyaml格局

所有的配置字段名称跟命令行参数一样,你能够参考配置示例或者配置接口的响应后果

$ gofs -conf=./gofs.yaml

更多信息

帮忙信息

$ gofs -h

版本信息

$ gofs -v

对于信息

$ gofs -about