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/