go中私有代理搭建
前言
最近公司的代理出现问题了,刚好借这个机会来学习下,athens 如何构建私有代理
为什么选择 athens
私有化代理的选取标准无非就是下面的几点
1、托管私有模块;
2、排除对公有模块的访问;
3、存储公有模块;
athens 的特点:
Athens 首先可以配置访问私有仓库;
go mod download
Athens 处理存储的策略为仅追加,一个模块被保存,它就永远不会改变,即使开发人员对 tag 进行了强推,那么也不会被删除;
Athens 也可以配置下载策略,过滤一些有安全隐患的包。
Athens 支持 disk, mongo, gcs, s3, minio, 外部存储/自定义,不过一般建议使用 disk。
使用 docker-compose 部署
官方网站已经,提供了通过 docker 和 二进制部署的方案,这里秉着好记性不如烂笔头的原则,这里自己也做了记录
配置私有仓库的认证信息
.netrc
有几个私有仓库,配置几个就可以了
配置下载模式
The download modeFiltering modules
来看下如何配置
config.dev.toml
ATHENS_DOWNLOAD_MODE 可指定的内容:
file:
custom:
sync, async, none, redirect, or async_redirect
来看下具体的下载模式
go mod downloadmodule@versionproxy.golang.orgmodule@version
下面看下配置策略的 hcl 文件
部署
这里使用 docker-composer 部署
ATHENS_GONOSUM_PATTERNS:配置为私库地址,配置的仓库地址,不会进行安全向校验。
go 处于安全性考虑,为了保证开发者的依赖库不被人恶意劫持篡改,所以引入了 GOSUMDB 环境变量来设置校验服务器
当你在本地对依赖进行变动(更新/添加)操作时,Go 会自动去这个服务器进行数据校验,保证你下的这个代码库和世界上其他人下的代码库是一样的。如果有问题,会有个大大的安全提示。当然背后的这些操作都已经集成在 Go 里面了,开发者不需要进行额外的操作。
对于我们的私有仓库,去公共安全校验库校验,肯定是不能通过校验的,我们可以通过 ATHENS_GONOSUM_PATTERNS 这个环境变量来设置不做校验的代码仓库, 它可以设置多个匹配路径,用逗号相隔。
docker-compose up -d
export GOPROXY=http://xxxx:3000
这样就能使用我们的代理服务了
因为选择的 ATHENS_STORAGE_TYPE 为 disk,athens 服务会在拉取资源包的同时,也会下载资源包到配置的 ATHENS_DISK_STORAGE_ROOT 中。
使用秘钥的方式认证私有仓库
.netrc
1、配置秘钥
首先查看电脑有没有秘钥
没有的话通过下面的命令的生成
邮箱换成自己的,一路回车即可
id_rsa.pub
2、配置 HTTP 与 SSH 重写规则
3、配置 SSH 来绕过主机 SSH 键验证
将上面配置的认证信息,映射到容器中即可
这样即可实现秘钥的认证了
需要注意私钥的权限,刚开始没注意,执行报了下面的错误
看报错就可推断出,是权限太大了,需要私钥文件不能被其他人所访问。
修改权限就可以了
具体的 demo 地址,可参见athens私有代理部署
参考
【介绍 ATHENS】
https://gomods.io/zh/intro/
【download】
https://github.com/gomods/athens/blob/main/docs/content/configuration/download.md
【athens构建golang私有代理】
https://github.com/boilingfrog/Go-POINT/blob/master/golang/go_environment/athens构建golang私有代理.md
【使用 docker-compose 部署 golang 的 Athens 私有代理】
https://github.com/boilingfrog/Go-POINT/blob/master/golang/go_environment/athens构建golang私有代理.md