概述gofs是基于golang开发的开箱即用的跨平台文件同步工具。它支持三种模式:本地磁盘之间的同步、从远程服务器同步到本地的更改、将本地文件更改推送到远程服务器。开源地址如下:https://github.com/no-src/gofs,欢迎Star或提交Issue和PR,共同进步!安装首先需要确保安装了Go(版本必须是1.18+),然后就可以使用如下命令安装gofs。如果不需要自己从源码编译安装,也可以直接下载最新的二进制文件Releasegoinstallgithub.com/no-src/gofs/...@latestrunsinDocker如果要运行在docker中,安装或编译时请使用-tagsnetgo命令行参数或设置环境变量CGO_ENABLED=0,否则在运行docker容器时,可能会报错找不到gofsgoinstall-tagsnetgogithub。com/no-src/gofs/...@latest在windows系统上后台运行,可以使用如下命令构建一个后台运行的无命令行界面的程序goinstall-ldflags="-Hwindowsgui"github.com/no-src/gofs/…@latest删除网络文件服务器如果您不需要网络文件服务器,可以使用以下命令构建一个没有网络文件服务器的小程序goinstall-tags"no_server"github.com/no-src/gofs/…@latest快速入门前提条件请确保同步文件的源目录,目标目录和目标目录都已经存在。如果该目录不存在,请将以下路径替换为您的实际目录并提前创建。$mkdirsourcedest生成仅用于测试的证书和密钥文件。在生产中,请替换为官方证书TLS证书和密钥文件仅用于与web文件服务器和远程磁盘服务器的安全通信$gorun$GOROOT/src/crypto/tls/generate_cert.go--host127.0.0.12021/12/3017:21:54写cert.pem2021/12/3017:21:54写ekey.pem查看你的工作目录$lscert.pemkey.pemsourcedestLocalDiskMonitorlocalsourcedirectory将更改同步到目标目录可以使用logically_delete命令行参数开启逻辑删除,避免误删datasource=./source-dest=./destfullsynchronization执行一次全同步,直接将整个source目录同步到target目录$gofs-source=./source-dest=./dest-sync_once定时同步定时执行全同步,同步整个源目录到目标目录#每30秒将源目录同步到目标目录$gofs-source=./source-dest=./dest-sync_cron="*/30*****"守护进程模式启动adaemonprocess创建一个worker进程来处理实际任务,并将相关进程的pid信息记录到pid文件$gofs-source=./source-dest=./dest-daemon-daemon_pidWeb文件服务器启动一个Webfile服务器用于访问远程源目录和目标目录。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远程磁盘服务启动远程磁盘服务器作为远程文件数据源的命令行参数源。具体参见远程磁盘服务器数据源协议。注意远程磁盘服务器的用户至少要有读权限,例如:-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命令行参数,周期性地将远程磁盘服务器上的全量文件同步到本地目标目录,与定时同步一样。源命令行参数详见远程磁盘服务器。数据源协议#启动远程磁盘客户端#请将`users`命令行参数替换为上面设置的实际账户名和密码$gofs-source="rs://127.0.0.1:8105"-dest=./dest-users="gofs|password"远程推送服务器启动远程磁盘服务器作为远程文件数据源,使用push_server命令行参数启用远程推送服务器注意remote推送服务器的用户至少要有读写权限,例如:-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。更多命令行参数用法参见RemoteDiskClient#启动远程推送客户端并启用本地磁盘同步,将源目录下的文件更改同步到本地dest目录和远程推送服务器#请替换`users`命令行参数与上面设置的实际账户名和密码$gofs-source=".??/source"-dest="rs://127.0.0.1:8105?local_sync_disabled=false&path=./dest"-users="gofs|password》远程磁盘服务器数据源协议远程磁盘服务客户端数据源协议基于URI的基本语法。详见RFC3986,方案名称为rs。在客户端模式下,使用远程磁盘服务器的IP地址或域名作为主机名。端口号。远程磁盘服务器的数据源端口号。默认为8105。该参数仅在远程磁盘服务器模式下设置。path远程磁盘服务器源目录的真实本地mode指定运行模式,仅在远程磁盘服务器模式下,需要手动指定为服务器,默认为远程磁盘客户端模式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\_/\______/\__/\______________________________________________________________________/||||schemehostnameportnumberparametermanagementinterfaceWebfileserver-basedapplicationmanagementinterface默认情况下只允许私有地址和loopback地址访问管理接口相关的路由你可以通过设置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报告接口使用报告命令行开启报表接口的参数要路由并开始采集报表数据,需要先开启manage命令行参数报表接口详见报表APIhttps://127.0.0.1/manage/report。默认情况下,启用文件日志记录和控制台日志记录。您可以将log_file命令行参数设置为false以禁用文件日志记录。使用log_level命令行参数来设置日志。默认级别为INFO,选项为:DEBUG=0INFO=1WARN=2ERROR=3使用log_dir命令行参数设置日志文件目录,默认为./logs/使用log_flush命令行参数设置自动刷新日志到文件,默认开启使用log_flush_interval命令行参数设置自动刷新日志到文件的频率,默认为3s使用log_event命令行参数开启事件日志,所有事件都会被记录在文件中,默认是禁用的#在“localdisk”模式下设置日志信息$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
