千家信息网

怎么使用docker compose部署golang的Athens私有代理

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本文小编为大家详细介绍"怎么使用docker compose部署golang的Athens私有代理",内容详细,步骤清晰,细节处理妥当,希望这篇"怎么使用docker compose部署golang的
千家信息网最后更新 2026年11月02日怎么使用docker compose部署golang的Athens私有代理

本文小编为大家详细介绍"怎么使用docker compose部署golang的Athens私有代理",内容详细,步骤清晰,细节处理妥当,希望这篇"怎么使用docker compose部署golang的Athens私有代理"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

go中私有代理搭建

为什么选择 athens

私有化代理的选取标准无非就是下面的几点

1、托管私有模块;

2、排除对公有模块的访问;

3、存储公有模块;

athens 的特点:

Athens 首先可以配置访问私有仓库;

Athens 的会存储每次拉取的包,如果该模块之前没有通过 athens,athens 会向目标地址请求数据,在返回给客户端的时候,会存储该模块到存储中,这样实现了 go mod download永远只会发生一次;

Athens 处理存储的策略为仅追加,一个模块被保存,它就永远不会改变,即使开发人员对 tag 进行了强推,那么也不会被删除;

Athens 也可以配置下载策略,过滤一些有安全隐患的包。

Athens 支持 disk, mongo, gcs, s3, minio, 外部存储/自定义,不过一般建议使用 disk。

使用 docker-compose 部署

官方网站已经,提供了通过 docker 和 二进制部署的方案,这里秉着好记性不如烂笔头的原则,这里自己也做了记录

配置私有仓库的认证信息

通过 .netrc 文件来配置,里面可以放自己的私有仓库的地址,以及用户,密码认证信息

# cat .netrcmachine gitlab.test.com login test-name password test-pass

有几个私有仓库,配置几个就可以了

配置下载模式

通过 The download mode (下载模式配置策略)是现在 ATHENS 中比较推崇的,之前通过 Filtering modules(过滤模式)的方法,目前已经被弃用了。

来看下如何配置

# DownloadMode defines how Athens behaves when a module@version# is not found in storage. There are 4 options:# 1. "sync" (default): download the module synchronously and# return the results to the client.# 2. "async": return 404, but asynchronously store the module# in the storage backend.# 3. "redirect": return a 301 redirect status to the client# with the base URL as the DownloadRedirectURL from below.# 4. "async_redirect": same as option number 3 but it will# asynchronously store the module to the backend.# 5. "none": return 404 if a module is not found and do nothing.# 6. "file:": will point to an HCL file that specifies# any of the 5 options above based on different import paths.# 7. "custom:" is the same as option 6# but the file is fully encoded in the option. This is# useful for using an environment variable in serverless# deployments.# Env override: ATHENS_DOWNLOAD_MODEDownloadMode = "sync"

通过环境变量 ATHENS_DOWNLOAD_MODE 可指定,也可以修改指定的 config.dev.toml来配置,默认是 sync

ATHENS_DOWNLOAD_MODE 可指定的内容:

1、通过 file:指定一个 hcl 文件,里面可以对不同的仓库,设置下载模式;

2、通过 custom: 指定一个 base64 编码的 HCL 文件;

3、指定具体的全局策略,sync, async, none, redirect, or async_redirect,这是一个全局的设置,上面的两种是可以定制策略组的。

来看下具体的下载模式

  • sync: 通过 同步从 VCS 下载模块 go mod download,将其持久化到存储中,并立即将其返回给用户。请注意,这是默认行为;

  • async:向客户端返回 404,并异步下载 module@version 并将其持久化到存储中;

  • none:返回 404 并且什么也不做;

  • redirect:重定向到上游代理(例如proxy.golang.org),之后什么也不做;

  • async_redirect:重定向到上游代理(例如proxy.golang.org)并异步下载 module@version 并将其持久化到存储中;

下面看下配置策略的 hcl 文件

# cat download.hcl  downloadURL = "https://goproxy.cn"mode = "async_redirect"download "gitlab.test.com/*" {    mode = "sync"}

部署

这里使用 docker-composer 部署

version: '2'services:  athens:    image: gomods/athens:v0.11.0    restart: always    container_name: athens_proxy    ports:      - "3000:3000"    volumes:      - ./.netrc:/root/.netrc      - ./athens-storage:/var/lib/athens      - ./download.hcl:/root/download.hcl    environment:      - ATHENS_NETRC_PATH=/root/.netrc      - ATHENS_STORAGE_TYPE=disk      - ATHENS_DISK_STORAGE_ROOT=/var/lib/athens      - ATHENS_GOGET_WORKERS=100      - ATHENS_DOWNLOAD_MODE=file:/root/download.hcl      - ATHENS_GONOSUM_PATTERNS=gitlab.test.com

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、配置秘钥

首先查看电脑有没有秘钥

# cd .ssh# lsid_rsa          id_rsa.pub

没有的话通过下面的命令的生成

# ssh-keygen -t rsa -C "youremail@example.com"

邮箱换成自己的,一路回车即可

然后将 id_rsa.pub 公钥的内容添加到自己的私有仓库中,如何添加自己 google 吧,比较简单

2、配置 HTTP 与 SSH 重写规则

# cat gitconfig [url "ssh://git@gitlab.test.com"]        insteadOf = https://gitlab.test.com

3、配置 SSH 来绕过主机 SSH 键验证

# cat config Host gitlab.test.comHostname gitlab.test.comStrictHostKeyChecking noIdentityFile /root/.ssh/id_rsa

将上面配置的认证信息,映射到容器中即可

version: '2'services:  athens:    image: gomods/athens:v0.11.0    restart: always    container_name: athens_proxy    ports:      - "3000:3000"    volumes:      - ./athens-storage:/var/lib/athens      - ./download.hcl:/root/download.hcl      - ./gitconfig:/root/.gitconfig      - ./ssh-keys:/root/.ssh    environment:      - ATHENS_STORAGE_TYPE=disk      - ATHENS_DISK_STORAGE_ROOT=/var/lib/athens      - ATHENS_GOGET_WORKERS=100      - ATHENS_DOWNLOAD_MODE=file:/root/download.hcl      - ATHENS_GONOSUM_PATTERNS=gitlab.test.com

这样即可实现秘钥的认证了

需要注意私钥的权限,刚开始没注意,执行报了下面的错误

        @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@        @         WARNING: UNPROTECTED PRIVATE KEY FILE!          @        @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@        Permissions 0644 for '/root/.ssh/id_rsa' are too open.        It is required that your private key files are NOT accessible by others.        This private key will be ignored.        Load key "/root/.ssh/id_rsa": bad permissions        git@gitlab.test.com: Permission denied (publickey).        fatal: Could not read from remote repository.

看报错就可推断出,是权限太大了,需要私钥文件不能被其他人所访问。

修改权限就可以了

ssh-keys # chmod 600 id_rsa

读到这里,这篇"怎么使用docker compose部署golang的Athens私有代理"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。

配置 私有 仓库 代理 存储 模块 认证 安全 文件 模式 策略 内容 地址 面的 服务 代码 信息 变量 客户 文章 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广州淘业互联网络科技 互联网科技活动banner 厦门中拓互联网络科技有限公司 科技互联网技术 腾讯阿里互联网科技 互联网科技与金融科技 美国互联网科技 互联网科技英文 世界互联网领先科技成果 互联网巨头投资的硬核科技 济南和联互联网科技有限公司 开启互联网科技时代小说 未来五年的互联网科技 速维有品互联网信息科技(苏州)有限公司 四川慕妮娅互联网科技有限公司 工业互联网山东科技大学 互联网方面的科技前沿 珠海东科互联网科技有限公司 全球科技与互联网公司市值变化 广州全民伙伴互联网科技有限公司 互联网科技公司的优势 深圳互联网科技公司 西安互联网科技公司 欧洲十大科技互联网公司 移动互联网科技股 茂名市互联网科技产业园 互联网科技和信息 长沙茂晟互联网科技有限公司 广西科技产业互联网是什么 承德科技产业互联网平台
0