go1.13的Go Modules有了重大改进,具体看看这篇 干货满满的 Go Modules 和 goproxy.cn
问题:
开发者在自己的电脑设置GOPROXY,Go Module的缓存保存在本地,多人开发时人人都要下载到自己本地,这样遇到网络不好的时候就很不好,另外CI/CD的时候又要重新下载,为了提高依赖的下载速度,所以要在内网搭建一个私有的goproxy,所有依赖都从这里下,不必重复去访问外网,这样速度就快多了。
这里使用的微软开源的athens
假设本地代码仓库(gitlab)的域名是git.test.com,在内网可以通过Https方式访问,参考
athens:
机器:192.168.1.11
可以访问git.test.com
在当前目录创建一个文件,名叫match,写入以下内容
downloadURL = "https://goproxy.cn"
mode = "async_redirect"
download "git.test.com/*" {
mode = "sync"
}
然后启动ahtens:
# 这里使用host网络模式,比默认模式要快一些
# athens端口是3000
base=$PWD
data_dir=$base/data
user_dir=$base/root
# git.test.com需要用到的 ca根证书
cert_dir=$base/ca
name=athens-test
docker run -d \
-v ${data_dir}:/var/lib/athens \
-v ${user_dir}:/root \
-v ${cert_dir}:/usr/local/share/ca-certificates \
-v ${base}/match:/match \
-e ATHENS_PORT=3000 \
-e ATHENS_DISK_STORAGE_ROOT=/var/lib/athens \
-e ATHENS_STORAGE_TYPE=disk \
-e ATHENS_GONOSUM_PATTERNS='git.test.com/*' \
-e ATHENS_DOWNLOAD_MODE="file:/match" \
--name ${name} \
--restart always \
--net host \
gomods/athens:0.7.0
docker exec ${name} sh -c 'update-ca-certificates'
注意go package在仓库的权限问题
客户端go1.13
GOSUMDB="sum.golang.google.cn"
GONOSUMDB="*.test.com"
GOPROXY="http://192.168.1.11:3000"
同样适用于go1.11/1.12
OK,解决了所有依赖的下载问题