Репозиторий — основная единица хранения в Galleon. У каждого репозитория есть имя, формат и тип.
Форматы
Формат определяет, какие артефакты хранит репозиторий и по какому протоколу с ним работают клиенты.
| Формат | Содержимое | Типичный клиент |
|---|---|---|
| Docker (OCI) | Образы контейнеров, OCI-артефакты (например, Helm-чарты) | docker, crane, skopeo, helm |
| Maven | Java-библиотеки и другие артефакты сборки | mvn, gradle |
| Go | Go-модули | go |
| npm | Пакеты npm | npm, yarn, pnpm |
| PyPI | Пакеты Python | pip, uv, twine |
| RubyGems | Гемы Ruby | gem, bundle |
| Cargo | Крейты Rust | cargo |
| 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-зеркал общедоступных реестров есть права анонимного чтения; они действуют после включения анонимного доступа (Управление доступом).
Состав набора и настройки каждого репозитория описаны в разделе Репозитории руководства администратора.