乐趣区

关于golang:gofs使用教程基于golang的开源跨平台文件同步工具

概述

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_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
退出移动版