﻿# MinIO (S3)

> [HTML Version](configure-minio.html)

В этой статье рассматривается пример развёртывания MinIO в качестве объектного хранилища S3 для программного комплекса ELMA365. Статья охватывает развёртывание MinIO в конфигурации с одним узлом и одним диском (SNSD). Развёртывание SNSD не обеспечивает дополнительной надёжности или доступности, помимо того, что реализовано в базовом томе хранилища (RAID, LVM, ZFS и т. д.). Вы также можете ознакомиться с руководством в [официальной документации MinIO](https://min.io/docs/minio/linux/operations/install-deploy-manage/deploy-minio-single-node-single-drive.html#minio-snsd).

````
Начало внимание

````
Рекомендуем использовать решение [SeaweedFS](seaweedfs.md) в качестве S3‑хранилища, т. к. MinIO переведён в режим ограниченной поддержки с декабря 2025 г. Подробнее читайте в [официальной информации от MinIO](https://github.com/minio/minio/commit/27742d469462e1561c776f88ca7a1f26816d69e2).

````
Конец внимание

````


Перед установкой объектного S3-хранилища оцените планируемую нагрузку. При больших объёмах данных рекомендуется устанавливать его на отдельной виртуальной машине. Это позволит избежать конкуренции за ресурсы и обеспечить стабильную работу системы ELMA365. Подробнее о вариантах организации инфраструктуры читайте в статьях [«ELMA365 On-Premises Standard»](elma365-on-premises-standard.md) и [«ELMA365 On-Premises Enterprise»](elma365-enterprise.md).

Установка состоит из нескольких этапов:

1. [Подготовка диска](#prepare-disk).

2. [Установка MinIO](#install-minio).

3. [Установка MinIO Client](#install-min-client).

4. [Создание пользователя и группы minio-user](#create-user-and-group-minio-user).

5. [Создание файла сервиса для systemd](#create-service-file).

6. [Создание файла окружения для MinIO](#create-environment-file).

7. [Запуск сервиса MinIO](#start-service).

8. [Настройка подключения к MinIO](#connection-setup).

9. [Создание бакета](#create-bucket).

10. [Настройка CORS](#cors).

11. [Подключение к MinIO](#connection-to-minio).

## Шаг 1. Подготовка диска 

1. Создайте каталог для монтирования диска:

````
sudo mkdir -p /var/lib/minio/data1

````
Чтобы обеспечить лучшую производительность, рекомендуется использовать файловую систему XFS. Для примера подключаемого диска выбрать диск **/dev/sdb**.

2. Подготовьте на диске файловую систему XFS:

````
sudo mkfs.xfs /dev/sdb -L DISK1

3. ````
Добавьте точку монтирования диска в файле \[OBJECT\]:

````
LABEL=DISK1 /var/lib/minio/data1 xfs defaults,noatime 0 2

4. ````
Проверьте монтирование ранее подготовленного диска:

````
sudo mount -av

## ````
Шаг 2. Установка MinIO

Загрузите последний стабильный binary-файл MinIO и установите его в систему:

````
wget https://dl.min.io/server/minio/release/linux-amd64/minio  
chmod +x minio  
sudo mv minio /usr/local/bin/

## ````
Шаг 3. Установка MinIO Client

Загрузите последний стабильный binary-файл [MinIO Client](https://min.io/docs/minio/linux/reference/minio-mc.html) и установите его в систему:

````
wget https://dl.min.io/client/mc/release/linux-amd64/mc  
chmod +x mc  
sudo mv mc /usr/local/bin/

## ````
Шаг 4. Создание пользователя и группы minio-user

1. Cоздайте пользователя и группу **minio-user**:

````
sudo groupadd -r minio-user  
sudo useradd -M -r -g minio-user minio-user  
sudo chown minio-user:minio-user /var/lib/minio/data1

2. ````
Создайте директории для хранения TLS-сертификатов, выполнив команду:

````
sudo mkdir -p /etc/minio/certs/CAs

3. ````
Задайте разрешения на доступ к каталогам, предназначенным для использования в MinIO:

````
sudo chown -R minio-user:minio-user /etc/minio  
sudo chown -R minio-user:minio-user /var/lib/minio

## ````
Шаг 5. Создание файла сервиса для systemd

1. Загрузите официальный файл сервиса MinIO:

````
sudo curl -O https://raw.githubusercontent.com/minio/minio-service/master/linux-systemd/minio.service

2. ````
Проверьте содержимое \[OBJECT\] перед его использованием и переместите этот файл в каталог конфигурации \[OBJECT\]:

````
sudo mv minio.service /etc/systemd/system

начало внимание

````
На этом шаге не запускайте \[OBJECT\].

````
конец внимание 

## ````
Шаг 6. Создание файла окружения для MinIO

Создайте файл окружения в \[OBJECT\]. Служба MinIO использует этот файл в качестве источника всех переменных окружения, используемых MinIO и файлом \[OBJECT\].

Пример файла окружения в** **\[OBJECT\]:

````
\# Set the hosts and volumes MinIO uses at startup  
\# The command uses MinIO expansion notation \{x...y\} to denote a  
\# sequential series.  
  
\# The following example covers four MinIO hosts  
\# with4 drives each at the specified hostname and drive locations.  
\# The command includes the port that each MinIO server listens on  
\# (default 9000)  
  
MINIO\_VOLUMES="/var/lib/minio/data1/minio"  
  
\# Set all MinIO server options  
  
\# The following explicitly sets the MinIO Console listen address to  
\# port 9001 on all network interfaces. The default behavior is dynamic  
\# port selection.  
  
MINIO\_OPTS="--certs-dir /etc/minio/certs --console-address :9001"  
  
MINIO\_REGION="ru-central-1"  
  
\# Set the root username. This user has unrestricted permissions to  
\# perform S3 and administrative API operations on any resource in the  
\# deployment.  
  
\# Defer to your organizations requirements for superadmin user name.  
  
MINIO\_ROOT\_USER=elma365user  
  
\# Set the root password  
  
\# Use a long, random, unique string that meets your organizations  
\# requirements for passwords.  
  
MINIO\_ROOT\_PASSWORD=SecretPassword  
  
\# Set to the URL of the load balancer for the MinIO deployment  
\# This value \*must\* match across all MinIO servers. If you do  
\# not have a load balancer, set this value to to any \*one\* of the  
\# MinIO hosts in the deployment as a temporary measure.  
  
\# MINIO\_SERVER\_URL="https://minio.example:9000"

````
Где:

- \[OBJECT\] — каталог, в котором будут размещаться загруженные в S3 файлы; 

- \[OBJECT\] — имя пользователя-администратора MinIO;

- \[OBJECT\] — пароль, рекомендуется использовать не менее 16 символов.

Настройка включения TLS в MinIO

  
Чтобы включить поддержку TLS в MinIO:

1. Положите файл сертификата и файл закрытого ключа в каталог \[OBJECT\].

2. Переименуйте файл сертификата сервера в \[OBJECT\].

3. Переименуйте файл закрытого ключа в \[OBJECT\].

4. При использовании самоподписанных сертификатов положите файл корневого CA в каталог \[OBJECT\].

Подробнее о настройке TLS в MinIO читайте в [официальной документации MinIO](https://min.io/docs/minio/linux/operations/network-encryption.html). 

## Шаг 7. Запуск сервиса MinIO

1. Выполните следующие команды, чтобы запустить службу MinIO:

````
sudo systemctl daemon-reload  
sudo systemctl enable minio.service  
sudo systemctl start minio.service

2. ````
Убедитесь в том, что сервис minio запустился и работает без ошибок:

````
sudo systemctl status minio.service  
journalctl -f -u minio.service

## ````
Шаг 8. Настройка подключения к MinIO

Создайте \[OBJECT\] для minio:

````
/usr/local/bin/mc alias set minio http://minio.your\_domain:9000 elma365user SecretPassword

## ````
Шаг 9. Создание бакета

**Важно**: наименование бакета в S3 должно соответствовать формату \[OBJECT\]. Для примера в статье используется имя бакета **s3elma365**, пользователь **elma365user** и пароль **SecretPassword**. При настройке задайте эти данные согласно политике безопасности, принятой в вашей организации.

Примеры наименований для бакетов: \[OBJECT\], \[OBJECT\], \[OBJECT\].

Чтобы создать для работы ELMA365 бакет c наименованием \[OBJECT\], используйте команду:

````
/usr/local/bin/mc mb -p minio/s3elma365 --region=ru-central-1

````
Создание в S3 бакетов для работы ELMA Bot

  
Если вы планируете использовать [ELMA Bot](elma-bot.md), создайте бакеты:

- \[OBJECT\];

- \[OBJECT\];

- \[OBJECT\].

Для создания бакетов выполните следующие команды:

````
  
/usr/local/bin/mc mb -p minio/s3elmabot --region=ru-central-1  
/usr/local/bin/mc mb -p minio/elmabot-temporary-files --region=ru-central-1  
/usr/local/bin/mc mb -p minio/elmabot-static-files --region=ru-central-1 
````

## ````
Шаг 10. Настройка CORS

**Cross-Origin Resource Sharing (CORS)** — это инструмент, с помощью которого ограничивается доступ к ресурсам веб-приложения из сторонних доменов. Вы можете определить список доменов, с которых разрешено направлять запросы к приложению ELMA365, а также указать доступные заголовки и методы HTTP. 

Настройте CORS одним из способов:

1. [С помощью файла с конфигурацией CORS](#cors-file).

2. [Через веб-интерфейс сервиса для управления данными](#cors-via-service), например Yandex Object Storage.

### Задать настройки CORS в конфигурационном файле

1. Создайте файл \[OBJECT\] с конфигурацией CORS, например:

````
<?xml version="1.0" encoding="UTF-8"?>  
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">  
<CORSRule>  
<AllowedHeader>\*</AllowedHeader>  
<AllowedMethod>GET</AllowedMethod>  
<AllowedMethod>PUT</AllowedMethod>  
<AllowedMethod>HEAD</AllowedMethod>  
<AllowedMethod>POST</AllowedMethod>  
<AllowedMethod>DELETE</AllowedMethod>  
<AllowedOrigin>https://\*.elma365.ru</AllowedOrigin>  
<MaxAgeSeconds>3000</MaxAgeSeconds>  
</CORSRule>  
</CORSConfiguration>

````
Где: 

- \[OBJECT\] — заголовки, которые доступны в запросах. Чтобы разрешить все заголовки, используйте символ \[OBJECT\];

- \[OBJECT\] — разрешённые методы HTTP, например \[OBJECT\], \[OBJECT\], \[OBJECT\], \[OBJECT\], \[OBJECT\];

- \[OBJECT\] — источники, из которых можно обращаться к ресурсам веб-приложения. Чтобы разрешить доступ с любых доменов, используйте символ \[OBJECT\]. Для повышения безопасности рекомендуется указать определённые домены, например **https://\*.elma365.ru**;

- \[OBJECT\] — для уменьшения количества запросов и улучшения производительности можно сохранять в кеше браузера разрешение на запросы из определённого источника. Оно проверяется в предварительном запросе, который выполняется перед основным. Укажите время в секундах, в течение которого разрешение хранится в кеше и новые предварительные запросы не отправляются.

Вы также можете задать в конфигурации CORS параметр \[OBJECT\]. В нём определяются заголовки, которые отображаются в ответах на запросы. Не указывайте этот параметр в **.xml**-файле, если заголовки в ответах показывать не нужно.

2. Примените настройки CORS к бакету с помощью команды:

````
/usr/local/bin/mc cors set minio/s3elma365 cors.xml

3. ````
Убедитесь, что настройки CORS применены правильно, выполнив команду:

````
/usr/local/bin/mc cors get minio/s3elma365 --json

### ````
Задать конфигурацию CORS через сервис управления данными

Вы можете настроить CORS через веб-интерфейс сервиса для управления данными.

Пример заполнения параметров CORS в Yandex Object Storage:

**(configure-minio-1.png)**

Подробнее о том, как настроить CORS читайте в [официальной документации Yandex Cloud](https://yandex.cloud/ru/docs/storage/operations/buckets/cors).

## Шаг 11. Подключение к MinIO

Параметры для подключения к MinIO:

- **address** — \[OBJECT\];

- **bucket** — \[OBJECT\];

- **region** — \[OBJECT\];

- **access key ID** — \[OBJECT\];

- **secret access key** — \[OBJECT\];

- **upload method** — \[OBJECT\];

- **enable SSL** — \[OBJECT\].

Если MinIO ожидает подключение с использованием TLS, установите в параметре **enable SSL** значение \[OBJECT\].