Larets - это менеджер репозиториев, аналог Nexus Repository Manager, написанный на Go. Larets позволяет создавать, хранить и управлять Docker, Git и Helm репозиториями.
- Docker репозитории: хранение и проксирование Docker образов
- Git репозитории: хранение и проксирование Git репозиториев
- Helm репозитории: хранение и проксирование Helm чартов
- Типы репозиториев:
- Hosted (хостинг): для хранения собственных артефактов
- Proxy (прокси): для проксирования удаленных репозиториев
- Group (группа): для объединения нескольких репозиториев (в разработке)
- Go 1.22+
- PostgreSQL 12+
- Git
- Helm (для работы с Helm репозиториями)
-
Клонируйте репозиторий:
git clone https://github.com/Viste/larets.git cd larets
-
Создайте
.env
файл на основе примера:cp .env.example .env
-
Настройте переменные окружения в
.env
файле:DATABASE_URL=postgres://username:password@localhost:5432/larets?sslmode=disable
-
Соберите и запустите приложение:
go build -o larets . ./larets
-
Создайте
.env
файл на основе примера:cp .env.example .env
-
Настройте переменные окружения в
.env
файле. -
Соберите и запустите Docker контейнер:
docker build -t larets . docker run -d --name larets -p 8080:8080 --env-file .env -v larets-storage:/app/storage larets
Конфигурация осуществляется через переменные окружения или файл .env
:
Переменная | Описание | Значение по умолчанию |
---|---|---|
DATABASE_URL | URL подключения к PostgreSQL | - |
ENABLE_DOCKER | Включить поддержку Docker репозиториев | true |
ENABLE_GIT | Включить поддержку Git репозиториев | true |
ENABLE_HELM | Включить поддержку Helm репозиториев | true |
SERVER_PORT | Порт HTTP сервера | 8080 |
BASE_URL | Базовый URL для доступа к репозиториям | http://localhost:8080 |
STORAGE_PATH | Путь к директории для хранения артефактов | ./storage |
DEFAULT_CACHE_TTL | TTL кеша для прокси-репозиториев (минуты) | 1440 (24 часа) |
ENABLE_AUTH | Включить аутентификацию | false |
ADMIN_USER | Имя пользователя администратора | admin |
ADMIN_PASSWORD | Пароль администратора | admin |
GET /api/health
- Проверка состояния сервера
GET /api/docker/repositories
- Список Docker репозиториевPOST /api/docker/repositories
- Создание Docker репозиторияGET /api/docker/repositories/{name}
- Информация о Docker репозиторииGET /api/docker/images?repository={name}
- Список образов в репозиторииPOST /api/docker/images?repository={name}&name={image}&tag={tag}
- Загрузка образа
GET /api/git/repositories
- Список Git репозиториевPOST /api/git/repositories
- Создание Git репозиторияGET /api/git/repositories/{name}
- Информация о Git репозиторииPOST /api/git/sync/{name}
- Синхронизация прокси-репозитория
GET /api/helm/repositories
- Список Helm репозиториевPOST /api/helm/repositories
- Создание Helm репозиторияGET /api/helm/repositories/{name}
- Информация о Helm репозиторииGET /api/helm/charts?repository={name}
- Список чартов в репозиторииPOST /api/helm/charts?repository={name}&filename={filename}
- Загрузка чартаPOST /api/helm/sync/{name}
- Синхронизация прокси-репозитория
# Создание хостового репозитория
curl -X POST http://localhost:8080/api/docker/repositories \
-H "Content-Type: application/json" \
-d '{"name":"docker-local","description":"Локальный Docker репозиторий","type":"hosted"}'
# Создание прокси-репозитория
curl -X POST http://localhost:8080/api/docker/repositories \
-H "Content-Type: application/json" \
-d '{"name":"docker-proxy","description":"Прокси Docker Hub","type":"proxy","url":"https://registry-1.docker.io"}'
# Создание хостового репозитория
curl -X POST http://localhost:8080/api/git/repositories \
-H "Content-Type: application/json" \
-d '{"name":"git-local","description":"Локальный Git репозиторий","type":"hosted"}'
# Создание прокси-репозитория
curl -X POST http://localhost:8080/api/git/repositories \
-H "Content-Type: application/json" \
-d '{"name":"git-proxy","description":"Прокси GitHub","type":"proxy","url":"https://github.com/Viste/larets.git"}'
# Создание хостового репозитория
curl -X POST http://localhost:8080/api/helm/repositories \
-H "Content-Type: application/json" \
-d '{"name":"helm-local","description":"Локальный Helm репозиторий","type":"hosted"}'
# Создание прокси-репозитория
curl -X POST http://localhost:8080/api/helm/repositories \
-H "Content-Type: application/json" \
-d '{"name":"helm-proxy","description":"Прокси Bitnami","type":"proxy","url":"https://charts.bitnami.com/bitnami"}'
curl -X POST http://localhost:8080/api/helm/charts?repository=helm-local&filename=my-chart-0.1.0.tgz \
--data-binary @my-chart-0.1.0.tgz
# Добавление репозитория
helm repo add larets-repo http://localhost:8080/helm/helm-local
# Обновление репозитория
helm repo update
# Поиск чартов
helm search repo larets-repo/