Вы научитесь как настроить сервер частного хранилища 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.