Athens比Nexus/Artifactory更适合快速部署,因其专为Go modules设计、无UI、不依赖JVM,单二进制或Docker即可5分钟启动;支持私有模块托管、disk存储默认可用、配置全靠环境变量或YAML,无需Java栈复杂配置与权限管理。

直接用 Athens 最轻量、最可控,5 分钟内能跑起来,且天然支持私有模块托管和缓存策略。
为什么 Athens 比 Nexus/Artifactory 更适合快速部署
Athens 是专为 Go modules 设计的代理服务,不带 UI、不依赖 Java 环境,单二进制即可运行;而 Nexus/Artifactory 需要 JVM、配置仓库类型(go proxy/hosted/group)、设置权限与存储路径,启动耗时长、出错点分散。如果你只是想让团队能 go get 私有包、缓存公共包、避免被墙,Athens 就是开箱即用的选择。
- 它默认监听
:3000,不需要反向代理也能调试 - 所有配置靠环境变量或 YAML 文件控制,没有隐藏的 UI 表单陷阱
- 支持
disk存储(默认),无需额外部署数据库 - 对私有 Git 仓库(如
gitlab.company.com)可直接配置ATHENS_GO_PROXY_CONFIG或ATHENS_DOWNLOAD_MODE控制拉取行为
用 Docker Compose 启动一个带私有仓库支持的 Athens 实例
新建 docker-compose.yml,关键点在于:暴露端口、挂载本地存储、配置私有域名白名单、关闭校验(或配自定义 sumdb):
version: '3.8'
services:
athens:
image: gomods/athens:v0.35.0
ports:
- "3000:3000"
environment:
- ATHENS_DISK_STORAGE_ROOT=/var/lib/athens
- ATHENS_GO_PROXY_CONFIG=/config/proxy.config
- GOSUMDB=off
- ATHENS_ALLOW_LIST_FILE=/config/allow.list
volumes:
- ./athens-storage:/var/lib/athens
- ./proxy.config:/config/proxy.config
- ./allow.list:/config/allow.list其中 proxy.config 内容示例(控制哪些模块走代理、哪些直连):
立即学习“go语言免费学习笔记(深入)”;
github.com/*: https://proxy.golang.org gitlab.company.com/*: direct
allow.list 列出你允许拉取的私有域名(防止意外泄露):
gitlab.company.com bitbucket.internal
- 必须确保宿主机能
git clone git@gitlab.company.com:team/utils.git成功,Athens 不处理 SSH 密钥,它复用宿主机的~/.ssh - 若用 HTTPS 认证,需在容器内挂载
.netrc或通过ATHENS_BASIC_AUTH配置账号密码 - 不要把
GOPROXY设成http://localhost:3000—— 容器内 localhost 不指向宿主机,应设为http://host.docker.internal:3000(Mac/Win)或宿主机真实 IP(Linux)
客户端怎么配才能真正用上这个代理
不是只改 GOPROXY 就完事。三个环境变量必须协同生效:
-
GOPROXY=http://host.docker.internal:3000(或你的服务器 IP) -
GONOPROXY=gitlab.company.com:告诉 go 命令,该域名下的模块跳过代理、直接 clone —— 这是私有模块能被拉到的关键 -
GOSUMDB=off:私有模块没有官方 sumdb 条目,不关会报verifying gitlab.company.com/team/utils@v1.2.3: checksum mismatch
验证是否生效:
go mod init example.com/test go get gitlab.company.com/team/utils@v1.0.0
如果看到日志里出现 INFO[0001] downloading module... 且项目根目录生成了 go.sum 条目(内容含 gitlab.company.com),说明走通了。
容易被忽略的权限与路径细节
Athens 默认以非 root 用户运行(UID 1001),挂载的 ./athens-storage 目录必须对 UID 1001 可写,否则启动后日志报 permission denied 却无明确错误提示。
- Linux 下执行:
sudo chown -R 1001:1001 ./athens-storage - Windows/Mac 的 Docker Desktop 通常自动处理权限,但若
docker-compose logs athens出现mkdir /var/lib/athens: permission denied,就得检查挂载路径权限 -
go mod download第一次拉取私有模块时,Athens 会尝试git ls-remote查询 tag,若 Git 服务器禁用了该命令(如某些 GitLab CE 版本),会卡住或失败 —— 此时需确认 Git 服务允许未认证的ls-remote,或改用 SSH URL 并确保密钥可用


















