Установка и запуск сервиса S3 MinIO на Linux
Обновлено:
Опубликовано:
Используемые термины: MinIO, Linux.
В инструкции мы рассмотрим базовые действия для развертывания собственного хранилища, доступного по S3. Установка будет выполняться путем загрузки и установки бинарного файла. Мы получим:
- Веб-интерфейс для управления MinIO.
- Хранилище, доступное по S3 (через HTTP API).
- Сервис для автозапуска MinIO с помощью systemd.
Руководство подойдет для Linux RPM (Rocky, РЕД ОС, CentOS) и DEB (Debian, Ubuntu, Astra Linux).
Подготовка сервера к настройке
Установка и запуск сервера MinIO
Настройка автозапуска MinIO через systemd
Обратное проксирование с помощью веб-сервера nginx
Управление minio из командной строки с помощью утилиты mc
Предварительная настройка
Выполним несколько подготовительных действий для корректной работы сервера.
1. Время
Для корректного отображения атрибутов создаваемых файлов, настроим время и его синхронизацию.
Задаем часовой пояс:
timedatectl set-timezone Europe/Moscow
* В данном примере мы задаем зону по московскому времени.
Список всех доступных зон можно посмотреть командой:
timedatectl list-timezones
Если мы увидим только одну зону UTC, скорее всего, у нас установлена минимальная версия Ubuntu. Для установки всех зон вводим:
apt install tzdata
Устанавливаем утилиту для синхронизации времени, разрешаем запуск демона и стартуем его.
а) если на системе DEB (Astra Linux / Ubuntu / Debian):
apt install chrony
б) если на системе RPM (Rocky Linux / CentOS / РЕД ОС):
dnf install chrony
systemctl enable chronyd --now
2. Настройка брандмауэра
Для полноценной работы MinIO нам нужно будет открыть 2 порта:
- 9000 — для запросов по API. К нему подключаемся для доступа к бакетам по S3.
- 9001 — управление хранилищем по HTTP.
В зависимости от Linux, у нас могут использоваться различные утилиты управления фаерволом. Рассмотрим наиболее популярные iptables и firewalld.
а) iptables (как правило, в системах на базе DEB):
iptables -I INPUT -p tcp --dport 9000 -j ACCEPT
iptables -I INPUT -p tcp --dport 9001 -j ACCEPT
Для сохранения правил можно использовать утилиту iptables-persistent:
apt install iptables-persistent
netfilter-persistent save
б) firewalld (как правило, в системах на базе RPM):
firewall-cmd --permanent --add-port=9000/tcp
firewall-cmd --permanent --add-port=9001/tcp
firewall-cmd --reload
3. Обновление кэша репозитория и установка пакетов
Для установки актуальных пакетов, кэш репозитория должен быть обновлен. Также для загрузки бинарного файла нам нужна утилита curl. В зависимости от Linux, наши команды будут отличаться:
а) DEB системы:
apt update
apt install curl
б) RPM системы:
dnf install curl
Мы готовы приступить к установке и настройке сервера MinIO.
Установка и запуск MinIO
Скачиваем бинарный файл:
curl -sL https://dl.min.io/server/minio/release/linux-amd64/archive/minio.RELEASE.2025-04-22T22-12-26Z -o minio
Обратите внимание, что мы скачиваем не последней версии minio. В последней версии урезаны функциональные возможности. Но если требуется, именно, эта версия, то скачиваем ее командой:
curl -sLO https://dl.min.io/server/minio/release/linux-amd64/minio
Даем ему права на выполнение:
chmod +x minio
Перемещаем скачанный minio в каталог /usr/bin:
mv minio /usr/bin/
Создаем пользователя, от которого будет запускаться и работать сервис:
useradd minio -r
* в данном случае это сервисная учетная запись с именем minio.
Создаем каталог, где будут храниться данные на сервере:
mkdir -p /var/lib/minio/data
Назначаем в качестве владельца этой папки созданного пользователя:
chown -R minio:minio /var/lib/minio
Делаем пробный запуск:
sudo -u minio minio server --address ':9000' --console-address ':9001' /var/lib/minio/data
Приложение должно запуститься, а мы можем открыть браузер и перейти на страницу http://<IP-адрес сервера>:9001 — откроется панель управления хранилищем S3.
Пробуем пройти аутентификацию, введя логин и пароль minioadmin / minioadmin.
На этом пока можно завершить тестирование и прервать работу приложения, введя в консоли комбинацию CTRL + C.
Настроим автоматический запуск minio в качестве сервиса.
Настройка systemd
На предыдущем шаге мы убедились в работе сервера minio. Теперь настроим, чтобы он автоматически запускался при старте системы.
Для этого создаем юнит в systemd:
vi /usr/lib/systemd/system/minio.service
[Unit]
Description=Service Minio S3
After=network.target
[Service]
User=minio
Group=minio
Type=simple
Environment=MINIO_ROOT_USER=admin
Environment=MINIO_ROOT_PASSWORD=admin123
ExecStart=/usr/bin/minio server --address ':9000' --console-address ':9001' /var/lib/minio/data
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
* обратите внимание, что мы указываем логин/пароль, порты, на которых будет слушать сервис, а также путь хранения данных.
Разрешаем автозапуск сервиса и сразу стартуем его:
systemctl enable minio --now
Посмотреть статус можно командой:
systemctl status minio
Сервис готов к работе.
Обратный прокси через NGINX
С помощью веб-сервера, в нашем примере nginx, можно настроить возможность обращаться к хранилищу S3 с использованием красивых URL.
На официальном сайте есть инструкция по настройке обратного прокси, но она, на момент обновления инструкции, не до конца работала, поэтому на ее основе написана данная часть инструкции.
Будет необходимо, чтобы API часть и страница управления хранилищем работали на отдельных доменных именах, предположим, это:
- minio-api.dmosk.local
- minio-ui.dmosk.local
Приступим. Устанавливаем nginx. В зависимости от системы команды будут разные.
а) DEB системы:
apt install nginx
б) RPM системы:
dnf install nginx
После установки разрешим автозапуск сервиса.
Вводим команду:
systemctl enable nginx --now
Создадим конфигурационный файл:
vi /etc/nginx/sites-enabled/minio.conf
server {
listen 80;
server_name minio-api.dmosk.local;
ignore_invalid_headers off;
client_max_body_size 0;
proxy_buffering off;
proxy_request_buffering off;
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_connect_timeout 300;
proxy_http_version 1.1;
proxy_set_header Connection "";
chunked_transfer_encoding off;
proxy_pass http://127.0.0.1:9000;
}
}
server {
listen 80;
server_name minio-ui.dmosk.local;
ignore_invalid_headers off;
client_max_body_size 0;
proxy_buffering off;
proxy_request_buffering off;
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-NginX-Proxy true;
real_ip_header X-Real-IP;
proxy_connect_timeout 300;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
chunked_transfer_encoding off;
proxy_pass http://127.0.0.1:9001;
}
}
* обратите внимание на значения опций server_name и proxy_pass. Они, соответственно, отвечают за адрес, на котором слушает виртуальный каталог и на какой адрес будет перенаправляться запрос.
Проверяем корректность конфигурации nginx и перечитываем ее:
nginx -t && nginx -s reload
Теперь можно протестировать подключения, перейдя на адреса S3 — в нашем примере http://minio-api.dmosk.local и http://minio-ui.dmosk.local.
В продуктивной среде рекомендуется использовать https, для которого нужен сертификат. Можно получить бесплатный по инструкции Получение бесплатного SSL сертификата Let's Encrypt.
Утилита MC
Управлять нашем minio из командной строки можно с помощью утилиты mc (MinIO Client). Для его установки достаточно скачать бинарный файл и скопировать его в /usr/local/bin (на любом компьютере, с которого можно подключиться к minio). Для этого выполняем команды:
curl -sL https://dl.min.io/client/mc/release/linux-amd64/mc -o /usr/local/bin/mc
chmod +x /usr/local/bin/mc
Чтобы подключаться к s3 добавим или отредактируем алиас в файле:
vi ~/.mc/config.json
Если мы установили утилиту на тот же сервер, что и minio, достаточно отредактировать подключение:
"local": {
"url": "http://localhost:9000",
"accessKey": "Q3AM3UQ867SPQQA43P2F",
"secretKey": "zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG",
"api": "S3v4",
"path": "auto"
},
* в нашем примере мы добавили токены для аутентификации при подключении к s3.
Теперь мы можем обращаться к хранилищу с помощью созданного в настройке алиаса:
mc ls local
Получить подробный список возможностей утилиты можно командой:
mc --help
Приведем немного примеров
1. Посмотреть список бакетов в хранилище:
mc ls local
2. Разрешить анонимный доступ на скачивание файлов из указанного бакета MinIO:
mc anonymous set download local/my-bucket