重要
由于生产环境的函数服务需要编译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 |
-exclude | proxy 模式下指定哪些 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 官方文档