Многочисленные санкционные ограничения могут стать преградой для использования существующих систем управления бинарными репозиториями, например, при приобретении необходимых лицензий. Таким образом, альтернатива существующим инструментам может сыграть положительную роль при организации работы с артефактами организации.
Artipie - это бесплатный менеджер бинарных репозиториев с открытым исходным кодом, поддерживающий все основные форматы пакетов и артефактов, который позволяет размещать их локально или в облачном хранилище.
Введение
Менеджер бинарных репозиториев (МБР) - это программный инструмент предназначенный для оптимизации загрузки, выгрузки и хранения файлов в бинарном формате, используемых и производимых в контексте разработки программного обеспечения (ПО). Являясь одним из ключевых компонентов DevOps инструментов, МБР расположен сразу после конвейера сборки. Именно поэтому его иногда называют “хранилищем сборок”, “хранилищем артефактов” или “хранилищем состояния конвейера”.
Традиционный конвейер DevOps ожидает исходный код, который автоматически проверяется, тестируется, упаковывается и версионируется в артефакт (бинарный файл), такой как .jar, .tar, .zip или другие форматы. Затем артефакт, как правило, хранится вне репозитория исходного кода и должен быть доступным для последующих этапов конвейера непрерывной доставки (Continuous Delivery). Будучи центральной точкой для управления двоичными файлами и их зависимостями, а также интегрированным хранилищем для сборок программного обеспечения, разработанного внутри компании, предполагается, что МБР будет размещать эти артефакты.
Программный проект практически любого размера должен хранить свои бинарные артефакты в репозитории, чтобы обеспечить доступ к ним программистов или инструментов, обеспечивающих непрерывную интеграцию (Continuous Integration), доставку (Continuous Delivery) и развертывание (Continuous Deployment). Поскольку качество программного обеспечения, управляющего репозиториями, оказывает существенное влияние на работу команд разработчиков, МБР должен отвечать таким требованиям, как:
Интегрируемость - существует множество инструментов автоматизации сборки для каждого языка программирования, например, Maven для Java, Npm для JavaScript или Rake для Ruby. Существует также множество инструментов непрерывной интеграции, таких как Jenkins, CircleCI или Travis. Поскольку автоматизация является наиболее важным аспектом DevOps, ожидается, что для каждого или большинства из них будут установлены плагины, обеспечивающие бесшовную интеграцию с МБР.
Доступность - артефакты являются важными компонентами процесса разработки программного обеспечения, и они должны быть доступны программисту или инструменту сборки немедленно, когда это необходимо, без даже незначительных задержек, и поставляться с максимально возможной скоростью.
Масштабируемость - большинство артефактов сборки представляют собой большие двоичные файлы; размер некоторых из них может превышать 1 Гб, например, образы Docker или .war (полное веб-приложение для Java). МБР должен быть способен поддерживать большие наборы данных, вплоть до практически полного отсутствия ограничений по размеру.
Надежность - возможность повреждения данных из-за программных или аппаратных сбоев должна быть исключена настолько, насколько это возможно.
Artipie
Artipie - это бесплатный инструмент для управления артефактами. Это не просто сервис, это конструктор, который включает в себя множество компонентов для обеспечения поддержки практически всех широко используемых форматов пакетов, таких как: Maven, Docker, Debian, NPM, Go, Helm, Ruby, Python, Anaconda, HexPm, Composer. Artipie позволяет использовать различные варианты хранения данных, такие как: файловое хранилище, S3-совместимое облачное хранилище, Redis хранилище, а также предоставляет интерфейс для использования хранилища, реализуемого пользователем. Кроме того, существует функционал, позволяющий управлять доступом пользователей и при настройке с использованием организаций - групп пользователей.
Artipie это проект с открытым исходным кодом, который стартовал в 2020 году и активно развивается в настоящее время. Все его компоненты основаны на принципах реактивности, асинхронного взаимодействия и неблокирующих потоках.
Архитектура Artipie состоит из 3 основных частей:
HTTP-движок Artipie
Адаптеры репозиториев
Хранилища
HTTP-движок Artipie
HTTP-движок Artipie - это Java-приложение, которое предоставляет API для операций операций доступа к репозиторию и управления им. Он маршрутизирует запросы к адаптеру репозитория и обеспечивает механизмы аутентификации и авторизации. HTTP-движок Artipie построен на базе фреймворков Vert.x и RxJava, что обеспечивает легкость, гибкость и масштабируемость проекта за счет асинхронных, реактивных и неблокирующих операций.
Наиболее распространенный поток действий для операции загрузки данных в Artipie выглядит следующим образом: клиент отправляет некоторый бинарный артефакт на сервер, который находит ответственный адаптер репозитория для обработки запроса; адаптер репозитория сохраняет данные в хранилище; после завершения он обновляет метаданные репозитория (некоторые репозитории работают иначе, например, Docker использует метаданные как путь).
Адаптеры репозиториев
Адаптеры репозиториев - это независимые проекты, направленные на реализацию API для взаимодействия с клиентом репозитория и слоями генерации метаинформации для конкретного типа пакета (npm, maven, hexpm и т.д.). HTTP-движок Artipie использует адаптеры для обеспечения функциональности МБР. Каждый адаптер репозитория инкапсулирует API для доступа к бинарным данным и файлам метаданных.
Artipie поддерживает следующие типы репозиториев:
Docker - приватный реестр для Docker образов.
Maven - репозиторий для Java, Kotlin, Groovy, Scala и Clojure артефактов и зависимостей различных типов, таких как: .jar, .war, .klib и т.д.
NPM - хранилище для доступа к коду и пакетам языка JavaScript.
PyPI - каталог пакетов Python.
Anaconda - пакеты для data science для языков Python, R, Lua, C, C++ и т.д.RPM - репозиторий пакетов .rpm для RHEL, PCLinuxOS, Fedora, AlmaLinux, CentOS, openSUSE, OpenMandriva, Oracle Linux и др.
Gem - хостинг RubyGem для языка Ruby.
Go - репозиторий пакетов для языка Go.
Хранение бинарных файлов - размещайте любые файлы, которые вам нужны.
Helm - репозиторий Helm-чартов.
NuGet - сервис хранения для .NET пакетов.
Debian - репозиторий пакетов для дистрибутивов Linux на базе Debian: Ubuntu, MX Linux, Mint, Raspberry Pi OS, Parrot OS и т.д.
HexPM - менеджер пакетов для экосистемы Erlang и Elixir.
Composer - репозиторий пакетов для языка PHP.
Количество адаптеров постоянно растет, и вы можете увидеть будущие адаптеры на дорожной карте Artipie.
Хранилища
Адаптеры репозиториев помещают загруженные и созданные бинарные файлы в хранилище. В Artipie используется абстрактное хранилище, которое обеспечивает абстрагирование над физической системой хранения данных, что позволяет легко реализовать интерфейс практически для любой системы хранения данных. Хранилище выполняет две основные операции: поместить и получить элемент из хранилища, а также несколько дополнительных функций, таких как: проверка существования элемента, получение списка элементов хранилища или получение метаданных элемента.
На данный момент существуют следующие реализации хранилищ:
Абстрактное хранилище также предоставляет интерфейс, который может быть расширен и реализован для поддержки любого нужного типа хранилища.
Использование Artipie
Существует два варианта работы с Artipie:
Запуск docker-образа Artipie с помощью Docker Compose.
Запуск Artipie как jar архива на JVM.
Далее рассмотрим простой пример локального запуска Artipie и его настройки для хранения docker-образов на компьютере с ОС Windows.
Подготовка
Для запуска Artipie необходимо установить Docker и Docker Compose, затем вы можете просто клонировать репозиторий GitHub с примером, разместив его по пути C:\
, или выполнить следующие шаги:
Создайте директорию для проекта Artipie (например
C:\artipie
).Создайте директорию для конфигурационного файла Artipie (например
C:\artipie\config
) и разместите там yml файл с конфигурацией сервера Artipie. В данном примере файл называетсяartipie.yml
. Вы должны указать путь, по которому Artipie найдет все конфигурации репозиториев. В настоящем примере путь к конфигурации docker репозитория указан как/var/artipie/repo
, потому что монтируется директория с локальной Windows машиныC:\artipie\repo
в каталог/var/artipie/repo
в docker контейнере Artipie. Это описано вdocker-compose.yml
на шаге №4.
meta:
storage:
type: fs
path: /var/artipie/repo #path to repository configurations
layout: flat
Создайте директорию для конфигурационных файлов репозиториев (например
C:\artipie\repo
), затем поместите в нее yml-файл с конфигурацией репозитория. Имя этого файла будет именем создаваемого репозитория. К примеру, файл называетсяmy-docker.yml
и соответственно репозиторий будет доступен с использованием имени my-docker. Чтобы настроить хранилище с типом FileStorage достаточно задать путь, по которому Artipie будет хранить все элементы. Система должна иметь права на чтение и запись в этой директории, чтобы создавать файлы по этому пути. В данном примере используется диретория/var/artipie/images
.
repo:
type: docker
storage:
type: fs #тип = FileStorage
path: /var/artipie/images #место где будут сохранятся файлы
Создайте файл docker-compose.yml со следующим набором инструкций:
version: "3.3"
services:
artipie:
image: artipie/artipie:latest
container_name: artipie
restart: unless-stopped
ports:
- "8080:8080"
volumes:
- /C/artipie/repo:/var/artipie/repo # монтируем папку с конфигурацией репозитория
- /C/artipie/config:/etc/artipie/ # монтируем папку с конфигурацией сервера Artipie
Запуск
Теперь откройте консоль, перейдите в папку с файлом docker-compose.yml
и запустите Artipie с помощью команды: docker-compose up
. Следующий вывод в консоль показывает, что Artipie запустился на порту 8080 и нашел файл конфигурации репозитория my-docker.yml
.
C:\>cd C:/artipie
C:\artipie>docker-compose up
[+] Running 2/2
- Network artipie_default Created 0.7s
- Container artipie Created 0.1s
Attaching to artipie
…
artipie | [INFO] main com.artipie.VertxMain - Artipie was started on port 8080
artipie | [INFO] ForkJoinPool.commonPool-worker-1 com.artipie.asto.fs.FileStorage - Found 1 objects by the prefix "" in /var/artipie/repo by /var/artipie/repo: [my-docker.yml]
…
Использование
Push образа
Для создания образа, который будет использоваться в данном примере, мы воспользуемся уже существующим образом, доступным на Docker Hub. В данном случае - это легковесный образ с Alpine Linux.
Скачайте образ alpine с помощью команды:
docker pull alpine
:
C:\artipie>docker pull alpine
Using default tag: latest
latest: Pulling from library/alpine
Digest: sha256:686d8c9dfa6f3ccfc8230bc3178d23f84eeaf7e457f36f271ab1acc53015037c
Status: Downloaded newer image for alpine:latest
docker.io/library/alpine:latest
С помощью следующей команды мы создадим наш docker образ под названием myfirstimage, который основан на образе alpine, чтобы разместить его в нашем репозитории Artipie:
docker image tag alpine localhost:8080/my-docker/myfirstimage
. Прверим, что Docker содержит 2 образа - alpine и localhost:8080/my-docker/myfirstimage, с помощью командыdocker images
:
C:\artipie>docker image tag alpine localhost:8080/my-docker/myfirstimage
C:\artipie>docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
localhost:8080/my-docker/myfirstimage latest e66264b98777 7 weeks ago 5.53MB
alpine latest e66264b98777 7 weeks ago 5.53MB
Теперь нам нужно войти в наш собственный реестр под стандартным пользователем artipie|artipie, поскольку реестр Docker поддерживает только авторизованных пользователей:
docker login --username artipie localhost:8080
:
C:\artipie>docker login --username artipie localhost:8080
Password: artipie
Login Succeeded
И наконец, мы можем поместить данный образ в наш репозиторий командой:
docker push localhost:8080/my-docker/myfirstimage
:
C:\artipie>docker push localhost:8080/my-docker/myfirstimage
Using default tag: latest
The push refers to repository [localhost:8080/my-docker/myfirstimage]
24302eb7d908: Pushed
latest: digest: sha256:4ff3ca91275773af45cb4b0834e12b7eb47d1c18f770a0b151381cd227f4c253 size: 528
Для проверки результата мы можем подключиться к контейнеру командой:
docker exec -it artipie bash
и перейти в директорию/var/artipie/images/my-docker
для того, чтобы найти папку docker с созданными папками и blob-файлами.
Pull образа
Перед скачиванием образа из нашего репозитория удалите существующий образ из списка локальных образов командой: docker image rm localhost:8080/my-docker/myfirstimage
. Убедитесь, что образ был удален, и теперь есть только 1 образ(alpine): docker images
:
C:\artipie>docker image rm localhost:8080/my-docker/myfirstimage
Untagged: localhost:8080/my-docker/myfirstimage:latest
Untagged: localhost:8080/my-docker/myfirstimage@sha256:4ff3ca91275773af45cb4b0834e12b7eb47d1c18f770a0b151381cd227f4c253
C:\artipie>docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
alpine latest e66264b98777 7 weeks ago 5.53MB
Образ можно извлечь с помощью команды: docker pull localhost:8080/my-docker/myfirstimage
. После выполнения команды можно убедиться, что теперь снова доступны два образа (alpine and localhost:8080/my-docker/myfirstimage): docker images
:
C:\artipie>docker pull localhost:8080/my-docker/myfirstimage
Using default tag: latest
latest: Pulling from my-docker/myfirstimage
Digest: sha256:4ff3ca91275773af45cb4b0834e12b7eb47d1c18f770a0b151381cd227f4c253
Status: Downloaded newer image for localhost:8080/my-docker/myfirstimage:latest
localhost:8080/my-docker/myfirstimage:latest
C:\artipie>docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
localhost:8080/my-docker/myfirstimage latest e66264b98777 7 weeks ago 5.53MB
alpine latest e66264b98777 7 weeks ago 5.53MB
Заключение
Бинарный репозиторий является ключевым элементом любого конвейера DevOps, и каждому проекту требуются свой тип бинарного репозитория для хранения артефактов. Почти каждая экосистема языка программирования имеет свой собственный тип хранилища артефактов. Artipie предоставляет широкий спектр адаптеров для основных форматов упаковки в одном продукте, позволяя управлять всеми артефактами из одного места. Он даёт возможность добавления реализации собственного хранилища бинарных данных в дополнение к файловому хранилищу, Redis и S3.
Artipie - хороший выбор для хранения бинарных артефактов, поскольку он прост в настройке, быстро растет и развивается, а также поддерживает множество существующих типов репозиториев. Являясь продуктом с открытым исходным кодом, он не требует оплаты для использования.
Более подробную информацию об Artipie вы можете найти на GitHub. Если у вас есть вопросы или предложения - можете задать их в Telegram группе.
Чтобы поддержать развитие Artipie, не стесняйтесь поставить проекту звезду на GitHub.
pit_art
изучил гит этого прекрасного поделия, фраппирован крайне.
ацл - в файле на хосте
полиси - там же
Хочешь кластер и синхронизировать учетки с полисями на разных нодах - ну пиши энсибловый темплейт и разливай
нет выделенной субд, никакой интеграции с внешними аус-провайдерами, но грозятся при этом жить с 100ТБ стораджем артефактов в s3 на нескольких нодах. Уж не знаю врут или нет.
Вайтпепер, понятно что устарел (20 года), но изобилует тупейшими ошибками даже для своего времени. Наверное можно использовать эту штуку как что-то легковесное, для совсем небольших команд, но даже при таком раскладе nexus-oss даст ему фору во всем, кроме кластеризации.
Swizbiz Автор
Спасибо за ревью.
Проработка ACL уже в работе. Расширение способов авторизации уже запланировано.
ggo
configuration-as-a-code же...