Files
minio-full/CLAUDE.md
T
vasyansk 6ba0fbc176
docker-build / Build image (push) Successful in 20s
rollback
2026-07-31 11:42:35 +07:00

51 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Назначение
Патчит official-бинарник MinIO (AIStor), заменяя встроенный публичный ключ лицензии на собственный, и генерирует под него валидную JWT-лицензию. Итог — Docker-образ, где `minio` запускается с self-signed лицензией через `MINIO_LICENSE`. Только для образовательных/тестовых целей.
## Архитектура пайплайна
Весь процесс — многоэтапная сборка в `Dockerfile`, где три компонента выполняются строго по цепочке:
1. **`generate-keys.sh`** — генерирует пару ECDSA `secp384r1` (P-384): `new-private.pem` / `new-public.pem`. Кривая жёстко привязана к алгоритму подписи лицензии (ES384) — менять нельзя.
2. **`replace-key.py <orig-binary> <new-binary> <new-pubkey>`** — бинарный патч. Скачивает оригинальный публичный ключ MinIO с `https://subnet.min.io/downloads/license-pubkey.pem` (сетевой доступ обязателен на этапе сборки) и через простой `bytes.replace()` подменяет его в бинарнике на свой. **Критичный инвариант**: длина нового PEM-ключа должна побайтово совпадать с оригиналом (`len(new) == len(original)`), иначе смещения в бинарнике поедут — скрипт падает с ошибкой. Именно поэтому нельзя произвольно менять формат/кривую ключа.
3. **`generate-license.py <private-key> <output>`** — подписывает JWT (`jwcrypto`, alg `ES384`) приватным ключом из шага 1. Claims (`org`, `cap`, `plan`, `exp`, `aid`, …) захардкожены в самом скрипте — параметры лицензии правятся там, в словаре `jwt_data`. `exp` в формате Unix-timestamp.
Связь между шагами: ключ из (1) → патчится публичная часть в бинарник (2) и подписывается лицензия приватной частью (3). Обе части должны быть из одной пары, иначе MinIO отвергнет лицензию.
## Версия MinIO
Задаётся через `ARG RELEASE` в `Dockerfile` (образ `quay.io/minio/aistor/minio`). При обновлении версии пересборка обязательна — публичный ключ и формат бинарника могут отличаться.
## Команды
Сборка и запуск (основной путь):
```bash
docker-compose up -d --build # API :9000, Web UI :9001
```
Учётные данные и настройки MinIO берутся из `.env` (`MINIO_ROOT_USER`, `MINIO_ROOT_PASSWORD`, `MINIO_VOLUMES`, `MINIO_SITE_REGION`).
Локальный прогон отдельных шагов (нужен оригинальный бинарник `minio` в текущей папке):
```bash
pip install -r requirements.txt
./generate-keys.sh
python3 replace-key.py minio minio-patched new-public.pem
python3 generate-license.py new-private.pem minio.license
MINIO_LICENSE=./minio.license ./minio-patched server ./storage
```
## CI
`.gitea/workflows/docker-build.yml` — Gitea Actions, триггер на push git-тега (`tags: "*"`). Собирает и пушит образ в `git.realmanual.ru` с тегами `<tag>` и `latest`. Требует secret `PUSH_TOKEN`.
## Замечания
- `storage/` — рантайм-данные MinIO, в git не трекается (`.gitignore`), но присутствует локально.
- `.env` содержит реальные креды и закоммичен в репозиторий — при работе с ним не выводить значения.