Установка и запуск сервиса 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
Предварительная настройка
Выполним несколько подготовительных действий для корректной работы сервера.
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 -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.
Рекомендуется изменить пароль 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
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.