Не удалось пройти аутентификацию в частном модуле в Афинах (прокси-сервер модуля Go)
Я тестировал Афины с докером на своем локальном компьютере, пытаясь настроить аутентификацию, чтобы Афины могли получить доступ к частному модулю компании. Я последовал за руководство здесь и команду
go get github.com/SomeCompany/someprivatemodule
успешно загрузил последнюю версию этой библиотеки в мой локальный. Но есть что-то странное.
- Эти файлы конфигурации (.gitconfig, .ssh / config и .ssh / id_rsa) не заставили эту команду работать. Вместо этого файл .netrc, состоящий из моего токена GitHub, заставляет его работать. Я попытался запустить образ докера без монтирования этих файлов конфигурации, но команда все еще работает; Однако, если я удалил ~ / .netrc в своем локальном компьютере, команда завершится ошибкой. Кажется, что go get все еще зависит от локальной конфигурации, а не от Афин.
команда go get не работает при удалении .netrc
- В
go get
команда извлекает частный модуль из GitHub. Однако в ATHENS_DISK_STORAGE_ROOT я могу найти только те общедоступные модули, от которых зависит github.com/SomeCompany/someprivatemodule , а эти частные модули можно найти только в GOPATH / pkg / mod. Разве Афины не должны загружать частный модуль в ATHENS_DISK_STORAGE_ROOT, чтобы после отключения GitHub / gitlab пользователи могли загружать эти частные модули из Афин?
Отсутствует частный модуль в каталоге Афин
Вот моя установка:
GOPROXY=127.0.0.1:3000, which is the exposed port of Athens. GOPRIVATE="github.com/SomeCompany"
GONOPROXY="github.com/SomeCompany"
GONOSUMDB="github.com/SomeCompany"
~ / .netrc
machine github.com login some_personal_access_token
.gitconfig
[url "ssh://git@github.com/"]
insteadOf = https://github.com/
[url "ssh://git@gitlab.com/"]
insteadOf = https://gitlab.com/
.ssh / config
Host github.com
Hostname github.com
StrictHostKeyChecking no
IdentityFile /root/.ssh/id_rsa
команда запуска образа докера
docker run -d -v $ATHENS_STORAGE:/var/lib/athens -e ATHENS_DISK_STORAGE_ROOT=/var/lib/athens -e ATHENS_STORAGE_TYPE=disk -v $PWD/.gitconfig:/root/.gitconfig -v @PWD/.ssh:/root/.ssh --name athens-proxy --restart always -p 3000:3000 gomods/athens:v0.11.0
1-е редактирование
Если установить для GOPRIVATE значение empty, GONOPROXY и GONOSUMDB автоматически сбрасываются. И я попытался перезапустить докер с исходной настройкой, у меня возникла ошибка 404:
Журнал Docker:
INFO[2:35PM]: Exporter not specified. Traces won't be exported
2021-05-29 14:35:11.957339 I | Starting application at port :3000
INFO[2:35PM]: exit status 1: go list -m: github.com/SomeCompany@latest: invalid github.com/ import path "github.com/SomeCompany"
http-method=GET http-path=/github.com/SomeCompany/@v/list kind=Not Found module= operation=download.ListHandler ops=[download.ListHandler pool.List protocol.List vcsLister.List] request-id=3660faa3-256f-43fb-9937-f29565e7afa9 version=
INFO[2:35PM]: incoming request http-method=GET http-path=/github.com/SomeCompany/@v/list http-status=404 request-id=3660faa3-256f-43fb-9937-f29565e7afa9
INFO[2:35PM]: exit status 1: go list -m: github.com@latest: unrecognized import path "github.com": parse https://github.com/?go-get=1: no go-import meta tags ()
http-method=GET http-path=/github.com/@v/list kind=Not Found module= operation=download.ListHandler ops=[download.ListHandler pool.List protocol.List vcsLister.List] request-id=4d6659d2-710d-445f-b07f-7407aa4f2e3e version=
INFO[2:35PM]: incoming request http-method=GET http-path=/github.com/@v/list http-status=404 request-id=4d6659d2-710d-445f-b07f-7407aa4f2e3e
INFO[2:35PM]: incoming request http-method=GET http-path=/github.com/SomeCompany/someprivatemodule/@v/list http-status=200 request-id=e8d95d77-81dc-46fe-9523-e35f6dc8201f
DEBUG[2:35PM]: saving github.com/SomeCompany/someprivatemodule@v1.0.5 to storage... http-method=GET http-path=/github.com/SomeCompany/someprivatemodule/@v/v1.0.5.info request-id=24964b9c-b0b2-450a-bd9a-9d59f60a5c52
INFO[2:35PM]: github.com/SomeCompany/someprivatemodule@v1.0.5/go.mod: verifying module: github.com/SomeCompany/someprivatemodule@v1.0.5/go.mod: reading https://sum.golang.org/lookup/github.com/SomeCompany/someprivatemodule@v1.0.5: 410 Gone
server response: not found: github.com/SomeCompany/someprivatermodule@v1.0.5: invalid version: unknown revision v1.0.5 http-method=GET http-path=/github.com/SomeCompany/someprivatemodule/@v/v1.0.5.info kind=Not Found module=github.com/SomeCompany/someprivatemodule operation=download.InfoHandler ops=[download.InfoHandler pool.Info protocol.Info protocol.processDownload stash.Pool stasher.Stash stasher.fetchModule goGetFetcher.Fetch module.downloadModule] request-id=24964b9c-b0b2-450a-bd9a-9d59f60a5c52 version=v1.0.5
INFO[2:35PM]: incoming request http-method=GET http-path=/github.com/SomeCompany/someprivatemodule/@v/v1.0.5.info http-status=404 request-id=24964b9c-b0b2-450a-bd9a-9d59f60a5c52
Похоже, Афины пытаются найти пакеты на sum.golang.org. Поэтому я попытался смонтировать файл .netrc с соответствующими учетными данными и установить ATHENS_NETRC_PATH. Это все еще дает мне ту же ошибку.
1 ответ
Я просто немного попробовал Афины. Он служит кешем модуля Go. Когда вы запускаете athens и устанавливаете GOPROXY=127.0.0.1:3000, команда go get будет пытаться получить модули, используя следующую последовательность:
- проверьте GOPATH / pkg / mod
- запрос от GOPROXY
Здесь ваш GOPROXY - это сервер в Афинах, поэтому ваш местный go get отправит запрос в Афины. Затем athens проверит, находится ли модуль в ATHENS_DISK_STORAGE_ROOT; в противном случае получите прокси с github.com или где бы то ни было.
Вы можете попробовать пройти процесс.
Что касается ваших вопросов,
Я замечаю, что вы установили
github.com/SomeCompany
в вашем GONOPROXY, поэтому все модули в этом репозитории не будут использовать GOPROXY, и athens также не будут работать.
Вот почему в Вопросе 1 используется ваш .netrc; а в вопросе 2 - только те модули, которые
github.com/SomeCompany/someprivatemodule
Зависит от того, что он загружен из Афин, а сам модуль - нет.
Удалите GONOPROXY и попробуйте еще раз, посмотрите, что происходит.