Please enable Javascript to view the contents

内网搭建goproxy私仓

 ·  ☕ 2 分钟

重要

由于生产环境的函数服务需要编译go包,但内网无法访问互联网。所以需要搭建代理私仓,缓存第三方包。主要考虑的技术选型有两种: nexus和goproxy.
nexus是能满足需求,但太重,并且go不支持认证,必须开启nexus的匿名模式。go-proxy功能比较简单。下面分别介绍nexus和goproxy的搭建方式,针对不同场景进行选择。

nexus搭建go私仓库

待整理

goproxy搭建go私仓库

goproxy.io 是全球最早的Go modules镜像代理服务之一,采用CDN加速服务为开发者提供依赖下载, 该服务由一批热爱开源, 热爱 Go 语言的年轻人开发维护。从 Go 1.11 开始 Go 语言开始支持 Go modules 来解决大家长久以来诟病的依赖管理问题,目前 Go modules 功能已经符合生产环境标准。

goproxy命令介绍:

参数说明默认值示例
-listen服务监听端口“0.0.0.0:8081”-listen=0.0.0.0:80
-cacheDir指定Go Module的缓存目录“$GOPATH/pkg/mod/cache/download”-cacheDir=/tmp/test
-proxy指定上游 proxy server,推荐 goproxy.io""-proxy https://goproxy.io
-excludeproxy 模式下指定哪些 path 不经过上游服务器(例如内网仓库等)""-exclude “git.example.com,rsc.io/private”
1
docker run -d -p80:8081 --name goproxy goproxy/goproxy -listen=0.0.0.0:8081 -cacheDir=/tmp/test -proxy https://goproxy.io -exclude "git.corp.example.com,rsc.io/private"

测试

在本地开发机上,通过环境变量将 proxy server 指定到你刚部署的服务器:

1
2
3
export GO111MODULE=on
export GOPROXY=http://[goproxy所在的机器IP]:80
export GOPATH=/tmp/go

接着运行下面命令,查看是否成功。

go get -v github.com/pkg/errors

观察服务器日志输出是否正常
执行命令docker logs -f goproxy

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
goproxy.io: ------ --- /github.com/pkg/errors/@v/v0.9.1.mod [cached]
goproxy.io: 0.000s 200 /github.com/pkg/errors/@v/v0.9.1.mod
goproxy.io: ------ --- /github.com/@v/list [proxy]
goproxy.io: ------ --- /github.com/pkg/errors/@v/list [proxy]
goproxy.io: ------ --- /github.com/pkg/@v/list [proxy]
goproxy.io: 0.684s 404 /github.com/@v/list
goproxy.io: 0.846s 404 /github.com/pkg/@v/list
goproxy.io: 1.315s 200 /github.com/pkg/errors/@v/list
goproxy.io: ------ --- /github.com/pkg/errors/@v/v0.9.1.info [cached]
goproxy.io: 0.000s 200 /github.com/pkg/errors/@v/v0.9.1.info
goproxy.io: ------ --- /github.com/pkg/errors/@v/v0.9.1.zip [cached]
goproxy.io: 0.000s 200 /github.com/pkg/errors/@v/v0.9.1.zip

Reference

nexus搭建
goproxy 官方文档

分享

Hex
作者
Hex
CloudNative Developer

目录