Go mod之私有镜像搭建方案

图片

      目前go mod已成为go开发的标准模式,国内也有一些优秀的代理,例如 https://goproxy.io,https://goproxy.cn等,但是企业内部gitlab上的源码如何引用拉取呢?今天给大家两种解决方案: 

x01 


 一、增加环境变量,go版本要求1.13+

export GOPRIVATE="gitlab.yourdomain.com"

声明指定的域名为私有仓库,go get在处理该域名下的所有依赖时,会直接跳过GOPROXY和CHECKSUM等逻辑。另外它默认前缀匹配,所有有人gitlab.yourdomain.com/xxx前缀的依赖模块都会被视为private-modules,它对于企业、私有Group等有着一劳永逸的益处。

x02


 一、组件依赖:

  • athens:https://github.com/gomods/athens

  • nginx

二、安装athens

1、源码安装方式

git clone https://github.com/gomods/athens
cd athens
make build-ver VERSION="0.11.0"

 ./athens -version

输出如下信息说明编译成功:

Build Details:

Version: 0.11.0

        Date: 2021-09-28-07:05:35-UTC

运行文件:

./athens -config_file=config.dev.toml

 config.dev.toml部分配置文件修改如下:

GoGetDir = "/data/athens/storage"   # go get时的目录, 根据情况指定
StorageType = "disk"
[Storage]
    [Storage.Disk]
        RootPath = "/data/athens/storage"

2、 docker安装方式:

export ATHENS_STORAGE=/data/athens/storage
mkdir -p $ATHENS_STORAGE
docker run -d -v $ATHENS_STORAGE:/var/lib/athens \
   -e ATHENS_DISK_STORAGE_ROOT=/var/lib/athens \
   -e ATHENS_STORAGE_TYPE=disk \
   --name athens-proxy \
   --restart always \
   -p 3000:3000 \
   gomods/athens:latest   

三、增加nginx配置:

upstream go-private {
    server 127.0.0.1:3000;
}
server {
    listen 6666;
    location / {
        proxy_pass https://goproxy.cn; # 外网的统一走镜像代理服务
        proxy_cache_valid 30d;
    }
    location ~ /(gitlab\.yourdomain\.com)/ {
        proxy_pass http://go-private; # 企业内部走私有仓库
    }
}

通过该配置可以清晰的看到走了两条路,一个走公网,一个走内网

四:增加环境变量

export GOPROXY=http://127.0.0.1:6666

五:验证

1、拉取外部包:

go get github.com/tal-tech/go-zero

通过nginx的日志就可以看到详细的请求

2、拉取内网包:

go get gitlab.yourdomain.com/demo/myproject@v0.0.1

然后可以看到

$ ls /data/athens/storage/gitlab.yourdomain.com/demo/myproject
v0.0.1

总结:为什么要使用athens?

摘抄几段来自官方的话, 

不变性:

Go第一次向Athens请求依赖包时,Athens会从VCS(Github、Bitbucket等)获取。但一旦检索到该模块,它将永远保存在Athens的后端存储中,并且代理将不再返回到VCS中获取同一版本的依赖包。这就是雅典如何实现模块不变性。需要注意的是,后端存储掌握在您的手中

安全性: 

软件包可能是恶意的,为了确保您的团队或公司不会安装此类恶意软件包,当go命令行请求一个被排除的模块(恶意软件)时,您可以让代理服务器返回500。这将导致构建失败,因为Go需要200 HTTP响应码。使用Athens,您可以通过过滤器(filter)文件实现此目的。 

欢迎关注我的微信公众号,不定期更新,谢谢

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值