Репозиторий — основная единица хранения в Galleon. У каждого репозитория есть имя, формат и тип.

Форматы

Формат определяет, какие артефакты хранит репозиторий и по какому протоколу с ним работают клиенты.

ФорматСодержимоеТипичный клиент
Docker (OCI)Образы контейнеров, OCI-артефакты (например, Helm-чарты)docker, crane, skopeo, helm
MavenJava-библиотеки и другие артефакты сборкиmvn, gradle
GoGo-модулиgo
npmПакеты npmnpm, yarn, pnpm
PyPIПакеты Pythonpip, uv, twine
RubyGemsГемы Rubygem, bundle
CargoКрейты Rustcargo
rawПроизвольные файлыcurl, браузер

Типы репозиториев

Поддерживаются два типа репозиториев: hosted и proxy.

Hosted

Hosted-репозиторий хранит артефакты, которые публикуете вы: результаты сборок, внутренние библиотеки, релизные архивы. Политика записи репозитория определяет, что разрешено: перезапись опубликованных версий, только первая публикация каждой версии (опубликованное нельзя перезаписать) или полный запрет записи (репозиторий доступен только на чтение).

Proxy

Proxy-репозиторий — кеширующее зеркало внешнего реестра, например Maven Central или Docker Hub. При первом запросе артефакт скачивается из внешнего реестра и сохраняется, повторные запросы обслуживаются из кеша. Proxy-репозиторий доступен только на чтение; для публикации используйте hosted-репозиторий. Подробнее о кешировании — в разделе Проксирование и кеширование.

Групповые репозитории (несколько репозиториев под одним адресом) пока не поддерживаются.

Адрес репозитория

Galleon работает со штатными клиентами каждого формата. В настройках клиента указывается адрес репозитория вида:

https://<GALLEON_HOST>/repository/<REPOSITORY>/...

Исключение — репозитории формата Docker (OCI): контейнерные клиенты обращаются к ним без префикса /repository/, адрес образа выглядит как <GALLEON_HOST>/<REPOSITORY>/<IMAGE>:<TAG>.

Как настроить клиент каждого формата, описано в руководстве пользователя.

Компоненты и ассеты

Содержимое репозитория складывается из компонентов и ассетов:

  • Компонент — единица версионирования: версия пакета, образ с тегом, Go-модуль конкретной версии.
  • Ассет — отдельный файл, принадлежащий компоненту: архив пакета, POM-файл, слой образа.

В raw-репозиториях компонентом считается каждый отдельный файл — его именем служит полный путь файла.

Образ контейнера устроен так же: компонент — образ с тегом, ассеты — его манифест и слои. Слои у образов общие: базовый слой нескольких образов хранится один раз. Кроме образов с тегами в репозитории могут быть манифесты, на которые ссылаются только по контрольной сумме, — в дереве содержимого они помечены как digest.

Одинаковое содержимое хранится в одном экземпляре: файл узнаётся по контрольной сумме, и один и тот же архив, опубликованный в двух репозиториях, занимает место один раз. Место освобождается, когда на содержимое не осталось ни одной ссылки.

В веб-интерфейсе содержимое репозитория отображается в виде дерева компонентов и ассетов. Там же при наличии прав доступны удаление артефактов, а для форматов Maven, npm, RubyGems, PyPI и raw — загрузка.

Стартовый набор репозиториев

При первом запуске с пустой базой данных Galleon создаёт стартовый набор репозиториев: proxy-зеркала общедоступных реестров (Maven Central, proxy.golang.org, база контрольных сумм Go, Docker Hub) и hosted-репозитории для Maven (отдельно релизы без перезаписи и snapshot-версии), Go и образов контейнеров.

Набор создаётся только при пустом списке репозиториев: удалённый из него репозиторий при перезапуске не появится заново. У proxy-зеркал общедоступных реестров есть права анонимного чтения; они действуют после включения анонимного доступа (Управление доступом).

Состав набора и настройки каждого репозитория описаны в разделе Репозитории руководства администратора.