Featured image of post Установка MinIO в Docker

Установка MinIO в Docker

Распределенный кластер S3 для хранения данных

Что такое MinIO, для чего нужен и как его использовать подробно расписал в моём телеграм канале: Поймёт даже новичок. Здесь только практика.

До RELEASE.2025-05-24… консоль в Community Edition включала полный набор функций, включая администрирование пользователей, управление ключами, и т.п.
Начиная с этой версии (24 мая 2025), все административные функции были удалены: осталась только возможность просмотра и управления объектами.
Вся остальная функциональность, особенно админская, теперь требует использования CLI-инструмента mc или перехода на Enterprise Edition

В данном примере настроим Распределенный кластер MinIO. Это режим работы, в котором несколько экземпляров MinIO объединяются в один логический сервер хранения объектов.
Это может быть полезно для повышения производительности и надежности, поскольку рабочая нагрузка может быть распределена по нескольким экземплярам, а данные могут храниться на нескольких дисках или серверах.

Требуемые ресурсы

Созданы и именованы 4 сервера для minio:

1
nano /etc/hosts

В файле hosts каждого сервера, или в DNS записи:

1
2
3
4
5
192.168.10.140 minio-1
192.168.10.141 minio-2
192.168.10.142 minio-3
192.168.10.143 minio-4
192.168.10.139 minio-web

192.168.10.139 minio-web

Это 5-ый сервер для доступа к веб-интерфейсу с Nginx.

На всех серверах устанавливаем: docker, docker-compose

Конфигурация docker-compose

На первом сервере создаём конфигурацию:

1
2
3
4
mkdir /opt/minio
sudo mkdir -p /mnt/minio-data
sudo chown 1000:1000 /mnt/minio-data
nano /opt/minio/docker-compose.yaml

Наполняем:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
services:
  minio-1:
    image: minio/minio:RELEASE.2025-04-22T22-12-26Z
	command: server --console-address ":9001" http://minio-1/data http://minio-2/data http://minio-3/data http://minio-4/data
    environment:
      MINIO_ROOT_USER: admin
      MINIO_ROOT_PASSWORD: SuperSecretPassword #Меняем пароль на свой
    volumes:
      - /mnt/minio-data:/data
    network_mode: host

На втором сервере создаём конфигурацию:

1
2
3
4
mkdir /opt/minio
sudo mkdir -p /mnt/minio-data
sudo chown 1000:1000 /mnt/minio-data
nano /opt/minio/docker-compose.yaml

Наполняем:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
services:
  minio-2:
    image: minio/minio:RELEASE.2025-04-22T22-12-26Z
	command: server --console-address ":9001" http://minio-1/data http://minio-2/data http://minio-3/data http://minio-4/data
    environment:
      MINIO_ROOT_USER: admin
      MINIO_ROOT_PASSWORD: SuperSecretPassword #Меняем пароль на свой
    volumes:
      - /mnt/minio-data:/data
    network_mode: host

На третьем сервере создаём конфигурацию:

1
2
3
4
mkdir /opt/minio
sudo mkdir -p /mnt/minio-data
sudo chown 1000:1000 /mnt/minio-data
nano /opt/minio/docker-compose.yaml

Наполняем:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
services:
  minio-3:
    image: minio/minio:RELEASE.2025-04-22T22-12-26Z
	command: server --console-address ":9001" http://minio-1/data http://minio-2/data http://minio-3/data http://minio-4/data
    environment:
      MINIO_ROOT_USER: admin
      MINIO_ROOT_PASSWORD: SuperSecretPassword #Меняем пароль на свой
    volumes:
      - /mnt/minio-data:/data
    network_mode: host

На четвертом сервере создаём конфигурацию:

1
2
3
4
mkdir /opt/minio
sudo mkdir -p /mnt/minio-data
sudo chown 1000:1000 /mnt/minio-data
nano /opt/minio/docker-compose.yaml

Наполняем:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
services:
  minio-4:
    image: minio/minio:RELEASE.2025-04-22T22-12-26Z
	command: server --console-address ":9001" http://minio-1/data http://minio-2/data http://minio-3/data http://minio-4/data
    environment:
      MINIO_ROOT_USER: admin
      MINIO_ROOT_PASSWORD: SuperSecretPassword #Меняем пароль на свой
    volumes:
      - /mnt/minio-data:/data
    network_mode: host

Настраиваем веб-сервер

На сервере с nginx:

1
2
mkdir /opt/nginx
nano /opt/nginx/nginx.conf

Содержимое файла:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;

events {
    worker_connections 4096;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"';

    access_log /var/log/nginx/access.log main;
    sendfile on;
    keepalive_timeout 65;

	upstream minio {
		server minio-1:9000;
		server minio-2:9000;
		server minio-3:9000;
		server minio-4:9000;
	}

    server {
        listen 443 ssl;
        server_name your.domain.com;

        ssl_certificate /etc/nginx/certs/minio.crt;
        ssl_certificate_key /etc/nginx/certs/minio.key;

        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers HIGH:!aNULL:!MD5;

        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_read_timeout 300;

            proxy_http_version 1.1;
            proxy_set_header Connection "";

            proxy_pass http://minio;
        }
    }
}

Открываем:

1
nano /opt/nginx/docker-compose.yml

И наполняем:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
version: '3.7'

services:
  nginx:
    image: nginx:1.21-alpine
    container_name: nginx_minio_proxy
    ports:
      - "443:443"
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
      - ./certs:/etc/nginx/certs:ro
      - nginx_logs:/var/log/nginx
    restart: unless-stopped

volumes:
  nginx_logs:

Создаём директорию:

1
2
cd /opt/nginx
mkdir -p ./certs

И генерим сертификаты:

1
2
3
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
  -keyout ./certs/minio.key -out ./certs/minio.crt \
  -subj "/CN=your.domain.com/O=YourOrg"

Мы поставили TLS на входе в nginx’e. Поэтому между кластером MinIO в закрытой сети допускается хождение нешифрованного трафика.

Запуск

Запустите распределенный кластер MinIO: Чтобы запустить распределенный кластер MinIO, перейдите в корневой каталог на каждом сервере и поочередно выполните следующую команду:

1
2
cd /opt/minio/
docker-compose up -d

Это запустит экземпляры MinIO в отсоединенном режиме, то есть они будут работать в фоновом режиме. Вы можете использовать следующую команду для просмотра журналов для экземпляров MinIO:

1
docker-compose logs -f

Это загрузит образ Minio Docker и запустит сервер Minio.
Вы можете получить доступ к веб-интерфейсу Minio, перейдя в вашем веб-браузере по адресу, который вы указали в nginx конфигурации.

Вы можете проверить работоспособность распределенного кластера MinIO, перейдя по ссылке https://mys3.domain.local/tools/metrics

Установка завершена.

Информацию можно использовать в свободном доступе, с указанием ссылки на сайт
Telegram GitHub YouTube