Установка и запуск сервиса S3 MinIO на Linux

Обновлено и опубликовано Опубликовано:

Используемые термины: MinIOLinux.

В инструкции мы рассмотрим базовые действия для развертывания собственного хранилища, доступного по S3. Установка будет выполняться путем загрузки и установки бинарного файла. Мы получим:

  • Веб-интерфейс для управления MinIO.
  • Хранилище, доступное по S3 (через HTTP API).
  • Сервис для автозапуска MinIO с помощью systemd.

Руководство подойдет для Linux RPM (Rocky, РЕД ОС, CentOS) и DEB (Debian, Ubuntu, Astra Linux).

Предварительная настройка

Выполним несколько подготовительных действий для корректной работы сервера.

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.

Пробуем пройти аутентификацию, введя логин и пароль minioadminminioadmin.

Рекомендуется изменить пароль 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.

# DevOps # Linux # Серверы
Дмитрий Моск — частный мастер
Была ли полезна вам эта инструкция?

Да            Нет