Гид по технологиям

Установка и защита MinIO на Ubuntu 20.04

• 9 min read • Инфраструктура • Обновлено 26 Nov 2025
MinIO на Ubuntu 20.04 — установка и SSL
MinIO на Ubuntu 20.04 — установка и SSL

MinIO — совместимый с S3 объектный хранилище, которое легко развернуть на Ubuntu 20.04. В этой инструкции шаг за шагом показано, как установить сервер MinIO, подготовить диск, настроить системный сервис, получить сертификат Let’s Encrypt, подключить клиент mc и обеспечить базовую безопасность и эксплуатацию.

Введение

Схема объектного хранилища

Объектное хранилище — это способ сохранения и извлечения неструктурированных блобов данных и метаданных через HTTP API. В отличие от классического хранения файлов, где данные разбиваются на блоки и помещаются в файловую систему, здесь мы работаем с целыми объектами, которые хранятся и обслуживаются по сети. Объект может быть изображением, видео, логом, HTML-файлом, бэкапом, образом контейнера или любым самостоятельным бинарным блоком. Объекты называют неструктурированными, потому что они не подчинены единой схеме или формату.

MinIO — популярный open-source сервер для объектного хранения, совместимый с Amazon S3. Он написан на Go, распространяется как кроссплатформенный бинарный файл, имеет клиентские утилиты и веб-интерфейс. В этом руководстве вы установите MinIO на Ubuntu 20.04, защитите доступ сертификатом от Let’s Encrypt и подключитесь к серверу с помощью командного клиента.

Важно. В примерах используется домен minio.example.com и порты по умолчанию 9000 (API) и 9001 (консоль). Перед началом замените домен и IP на реальные значения вашей инфраструктуры.

Основные понятия в одну строку

  • Объект: самостоятельный бинарный файл + метаданные.
  • Bucket (корзина): логическая коллекция объектов в MinIO.
  • mc: клиент командной строки для MinIO.
  • Консоль: веб-интерфейс управления MinIO (порт 9001).

Содержание

  • Предварительные требования
  • Шаг 1 — Установка MinIO
  • Шаг 2 — Подготовка диска для хранения
  • Шаг 3 — Конфигурация MinIO
  • Шаг 4 — Установка systemd-сервиса
  • Шаг 5 — Запуск сервера MinIO
  • Шаг 6 — Настройка SSL от Let’s Encrypt
  • Шаг 7 — Работа с консолью и создание бакетов
  • Шаг 8 — Установка клиента mc и базовые команды
  • Безопасность и hardening
  • Резервное копирование и мониторинг
  • Критерии приёмки
  • Руководства и чек-листы для ролей
  • Три распространённых проблемы и устранение
  • Когда MinIO не подходит и альтернативы
  • FAQ
  • Итог

Предварительные требования

  • Сервер с Ubuntu 20.04 с пользователем, имеющим sudo-привилегии (не запускать MinIO под root).
  • Доменное имя, указывающее на сервер, например minio.example.com.
  • Дополнительный Ubuntu 20.04 для клиента (или рабочая станция с доступом к сети).
  • Обновлённая система:
$ sudo apt update
  • Установленные утилиты (если некоторых нет, установите):
$ sudo apt install wget curl nano ufw software-properties-common apt-transport-https ca-certificates -y

Некоторые пакеты могут быть уже установлены на вашей системе.

Шаг 1 — Установка MinIO

MinIO поставляется как один исполняемый файл. Скачайте бинарник с официального сайта:

$ wget https://dl.min.io/server/minio/release/linux-amd64/minio

Сделайте файл исполняемым:

$ chmod +x minio

Переместите бинарник в системный каталог:

$ sudo mv minio /usr/local/bin

Проверьте установку:

$ minio --version
minio version RELEASE.2022-01-28T02-28-16Z

Если версия отображается — установка прошла успешно.

Шаг 2 — Подготовка диска для хранения

Для объектного хранилища рекомендуется выделить отдельный блочный диск или раздел. В примере используется второй диск /dev/sdb и точка монтирования /data.

Посмотрите список блочных устройств:

$ lsblk
NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda      8:0    0  50G  0 disk
??sda1   8:1    0  50G  0 part /
sdb      8:16   0  50G  0 disk

Установите parted для работы с разделами:

$ sudo apt install parted

Создайте GPT-таблицу и один раздел на /dev/sdb, отформатируйте ext4 и добавьте в /etc/fstab:

$ sudo parted -s -a optimal -- /dev/sdb mklabel gpt
$ sudo parted -s -a optimal -- /dev/sdb mkpart primary 0% 100%
$ sudo parted -s -- /dev/sdb align-check optimal 1
$ sudo mkfs.ext4 /dev/sdb1
$ echo "/dev/sdb1 /data ext4 defaults 0 0" | sudo tee -a /etc/fstab
$ sudo mkdir /data
$ sudo mount -a

Совет. Для production окружений рассмотрите RAID, LVM или сетевые тома (EBS, Cinder) с репликацией, чтобы исключить единичную точку отказа.

Шаг 3 — Конфигурация MinIO

MinIO не должен работать под root-пользователем. Создадим системного пользователя minio-user:

$ sudo useradd -r minio-user -s /sbin/nologin

Изменим владельца бинарника и каталога данных:

$ sudo chown minio-user:minio-user /usr/local/bin/minio
$ sudo chown minio-user:minio-user /data -R

Создайте каталог для конфигурации:

$ sudo mkdir /etc/minio
$ sudo chown minio-user:minio-user /etc/minio

Создайте файл окружения /etc/default/minio и добавьте переменные по умолчанию:

$ sudo nano /etc/default/minio

Вставьте:

MINIO_ROOT_USER="minio"
MINIO_VOLUMES="/data"
MINIO_OPTS="-C /etc/minio --address your_server_ip:9000 --console-address :9001"
MINIO_ROOT_PASSWORD="miniostorage"

Пояснения:

  • MINIO_ROOT_USER: access key (минимум 3 символа).
  • MINIO_VOLUMES: директория(и) с данными.
  • MINIO_OPTS: дополнительные опции сервера; замените your_server_ip на IP сервера или оставьте пустым, если хотите биндинг на все адреса.
  • MINIO_ROOT_PASSWORD: секретный ключ (минимум 8 символов). Используйте сложный пароль или интеграцию с секретным хранилищем.

Сохраните файл (Ctrl+X, Y).

Важно. Не храните пароли в открытом виде в общедоступных репозиториях. Для production используйте HashiCorp Vault или KMS.

Шаг 4 — Установка systemd-сервиса

Скачайте готовый unit-файл:

$ curl -O https://raw.githubusercontent.com/minio/minio-service/master/linux-systemd/minio.service

Откройте и проверьте содержимое:

$ nano minio.service

Содержимое (проверьте перед применением):

[Unit]
Description=MinIO
Documentation=https://docs.min.io
Wants=network-online.target
After=network-online.target
AssertFileIsExecutable=/usr/local/bin/minio

[Service]
WorkingDirectory=/usr/local/

User=minio-user
Group=minio-user
ProtectProc=invisible

EnvironmentFile=/etc/default/minio
ExecStartPre=/bin/bash -c "if [ -z \"${MINIO_VOLUMES}\" ]; then echo \"Variable MINIO_VOLUMES not set in /etc/default/minio\"; exit 1; fi"
ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES

# Let systemd restart this service always
Restart=always

# Specifies the maximum file descriptor number that can be opened by this process
LimitNOFILE=1048576

# Specifies the maximum number of threads this process can create
TasksMax=infinity

# Disable timeout logic and wait until process is stopped
TimeoutStopSec=infinity
SendSIGKILL=no

[Install]
WantedBy=multi-user.target

# Built for ${project.name}-${project.version} (${project.name})

Переместите файл и перезагрузите демон systemd:

$ sudo mv minio.service /etc/systemd/system
$ sudo systemctl daemon-reload
$ sudo systemctl enable minio

Шаг 5 — Запуск сервера MinIO

Запустите сервис и проверьте статус:

$ sudo systemctl start minio
$ sudo systemctl status minio

Пример вывода статуса показывает, что MinIO активен и использует /data:

? minio.service - MinIO
     Loaded: loaded (/etc/systemd/system/minio.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2022-02-01 13:30:44 UTC; 5s ago
       Docs: https://docs.min.io
   Main PID: 26076 (minio)
      Tasks: 6
     Memory: 55.3M
     CGroup: /system.slice/minio.service
             ??26076 /usr/local/bin/minio server -C /etc/minio --address 209.208.26.129:9000 --console-address :9001 /data

Откройте порты в UFW (если включён):

$ sudo ufw allow 9000
$ sudo ufw allow 9001
$ sudo ufw enable

Затем откройте в браузере http://your_server_ip:9001, чтобы увидеть веб-консоль.

Вход в веб-консоль MinIO

Шаг 6 — Защита MinIO с помощью SSL

Для работы по HTTPS используем бесплатные сертификаты Let’s Encrypt и certbot. Установим snapd и certbot:

$ sudo apt install snapd
$ sudo snap install core
$ sudo snap refresh core
$ sudo snap install --classic certbot
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Получим сертификат в standalone-режиме (порт 80 должен быть доступен):

$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d minio.example.com

Сертификаты будут в /etc/letsencrypt/live/minio.example.com. Копируем приватный и публичный ключи в /etc/minio/certs и устанавливаем владельца:

$ sudo mkdir -p /etc/minio/certs
$ sudo cp /etc/letsencrypt/live/minio.example.com/privkey.pem /etc/minio/certs/private.key
$ sudo cp /etc/letsencrypt/live/minio.example.com/fullchain.pem /etc/minio/certs/public.crt
$ sudo chown minio-user:minio-user /etc/minio/certs/private.key
$ sudo chown minio-user:minio-user /etc/minio/certs/public.crt

Разрешите HTTP/HTTPS в файрволе:

$ sudo ufw allow 80
$ sudo ufw allow 443

Добавьте URL сервера в /etc/default/minio:

$ sudo nano /etc/default/minio

И в конец добавьте:

MINIO_SERVER_URL="https://minio.example.com:9000"

Перезапустите сервис:

$ sudo systemctl restart minio

Теперь консоль доступна по https://minio.example.com:9001.

Шаг 7 — Подключение к консоли и создание бакетов

Войдите в веб-консоль, используя MINIO_ROOT_USER и MINIO_ROOT_PASSWORD. После входа вы увидите панель управления.

Панель MinIO

Нажмите Create Bucket, чтобы создать первый бакет.

Создать бакет MinIO

Если MinIO запущен на одном диске, некоторые возможности кластера недоступны. Введите имя бакета и нажмите Create Bucket. После создания вы увидите список бакетов.

Список бакетов MinIO

Для загрузки файлов нажмите Browse, затем Upload Files и выберите файлы на вашей машине.

Обзор бакетов MinIO

Загрузка файлов

После загрузки очистите очередь загрузки, если нужно.

Очистка очереди загрузки

Теперь у вас есть бакет и загруженные объекты.

Шаг 8 — Установка клиента mc и доступ к файлам

На отдельной машине скачайте mc (MinIO Client):

$ wget https://dl.min.io/client/mc/release/linux-amd64/mc
$ chmod +x mc
$ sudo mv mc /usr/local/bin
$ mc --version
mc version RELEASE.2022-02-02T02-03-24Z

Добавьте алиас для сервера:

$ mc alias set howtoforge https://minio.example.com:9000 minio miniostorage

Пример вывода при успешной настройке:

mc: Configuration written to `/home//.mc/config.json`. Please update your access credentials.
Added `howtoforge` successfully.

Проверка состояния сервера:

$ mc admin info howtoforge
?  minio.example.com:9000
   Uptime: 2 minutes
   Version: 2022-01-28T02:28:16Z
   Network: 1/1 OK

9.6 MiB Used, 1 Bucket, 5 Objects

Список бакетов:

$ mc ls howtoforge
[2022-02-01 16:59:46 UTC]     0B howtoforge/

Список объектов в бакете:

$ mc ls howtoforge/howtoforge
[2022-02-02 05:32:28 UTC] 2.9MiB STANDARD IMG_20160717_184947_HDR.jpg
[2022-02-02 05:32:00 UTC] 2.2MiB STANDARD IMG_20160903_220639_HDR.jpg
[2022-02-02 05:28:25 UTC] 2.4MiB STANDARD IMG_20161006_213936_HDR.jpg
[2022-02-02 05:28:07 UTC] 2.2MiB STANDARD IMG_20161015_194409_HDR.jpg
[2022-02-02 03:33:28 UTC]  25KiB STANDARD quarantine.jpg

Создание нового бакета и загрузка файла:

$ mc mb howtoforge/bucket2
$ touch test.txt
$ mc cp test.txt howtoforge/bucket2
$ mc ls howtoforge/bucket2
[2022-02-02 07:06:44 UTC]     0B STANDARD test.txt

Вы можете просмотреть справку по mc:

$ mc --help

Безопасность и hardening

Ключевые меры для повышения безопасности MinIO:

  • Используйте TLS везде. Сертификаты должны быть валидными и автоматически обновляться (Certbot, ACME).
  • Не храните root-пароли в открытом виде. Интегрируйте с секретным хранилищем или системой управления ключами.
  • Настройте межсетевой экран и доступ по IP/cidr только для доверенных хостов.
  • В production используйте TLS-терминацию на обратном прокси (Nginx/HAProxy) с дополнительными проверками и rate-limiting.
  • Регулярно обновляйте MinIO и mc до актуальных релизов.
  • Включите аудит и логирование — MinIO поддерживает события и нотификации (Kafka, NATS, webhook).
  • Ограничьте права пользователя, используйте IAM-политики MinIO или интеграцию с внешним провайдером аутентификации.
  • Защитите приватные ключи и сертификаты через права доступа и SELinux/AppArmor при возможности.

Пример конфигурации обратного прокси на nginx (основы):

server {
    listen 443 ssl http2;
    server_name minio.example.com;

    ssl_certificate /etc/letsencrypt/live/minio.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/minio.example.com/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:9000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

Примечание. Если вы используете прокси, корректно настройте MINIO_SERVER_URL и прокидывайте заголовки.

Резервное копирование и мониторинг

Рекомендации:

  • Регулярно синхронизируйте важные бакеты в удалённое хранилище (mc mirror, cron, репликация на уровне сервера).
  • Настройте мониторинг метрик MinIO (Prometheus экспортёр) и оповещения при превышении SLO/threshold.
  • Периодическое тестирование восстановления (restore) — проверяйте процедуру резервного копирования на избранных файлах.

Пример команды синхронизации локального бакета с удалённым:

$ mc mirror /local/path howtoforge/backup-bucket

Критерии приёмки

  • MinIO сервис запущен и активен: systemctl status minio -> active (running).
  • Консоль доступна по HTTPS: https://minio.example.com:9001.
  • Mc может подключиться и аутентифицироваться: mc ls howtoforge возвращает список бакетов.
  • Сертификат валиден и не вызывает предупреждений браузера.
  • Каталог данных /data корректно смонтирован и принадлежит minio-user.

Руководства и чек-листы для ролей

Администратор системы — чек-лист при развертывании:

  • Подготовить сервер и сеть, установить Ubuntu 20.04.
  • Закупить/подключить дополнительный диск для хранения данных.
  • Установить MinIO и настроить systemd unit.
  • Настроить TLS и автоматическое обновление сертификатов.
  • Настроить мониторинг и бэкапы.
  • Провести тесты производительности и восстановления.

DevOps — оперативный чек-лист для деплоймента:

  • Автоматизировать установку через Ansible/Terraform.
  • Интегрировать секреты в Vault.
  • Настроить CI/CD для обновлений MinIO и mc.

Оператор — runbook при инциденте:

  • Шаг 1: Проверить статус systemd: sudo systemctl status minio.
  • Шаг 2: Посмотреть логи: sudo journalctl -u minio -n 200.
  • Шаг 3: Проверить диск: df -h /data, lsblk.
  • Шаг 4: Если сертификат истёк, обновить certbot: sudo certbot renew и перезапустить minio.
  • Шаг 5: При проблемах с доступом — временно включить debug в mc (mc –debug).

Три распространённых проблемы и их решения

  1. MinIO не запускается: проверьте права на /etc/minio и /data; убедитесь, что MINIO_VOLUMES задан.

  2. Сертификат Let’s Encrypt не получается получить: проверьте, доступен ли порт 80 (firewall), и что DNS A/AAAA указывает на ваш сервер.

  3. Клиент mc не может подключиться по HTTPS: используйте флаг –insecure для отладки, но в production устраняйте проблему с сертификатом.

Когда MinIO не подходит и альтернативы

MinIO хорошо подходит для объектного хранения в случаях, когда нужна совместимость с S3 и высокая скорость. Однако бывают сценарии, когда стоит рассмотреть другие варианты:

  • Нужна встроенная многоузловая репликация и автоматическое распределение данных на аппаратном уровне в рамках облачного провайдера — рассмотрите S3, Azure Blob Storage или Google Cloud Storage.
  • Требуется POSIX-совместимая файловая система и операции с блоками — используйте NFS, CephFS или GlusterFS.
  • Нужен единый кластер с глубокой интеграцией в провайдера — лучше использовать managed-решение облачного провайдера.

Сравнение кратко:

  • MinIO: лёгкая установка, S3-совместимость, подходит для self-hosted.
  • Amazon S3: управляемый сервис, масштабируемость, SLA и интеграции.
  • Ceph: глубоко распределённая система, сложнее в эксплуатации, но даёт масштаб и POSIX-интерфейсы.

Мини-методология развертывания

  1. Подготовить инфраструктуру (серверы, диск, DNS).
  2. Автоматически установить MinIO через конфигурационные инструменты.
  3. Настроить TLS и прокси при необходимости.
  4. Настроить бэкапы и мониторинг.
  5. Выполнить тесты работоспособности и восстановления.
  6. Перевести в режим поддержки и обновлений.

Decision flowchart (Mermaid)

flowchart TD
  A[Начало: нужно объектное хранилище?] --> B{Требуется S3-совместимость?}
  B -- Да --> C[Рассмотреть MinIO]
  B -- Нет --> D[Рассмотреть другие решения]
  C --> E{Self-host или managed?}
  E -- Self-host --> F[Развернуть MinIO на Ubuntu]
  E -- Managed --> G[Использовать S3/облачное хранилище]
  F --> H{Нужна TLS?}
  H -- Да --> I[Настроить Certbot/прокси]
  H -- Нет --> J[Рассмотреть риски]
  I --> K[Включить мониторинг и бэкапы]
  K --> L[Готово]

Шаблон проверки приёмки (SOP)

  • Выполнить установку по шагам 1–5.
  • Подтвердить доступность консоли по HTTPS.
  • Создать тестовый бакет и загрузить тестовый файл.
  • Сделать резервную копию данных и восстановить её на тестовом окружении.
  • Выполнить нагрузочное тестирование (простые объекты и параллельные загрузки).

Советы по производительности

  • Для ускорения операций PUT/GET используйте SSD-диски.
  • Разбейте объекты по бакетам и применяйте подходы batched-upload для больших объёмов.
  • Минимизируйте латентность сети между приложениями и MinIO (размещайте в том же регионе/subnet).

Локальные альтернативы и подводные камни

  • При развертывании на виртуальных дисках проверьте IOPS и throughput, чтобы избежать «узкого места».
  • Если используются контейнеры (Docker/Kubernetes), применяйте StatefulSets и PersistentVolumes, а не хостовые тома без репликации.

FAQ

Q: Нужен ли обратный прокси для MinIO?

A: Не обязателен, но обратный прокси (Nginx/HAProxy) позволяет централизовать TLS-терминацию, управление доступом и rate-limiting.

Q: Как автоматизировать обновление сертификатов Let’s Encrypt?

A: Настройте cron job для команды sudo certbot renew и перезагрузки сервиса minio после успешного обновления.

Q: Можно ли использовать MinIO в режиме распределённого кластера?

A: Да, MinIO поддерживает распределённый режим (Erasure Coding), но это требует нескольких хостов/дисков и иной конфигурации, не охваченной в этой инструкции.

Итог

Вы установили MinIO на Ubuntu 20.04, подготовили диск, создали systemd-сервис, настроили TLS через Let’s Encrypt и подключили клиент mc для управления объектами. Дополнительно рассмотрены практики безопасности, резервного копирования, мониторинга, а также чек-листы и runbook для эксплуатации. Следующие шаги: автоматизация развёртывания (Ansible/Terraform), интеграция с секретами и масштабирование в распределённый режим при необходимости.

Если нужны примеры Ansible-плейбуков, конфигурации для k8s или шаблоны для мониторинга Prometheus — напишите задачу, и я подготовлю их.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро