A minimalist Go module proxy handler.
Goproxy has fully implemented the GOPROXY protocol. The goal of this project is to find the most dead simple way to provide a minimalist handler that can act as a full-featured Go module proxy for those who want to build their own proxies.
- Extremely easy to use
- Three structs:
goproxy.Goproxy
,goproxy.GoFetcher
, andgoproxy.DirCacher
- Two interfaces:
goproxy.Fetcher
andgoproxy.Cacher
- Three structs:
- Built-in support for
GOPROXY
,GONOPROXY
,GOSUMDB
,GONOSUMDB
, andGOPRIVATE
- Supports serving under other Go module proxies by setting
GOPROXY
- Supports proxying checksum databases
- Supports
Disable-Module-Fetch
header
- To use this project programmatically,
go get
it:
go get github.com/goproxy/goproxy
- To use this project from the command line, download the pre-built binaries from here or build it from source:
go install github.com/goproxy/goproxy/cmd/goproxy@latest
- To use this project with Docker, pull the pre-built images from here:
docker pull ghcr.io/goproxy/goproxy
Write code
Create a file named goproxy.go
:
package main
import (
"net/http"
"github.com/goproxy/goproxy"
)
func main() {
http.ListenAndServe("localhost:8080", &goproxy.Goproxy{})
}
Then run it with a GOMODCACHE
that differs from go env GOMODCACHE
:
GOMODCACHE=/tmp/goproxy-gomodcache go run goproxy.go
Finally, set GOPROXY
to try it out:
go env -w GOPROXY=http://localhost:8080,direct
For more details, refer to the documentation.
Run from command line
Refer to the Installation section to download or build the binary.
Then run it with a GOMODCACHE
that differs from go env GOMODCACHE
:
GOMODCACHE=/tmp/goproxy-gomodcache goproxy server --address localhost:8080
Finally, set GOPROXY
to try it out:
go env -w GOPROXY=http://localhost:8080,direct
For more details, check its usage:
goproxy --help
Run with Docker
Refer to the Installation section to pull the image.
Then run it:
docker run -p 8080:8080 ghcr.io/goproxy/goproxy server --address :8080
Finally, set GOPROXY
to try it out:
go env -w GOPROXY=http://localhost:8080,direct
For more details, check its usage:
docker run ghcr.io/goproxy/goproxy --help
此工程改造了原始goproxy
,增加了通过文件上传依赖功能,为其添加了/*
POST
接口,可通过任意HTTP
路径,采用POST
方法上传依赖文件,具体代码位于goproxy.go
文件中的serveSync
方法之中,可查询此方法进行修改。
若需重新编译并制作镜像,可在有网环境下执行docker build -t goproxy:v0.16-upload .
命令制作镜像,然后进行使用。
-
有网构建工程,下载依赖
在有网环境中,构建简单的 go module 项目,通过 import 导入所需依赖,然后通过 go mod tidy 下载依赖到本机的
go env GOMODCACHE
目录之下 -
打包依赖
通过以下代码打包依赖
tar -zcf download.tar.gz -C $(go env OMODCACHE)/cache/download .
-
拷贝依赖包到无网环境
-
上传依赖包
-
通过界面上传
访问
goproxy
程序的 / 路径,通过界面选择文件进行上传即可 -
通过
curl
上传示例代码如下
filePath=/home/test/download.tar.gz # 设置要上传文件路径 proxyServer=http://localhost:8080/ # 代理地址 curl --request POST --url ${proxyServer} --header 'content-type: multipart/ form-data' -F "file=@${filePath};type=file -b --mime-type ${filePath}"
-
If you have any questions or ideas about this project, feel free to discuss them here.
If you would like to contribute to this project, please submit issues here or pull requests here.
This project is licensed under the MIT License.