{"id":13509947,"url":"https://github.com/hetianyi/godfs","last_synced_at":"2026-01-16T06:49:43.134Z","repository":{"id":57498783,"uuid":"140512651","full_name":"hetianyi/godfs","owner":"hetianyi","description":"A simple fast, easy use distributed file system written in go.","archived":false,"fork":false,"pushed_at":"2020-05-11T15:24:10.000Z","size":2603,"stargazers_count":290,"open_issues_count":1,"forks_count":57,"subscribers_count":23,"default_branch":"2.0.0-dev","last_synced_at":"2024-11-01T10:35:07.991Z","etag":null,"topics":["dfs","docker","download","godfs","golang","upload"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hetianyi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-07-11T02:46:37.000Z","updated_at":"2024-10-30T12:40:57.000Z","dependencies_parsed_at":"2022-09-06T17:11:14.140Z","dependency_job_id":null,"html_url":"https://github.com/hetianyi/godfs","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hetianyi%2Fgodfs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hetianyi%2Fgodfs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hetianyi%2Fgodfs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hetianyi%2Fgodfs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hetianyi","download_url":"https://codeload.github.com/hetianyi/godfs/tar.gz/refs/heads/2.0.0-dev","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246338560,"owners_count":20761402,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dfs","docker","download","godfs","golang","upload"],"created_at":"2024-08-01T02:01:18.326Z","updated_at":"2026-01-16T06:49:43.122Z","avatar_url":"https://github.com/hetianyi.png","language":"Go","funding_links":[],"categories":["Go","golang"],"sub_categories":[],"readme":"godfs\n==========\n[![Build Status](https://travis-ci.org/hetianyi/godfs.svg?branch=master)](https://travis-ci.org/hetianyi/godfs)\n[![go report card](https://goreportcard.com/badge/github.com/hetianyi/godfs \"go report card\")](https://goreportcard.com/report/github.com/hetianyi/godfs)\n\n\n\n```non\n   ____  ____  ____  _________\n  / ___\\/ __ \\/ __ \\/ ___/ __/ GoDFS::v2.0.0-dev\n / /_/\\  /_/ / /_/ / /__/\\ \\   A distribute filesystem.\n \\____/\\____/____./_/______/   github.com/hetianyi/godfs\n```\n\n\n\n[README](README_EN.md) | [中文文档](README.md)\n\n\n\n### ```godfs``` 是一个用go实现的轻量，快速，简单易用的分布式文件存储服务器。\n\n```godfs``` 开箱即用，并对docker支持友好。\n\n你可以在docker hub上下载最新镜像:\n[https://hub.docker.com/r/hehety/godfs/](https://hub.docker.com/r/hehety/godfs/)\n\n\n\n版本兼容表\n\n\n\n## 特性\n\n- 快速, 轻量, 开箱即用, 友好的go API\n- 易于扩展，运行稳定\n- 低开销\n- 提供HTTP方式的下载和上传API\n- 支持文件断点下载\n- 跨站点资源保护\n- 支持不同平台下的编译运行: Linux, Windows\n- 更好地支持docker容器\n- 更好的文件迁移解决方案\n- 支持读写和只读文件节点\n- 文件组内自动同步\n- 支持访问令牌\n\n## 安装\n\n\u003e 请先安装golang1.11+\n\n以CentOS7为例.\n\n### 从最新的源码构建：\n```shell\ngit clone https://github.com/hetianyi/godfs.git\ncd godfs\n./make.sh\n# Windows下直接点击 make.cmd 开始构建。\n```\n构建成功后, 会在`````bin````` 目录下生成一个可执行文件:\n```shell\n./bin/godfs\n```\n\n将构建成功的二进制文件安装到目录 ```/usr/bin```:\n```shell\n./install.sh\n```\n\n启动tracker服务:\n```shell\ngodfs tracker [options]\n```\n启动storage服务:\n```shell\ngodfs storage [options]\n```\n\n启动agent服务:\n\n```shell\ngodfs agent [options]\n```\n\n\u003e agent为新增节点角色，是storage server的代理，能够代理后端storage服务文件的上传下载，提供给前端服务一个统一的入口点，尤其在http协议下能够屏蔽组内文件同步的延时问题和下载容错问题。\n\n上传文件:\n\n```shell\n# 已有tracker\ngodfs client upload /you/upload/file [--trackers \u003cpass\u003e@\u003chost\u003e:\u003cport\u003e[,\u003cpass\u003e@\u003chost\u003e:\u003cport\u003e]]\n# 没有tracker服务器，也可以直接上传到指定的storage服务器\ngodfs client upload /you/upload/file [--storages \u003cpass\u003e@\u003chost\u003e:\u003cport\u003e[,\u003cpass\u003e@\u003chost\u003e:\u003cport\u003e]]\n```\n![architecture](doc/20180828095840.png)\n\n如果你想上传文件到指定的group，可以在命令行加参数```-g \u003cgroupID\u003e```\n\n你还可以用一个更酷的命令来上传一个文件夹下所有的文件:\n```shell\ngodfs client upload * --trackers \u003ctrackers\u003e\n```\n![architecture](/doc/20180828100341.png)\n\n也可以使用 ```curl``` 来上传文件:\n```shell\ncurl -F \"file=@/your/file\" \"http://your.host:http_port/upload\"\n```\n上传成功之后，服务器会返回一个json字符串:\n```json\n{\n    \"accessMode\":\"public\",\n    \"form\":[\n        {\n            \"index\":1,\n            \"type\":\"file\",\n            \"name\":\"f\",\n            \"value\":\"fme_eval.msi\",\n            \"size\":1309757440,\n            \"group\":\"G01\",\n            \"instanceId\":\"9de71d97\",\n            \"md5\":\"71e55b30e36b1b8c3343270f86bb6234\",\n            \"fileId\":\"CfzJHbO1MS84thD13PWEsLIURCw_ZZ7bIqPgpWFJxZ3Ad1cZFzTSL9AMP1CnCChK3Au9dqQ0ciAmdQ5Oaxgj0g\"\n        }\n    ]\n}\n```\n\n\u003e 其中， ```form``` 是post表单中的所有字段的name-value信息，文件已被替换为上传之后的路径地址\n\u003e 如果你想上传文件到指定的group，可以在路径上加参数```?group=\u003cgroupID\u003e```\n\n```shell\n# 下载文件\ngodfs client download CfzJHbO1MS84thD13PWEsLIURCw_ZZ7bIqPgpWFJxZ3Ad1cZFzTSL9AMP1CnCChK3Au9dqQ0ciAmdQ5Oaxgj0g --name 123.zip\n```\n\n\n\n#### Token的使用\n\ntoken能够控制一个私有文件在一定时间内的可访问性。\n\ntoken需要在后端根据secret自行生成，godfs只需要计算并匹配token，token携带的格式如下：\n\nhttp://...?tk=\u003cmd5\u003e\u0026ts=\u003ctimestamp\u003e\n\ntoken计算：\n\nmd5(timestamp+filemd5+secret) ==\u003e token\n\n\n\n### 构建docker镜像：\n```shell\ncd godfs/docker\ndocker build -t godfs:latest .\n```\n推荐使用docker来运行godfs，最新的godfs的docker镜像可以在 [docker hub](https://hub.docker.com/r/hehety/godfs/) 获取:\n```shell\ndocker pull hehety/godfs\n```\n\n启动tracker服务器:\n```shell\ndocker run -d --net host --name tracker hehety/godfs:2.0.0-dev \\\ngodfs tracker \\\n--bind-address 0.0.0.0 \\\n--secret 123123 \\\n--data-dir /godfs/data\n```\n\n启动storage服务器:\n```shell\ndocker run -d --net host --name s1  hehety/godfs:2.0.0-dev \\\ngodfs storage \\\n--bind-address 0.0.0.0 \\\n--secret 123123 \\\n--data-dir /godfs/data \\\n--log-dir /godfs/logs \\\n--trackers 123123@149.28.82.229:11706 \\\n--preferred-network eth0\n```\n你可以使用docker的命令```-e```来覆盖配置文件中的相应配置。\n\n客户端命令:\n```shell\nUsage: godfs [global options] command [command options] [arguments...]\n\nCommands:\n\n     tracker  start as tracker server\n     storage  start as storage server\n     client   godfs client cli\n     help, h  Shows a list of commands or help for one command\n\nOptions:\n\n   --version, -v  show version\n   --help, -h     show help\n```\n\n\n\n\n\n##### 说明：\n\ngodfs 2.0版本移除了sqlite数据库（在1.x中测试发现，sqlite数据库文件在大并发和大数据量的情况下可能会出现损坏和无法写入情况），使用boltdb来存储配置数据，使用gox包的set来存储文件id，简化的数据存储策略能够大幅提升随机写入性能。\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhetianyi%2Fgodfs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhetianyi%2Fgodfs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhetianyi%2Fgodfs/lists"}