Команда MinIO прекратила активное развитие бесплатной (community) версии, т.е. новые функции и улучшения теперь доступны только в коммерческой версии MinIO AIStor, а бесплатная версия получает лишь фиксы критических уязвимостей. Более того, в свежих бесплатных версиях существенно сокращён функционал веб-интерфейса, т.е. полноценное управление теперь доступно только через инструмент командной строки mc admin.
Тем не менее MinIO остаётся достаточно популярным решением хранения данных, которое совместимостимо с API Amazon S3.
Ниже рассмотрим пример установки и начальной настройки MinIO из интерфейса командной строки с использованием платформы контейнеризации Docker.
Подготовка к развёртыванию
Сборка Docker‑образа
Образ Docker со свежей версией соберём из исходников, доступных на github.
Устанавливаем необходимые для сборки пакеты:
sudo apt update && sudo apt install git golang-go
Клонируем репозиторий и переключаемся на релизную точку:
git clone https://github.com/minio/minio
cd minio/ && git checkout RELEASE.2025-10-15T17-29-55Z
*RELEASE.2025-10-15T17-29-55Z — это последняя доступная версия на момент написания статьи. Актуальный релиз можно подсмотреть, например, в списке релизов.
Собираем Docker‑образ с тегом myregistry.local/minio/minio:RELEASE.2025-10-15T17-29-55Z:
sudo TAG=myregistry.local/minio/minio:RELEASE.2025-10-15T17-29-55Z make docker
В случае успешного выполнения образ будет добавлен в хранилище автоматически. Проверить наличие можно командой docker images | grep minio.
Подготовка docker-compose.yaml
Создадим каталог проекта и файл docker-compose.yaml:
mkdir /opt/minio && cd /opt/minio
touch docker-compose.yaml
Добавьте в созданный файл содержимое по аналогии со скриншотом ниже.
К сожалению, Дзен не поддерживает форматирование кода. Вы можете скопировать готовый docker-compose.yaml из моего tg.
Рассмотрим значение некоторых переменных:
- MINIO_ROOT_USER — имя администратора MinIO.
- MINIO_ROOT_PASSWORD — пароль администратора MinIO.
- MINIO_SERVER_URL — публичный URL‑адрес API MinIO, на который клиенты будут отправлять s3-запросы. Обязательно при использовании HTTPS.
- MINIO_BROWSER_REDIRECT_URL — URL веб‑интерфейса MinIO. Обязательно при использовании HTTPS.
Подготовка точек монтирования
В каталоге с docker-compose.yaml создадим ещё 2 каталога:
- data — для хранения данных, которые будут загружаться в бакеты;
- config — для хранения конфигов и сертификатов.
mkdir data config
Добавление сертификатов
Если планируете использовать зашифрованное соединение, добавьте сертификат и ключ в config/certs/ и обязательно ограничьте к ним права доступа, иначе minio их проигнорирует:
mkdir config/certs
cp private.key public.crt config/certs/
chmod 644 config/certs/public.crt
chmod 600 config/certs/private.key
Запуск
Выполните docker compose up -d для запуска minio.
Проверка
В случае успешного запуска веб-интерфейс будет доступен на 9001 порту. В моём случае в адресной строке браузера необходимо указать: https://minio.test.local:9001
Траблшутинг
Если что-то пошло не так, проверьте правильность выполнения предыдущих шагов и изучите логи:
docker compose logs -f
Настройка
Так как веб-интерфейс в актуальных версиях урезан, все действия по настройке будем выполнять с помощью консольного клиента mc.
Установка MinIO Client
Cкачиваем клиент и делаем его исполняемым:
curl https://dl.min.io/client/mc/release/linux-amd64/mc -o mc
chmod +x ./mc
Подключение
Чтобы не указывать в каждой команде параметры подключения, создадим алиас:
./mc alias set minio https://minio.test.local:9000 admin Administrator
*вместо https://minio.test.local:9000 укажите ваш адрес
**вместо admin и Administrator укажите ваши MINIO_ROOT_USER и MINIO_ROOT_PASSWORD соответственно
Создание бакета
Бакет (bucket) в S3 представляет собой контейнер, который служит для хранения сгруппированных (по по проектам, приложениям или типам информации) данных.
Его можно представить как сетевую папку в Windows, доступ к которой ограничен политиками. Бакет может быть публичным или приватным, быть доступным только для чтения,только для записи или и того, и другого.
Команда создания тестового бакета:
./mc mb minio/my-test-bucket
Генерация ключей
Для аутентификации и авторизации сторонних сервисов в S3 принято использовать AWS Access Key ID (аналог логина) и AWS Secret Access Key (аналог пароля). Первый идентифицирует приложение, а второй подтверждает подлинность.
Чтобы сгененировать ключи, выполните:
./mc admin user add minio <ACCESS_KEY> <SECRET_KEY>
Например:
./mc admin user add minio awscli 1GfdVspCtohaEdCu6HXy2T5gHZDV7AXW8knE61/pkmU=
*SECRET_KEY сгенерирован командой `openssl rand -base64 32`
Назначение политик
Политики в MinIO — это правила доступа, определяющие, какие действия для каких ресурсов разрешены конкретному пользователю или группе.
Стандартные политики:
- consoleAdmin — полный доступ ко всем операциям;
- readonly — только чтение объектов;
- readwrite — чтение и запись во все бакеты;
- diagnostics — разрешения на диагностические действия.
Для тестовых сред будет достаточно назначить пользователю политику readwrite:
./mc admin policy attach minio readwrite --user=awscli
В продовых средах могут быть требования к использованию более гибких политик, например, ограничим пользователя awscli только тестовым бакетом.
Создадим файл политики policy-test-bucket-only.json и заполним его содержимым:
{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Action":["s3:GetObject","s3:PutObject","s3:DeleteObject","s3:ListBucket"],"Resource":["arn:aws:s3:::my-test-bucket","arn:aws:s3:::my-test-bucket/*"]}]}
*готовый файл в более читаемом виде также доступен в tg
Загрузим политику и назначим её пользователю:
./mc admin policy create minio policy-test-bucket-only ./policy-test-bucket-only.json
./mc admin policy attach minio policy-test-bucket-only --user=awscli
Если сторонние программы не хотят работать с хранилищем
Для проверки настроек и доступности s3 можно воспользоваться утилитой awscli:
sudo apt update && sudo apt install awscli
Подключение
Создадим профиль подключения:
aws configure --profile minio
*заполнение региона и формата вывода можно пропустить
Убедимся, что awscli видно только тестовый бакет:
aws --profile minio --endpoint-url https://minio.test.local:9000 s3api list-buckets
*будет работать, если вы применили кастомную политику
Проверка
Запись в бакет:
echo "test data" > testfile.txt
aws --profile minio --endpoint-url https://minio.test.local:9000 s3api put-object --bucket my-test-bucket --key testfile.txt --body testfile.txt
Чтение из бакета:
aws --profile minio --endpoint-url https://minio.test.local:9000 s3api get-object --bucket my-test-bucket --key testfile.txt downloaded_testfile.txt
cat downloaded_testfile.txt
Заключение
На этом установка и начальная настройка MinIO завершена.
Если статья была полезна — ставьте лайк или подписывайтесь на канал, чтобы чаще видеть в ленте подобный контент. Всем добра!)