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,解決了所有依賴的下載問題