使用athens搭建私有go mod mirror

Golang 在18年发布的1.11后,开始正式支持了go mod (vgo)特性,终于迎来勉强可以用的包管理特性。

同时,1.11还支持了个GOPROXY环境变量,可用于自建的mirror,这不仅解决了github作者删包导致go mod download失效的问题,在CI中还能加快包的下载速度,以及有助于解决CI的拉去私有包。

在自己的Gitlab中以及公司中,我是用了athens来搭建go mod mirror.

安装

这里推荐直接Docker安装吧,官方有提供image.

安装后会暴露一个3000端口,可以直接用ingress/nginx暴露出去,如果需要公网访问的话。

授权配置

如果只是在公司内网的话,有内网IP,是不需要配置权限校验的,但是如果需要暴露在外网中,athens支持basic auth。

配置如下2个环境变量即可开启:

  • BASIC_AUTH_PASS
  • BASIC_AUTH_USER

拉取私有包

拉去github/gitlab中的私有包,可以从 .netrc 文件中配置。

首先先配置环境变量,指定 .netrc 文件路径: ATHENS_NETRC_PATH /root/.netrc

然后修改文件内容为:

machine api.github.com
login bot
password 1***7

machine gitlab.yourdomain.com
login bot
password 3***a

配置storage

和很多项目一样,缓存的包放在第三方对象存储会是个比较好的选择。一方面是减少维护成本,一方面也是方便部署。

athens支持将包缓存只s3等对象存储中, 具体配置也是可以直接设置环境变量,具体可以参加文档.

已知问题

  • athens有时候cpu会boom
  • go mod 计算sum在不同版本直接容易boom 最好确保ci与本地版本相同
Show Comments