Установка MinIO для файловой помойки (без репликации)

Для организации данного сервиса был выбран облачный дистрибутив Arch Linux, который в последующем был использован в Proxmox VE по средствам клонирования шаблона созданного следующим скриптом:

 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
#!/bin/bash

VM_ID=$1
VM_IMAGE=$2
STORAGE='storage'
MEMORY=2048

if [ -z $VM_ID ] || [ -z $VM_IMAGE ]; then
    printf "Using:\n  import_vm.bash [VM ID] [disk image]\n"
    exit 1
fi


re='^[0-9]+$'
if ! [[ $VM_ID =~ $re ]]; then
    echo "VM ID must be a number value $1"
    exit 2
fi

qm create ${VM_ID} --memory ${MEMORY} --net0 virtio,bridge=vmbr0
qm importdisk ${VM_ID} ${VM_IMAGE} ${STORAGE}
qm set ${VM_ID} --scsihw virtio-scsi-pci --scsi0 ${STORAGE}:vm-${VM_ID}-disk-0
qm set ${VM_ID} --ide2 ${STORAGE}:cloudinit
qm set ${VM_ID} --boot c --bootdisk scsi0
qm set ${VM_ID} --serial0 socket --vga serial0
qm template ${VM_ID}

Скрипт принимает на входе желаемый ID шаблона создаваемой виртуальной машины и имя файла образа диска облачного дистрибутива. После создания шаблона ВМ, нужно его клонировать, подтюнить необходимые параметры ВМ, запустить, и далее перейти уже непосредственно к ее настройке, подключившись к ней через SSH.

1 Настройка сервера MinIO

Обновляем список пакетов:

1
pacman -Syu

Устанавливаем пакет сервера:

1
pacman -S minio

Правим файл настроек /etc/minio/minio.conf:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# Local export path.
MINIO_VOLUMES="/srv/minio/data/"
# Server user.
MINIO_ROOT_USER=admin
# Server password.
MINIO_ROOT_PASSWORD=admin-password
# Use if you want to run Minio on a custom port.
MINIO_OPTS="--address :9000 --console-address :9001"
# Server API URL
MINIO_SERVER_URL=https://minio.your-domain.com
# Server Console URL
MINIO_BROWSER_REDIRECT_URL=https://console.your-domain.com

Включаем данный сервис в системе:

1
systemctl enable minio

И запускаем его:

1
systemctl start minio

Следует обратить внимание, что в приведенном выше примере конфигурации используются переменные MINIO_SERVER_URL и MINIO_BROWSER_REDIRECT_URL - это сделано для того чтобы сервис мог корректно работать через проксирующий сервер, в качестве которого используется NGINX. Часть конфигурация самого NGINX для проксирования выглядит примерно следующим образом:

 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
59
60
61
62
63
64
65
66
67
68
69
70
server {
    server_name minio.your-domain.com;
    listen 80
    listen [::]:80
    access_log /var/log/nginx/minio.your-dimain.com-access.log;
    error_log /var/log/nginx/minio.your-domain.com-error.log;

    # To allow special characters in headers
    ignore_invalid_headers off;
    # Allow any size file to be uploaded.
    # Set to a value such as 1000m; to restrict file size to a specific value
    client_max_body_size 0;
    # To disable buffering
    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;
        # Default is HTTP/1, keepalive is only enabled in HTTP/1.1
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        chunked_transfer_encoding off;

        proxy_pass http://<IP address of MinIO service>:9000;
    }
}

server {
    server_name console.your-domain.com;
    listen 80
    listen [::]:80
    access_log /var/log/nginx/console.your-domain.com-access.log;
    error_log /var/log/nginx/console.your-domain.com-error.log;

    # To allow special characters in headers
    ignore_invalid_headers off;
    # Allow any size file to be uploaded.
    # Set to a value such as 1000m; to restrict file size to a specific value
    client_max_body_size 0;
    # To disable buffering
    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;

        # This is necessary to pass the correct IP to be hashed
        real_ip_header X-Real-IP;

        proxy_connect_timeout 300;
            
        # To support websocket
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
            
        chunked_transfer_encoding off;

        proxy_pass http://<IP address of MinIO service>:9001;
    }
}

Далее нужно использовать certbot --nginx и получить соответствующие сертификаты. После чего можно начинать пользоваться полученным сервисом.