Настройка сервера хранилища, совместимого с Amazon S3 в Linux с помощью Minio

Вы научитесь как настроить сервер частного хранилища S3 с помощью Minio на сервере с операционной системой Linux.

Протокол хранения S3 стал популярным для хранения данных. Одно из преимуществ S3 — возможность доступа через API, что позволяет организовать гибкое взаимодействие с хранилищем, включая публичный доступ на чтение, в то время как обновление информации в хранилище происходит только авторизованными лицами.

Существует несколько как открытых, так и частных реализаций хранилищ, работающих по протоколу S3. Сегодня мы рассмотрим популярное решение для организации малых хранилищ — Minio.

Цель minio — позволить поднять совместимое с S3 хранилище небольшого объема максимально быстро. При этом не поддерживаются многие функции, например, многопользовательское хранилище, или сложные модели репликации между дата-центрами. Все, что вы можете — это либо поднять сервер без репликации, либо систему с репликацией, в которой может быть максимум 32 сервера.

В принципе, на 32х серверах, в каждом из которых по 24 диска по 10TB можно поднять 7200 ПБ сырой емкости, однако, вряд ли на таких объемах стоит использовать Minio. Рекомендуем смотреть на Ceph.

В целом, Minio подходит для следующих случаев:

  • хранилище без репликации поверх надежной файловой системы с доступом по S3 (малые и средние хранилища, размещенные на NAS и SAN);
  • хранилище без репликации поверх ненадежной файловой системы с доступом по S3 (для разработки и тестирования);
  • хранилище с репликацией на небольшой группе серверов в одной стойке с доступом по протоколу S3 (отказоустойчивое хранилище с доменом отказа равным стойке).

Часть вызовов API S3 в Minio не поддерживается, однако, для большинства применений это не является ограничением.

Настройка Minio будет состоять из трех блоков действий, которые перечислены далее.

Установка и настройка Docker

Если у вас уже настроен и установлен Docker, просто пропустите этот шаг. Если Docker не установлен, установите его по одному из руководств: Ubuntu 16.04 и 18.04, Debian 9 и 10, Centos 7 и приступайте к следующему шагу.

Настройка Minio

Сначала вам надо придумать ключ доступа и секретный ключ, которыми будете пользовать вы и ваши приложения для доступа к хранилищу:

cat /proc/cpuinfo /proc/iomem | sha512sum | awk '{print "\nkey = " substr($1,1,24) "\nsecret = " substr($1,25,64) }'

key = dd4168999dcf44e3e036b63b
secret = 2c6d377b20cf06fa8b825f1c2772b0aeb8125ab31fbc264d85915d920f21becd

Запомните и сохраните сгенерированные данные. Теперь запустим сам контейнер Minio, указав в переменных MINIO_ACCESS_KEY и MINIO_SECRET_KEY данные, сгенерированные на предыдущем этапе:

sudo mkdir -p /mnt/minio/data
sudo mkdir -p /mnt/minio/config

sudo docker run -d --restart=always -p 9000:9000 --name minio \
  -e "MINIO_ACCESS_KEY=dd4168999dcf44e3e036b63b" \
  -e "MINIO_SECRET_KEY=2c6d377b20cf06...125ab31fbc264d85915d920f21becd" \
  -v /mnt/minio/data:/data \
  -v /mnt/minio/config:/root/.minio \
  minio/minio server /data

Каталог, где minio будет хранить данные — /mnt/minio/data, настройки /mnt/minio/config. При необходимости, вы можете смонтировать внешнее устройство с большим объемом в /mnt/minio/data.

Теперь вы можете зайти в Minio через web-интерфейс по IP сервера и порту 9000, например, http://ngx.cs2.netpoint-dc.com:9000/minio/:

Теперь вы сможете работать с хранилищем с помощью программ, поддерживающих протокол S3. У Minio есть и своя утилита, которая называется mc.

Настройка безопасного доступа с помощью Nginx и Let’s Encrypt

Если вы хотите использовать внешний Nginx для управления трафиком к контейнеру, то замените: «9000:9000» на «127.0.0.1:9000:9000» и выполните остановку контейнеров и пересоздайте minio:

sudo docker rm -f minio

sudo docker run -d --restart=always -p 9000:9000 --name minio \
  -e "MINIO_ACCESS_KEY=dd4168999dcf44e3e036b63b" \
  -e "MINIO_SECRET_KEY=2c6d377b20cf06...125ab31fbc264d85915d920f21becd" \
  -v /mnt/minio/data:/data \
  -v /mnt/minio/config:/root/.minio \
  minio/minio server /data

Теперь доступ к вашему контейнеру извне будет закрыт.

Перейдите к нашему руководству по настройке проксирования с помощью Nginx с поддержкой сертификата Let’s Encrypt: Ubuntu 16.04 и 18.04, Debian 9 и 10, CentOS 7. для завершения настройки вашего блога измените в Nginx секции «upstream» и «location /», чтобы они приобрели следующий вид:

upstream minio {
        server 127.0.0.1:9000;
}
...
server {
  ....
  location / {
    proxy_pass http://minio/;
  }
...
}

Проверьте корректность настроек и перезапустите nginx:

sudo nginx -t && sudo service nginx restart

После выполнения этого шага интерфейс и API Minio будут доступны по выбранному вами доменному имени с поддержкой сертификата Let’s Encrypt.