Не удалось пройти аутентификацию в частном модуле в Афинах (прокси-сервер модуля Go)

Я тестировал Афины с докером на своем локальном компьютере, пытаясь настроить аутентификацию, чтобы Афины могли получить доступ к частному модулю компании. Я последовал за руководство здесь и команду go get github.com/SomeCompany/someprivatemoduleуспешно загрузил последнюю версию этой библиотеки в мой локальный. Но есть что-то странное.

  1. Эти файлы конфигурации (.gitconfig, .ssh / config и .ssh / id_rsa) не заставили эту команду работать. Вместо этого файл .netrc, состоящий из моего токена GitHub, заставляет его работать. Я попытался запустить образ докера без монтирования этих файлов конфигурации, но команда все еще работает; Однако, если я удалил ~ / .netrc в своем локальном компьютере, команда завершится ошибкой. Кажется, что go get все еще зависит от локальной конфигурации, а не от Афин.

команда go get не работает при удалении .netrc

  1. В 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:

Ошибка 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 будет пытаться получить модули, используя следующую последовательность:

  1. проверьте GOPATH / pkg / mod
  2. запрос от 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 и попробуйте еще раз, посмотрите, что происходит.

Другие вопросы по тегам