在多个设备之间文件通过网络进行同步和备份, 这是一个基本需求. gofs开源项目会是一个命令行文件同步工具的优质选择.
如果你需要一个带有图形界面的工具, 那么我想syncthing才是最好的选择.
gofs项目介绍
基于Golang开发的一款开箱即用的跨平台实时文件同步工具.
具体内容参考gofs 官方README
安装
GO安装
使用go install github.com/no-src/gofs/...@latest安装
注意, Go的版本必须是1.23+
在windows系统中需要使用go install -ldflags="-H windowsgui" github.com/no-src/gofs/...@latest编译gofs可执行文件.
docker
官方README提供了Docker的在线构建容器镜像和直接拉去现成容器镜像的方法.
快速上手
通过SFTP协议
SFTP协议自带加密和文件传输功能, gofs可以通过sftp来实现文件的同步.
拉取文件
- gofs -source="sftp://127.0.0.1:22?remote_path=/gofs_sftp_server&ssh_user=sftp_user&ssh_pass=sftp_pwd" -dest="./dest" -sync_once
复制代码 不能监听并且同步文件, 只能使用-sync_once执行单次文件同步, 远程的修改无法被监听. 所以, 本质就类似于文件传输脚本一样, 缺乏了自动监听和同步的机制.
每隔一段时间自动执行可以使用-sync_cron="*/30 * * * * *"每隔30S自动同步一次. 我认为这种定时任务可能是最适合轻量级用户的做法
推送文件
- gofs -source="/tmp/gofs-dest/" -dest="sftp://10.106.74.224:2022?remote_path=/tmp/gofs-source&ssh_user=xxx&ssh_pass=xxx"
复制代码 因为是从本地推送文件到远端, 所以是可以实现监听的功能, 当文件修改的时候自动推送修改后的文件.
通过gofs提供的server服务
gofs程序提供了文件服务功能, 同时可以作为client和server工作.
生成TLS证书
gofs确保传输- go run /usr/local/go/src/crypto/tls/generate_cert.go --host 127.0.0.1
复制代码GOROOT默认为/usr/local/go
如果使用局域网IP, 需要使用局域网IP设置--host
会在当前目录下生成- 2025/04/14 23:43:28 wrote cert.pem
- 2025/04/14 23:43:28 wrote key.pem
复制代码 启动文件服务器
- # 启动一个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
复制代码
- 设置rand_user_count命令行参数来随机生成指定数量的用户或者通过users命令行参数自定义用户信息来保证数据的访问安全, 禁止用户匿名访问数据; 如果rand_user_count命令行参数设置大于0,则随机生成的账户密码将会打印到日志信息中,请注意查看
- Web文件服务器默认使用HTTPS协议,使用tls_cert_file和tls_key_file命令行参数来指定相关的证书和密钥文件
- 可以通过tls_insecure_skip_verify命令行参数来控制客户端是否跳过验证服务器的证书链和主机名, 默认为true
- 可以使用server_addr命令行参数来自定义服务器运行端口,例如-server_addr=":443", 可以用来解决443端口不可用的问题
- 它会在传输的目录下生成logs目录存放日志内容, 简直就是shit. 使用-log_file=false可以防止它生成这些内容, 也可以通过log_dir参数修改生成的log文件的目录.
文件推送和接受
很多时候, 我们只需要一个推送文件, 一个同步文件. 不需要负责的功能, 所以, 直接建立一个文件推送服务和一个文件接受服务即可.
- gofs -source="rs://10.11.144.196:8105?mode=server&local_sync_disabled=true&path=./source&fs_server=https://10.11.144.196:7878" -dest=./dest -users="gofs|password|r" -tls_cert_file=$HOME/tmp/config/cert.pem -tls_key_file=$HOME/tmp/config/key.pem -token_secret=mysecret_16bytes -server_addr=":7878" -log_file=false
复制代码
- 你需要严格确保127.0.0.1替换为了你需要的IP地址, 才可以确保正确同步文件.
- 可以使用server_addr命令行参数来自定义服务器运行端口,例如-server_addr=":443", 可以用来解决443端口不可用的问题. 注意, 在&fs_server=https://10.11.144.196:7878这个地方也需要配置.
- 使用-log_file=false可以防止它生成这些内容, 也可以通过log_dir参数修改生成的log文件的目录.
- gofs -source="rs://10.11.144.196:8105" -dest=/home/xuhe/tmp/go/gofs-dest -users="gofs|password" -tls_cert_file=/tmp/cert.pem --log_file=false -server_addr=":7878"
复制代码
- 设置source为需要的IP, 并且设置-server_addr=":7878"作为443无法访问的时候的替代操作.
- -server_addr=":7878"设置HTTPS服务端口
cert.pem少一个换行符都不行, 很麻烦
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |