Установка сервера хранения файлов minio
Описание проблемы
Возникла необходимость развернуть на своем хостинге сервис хранения файлов.
Основным требованием является совместимость с Amazon S3 на уровне API.
Выбор инструментов
В качестве серверного программного обеспечения был выбран Minio из за его простоты. Аналоги не рассматривались.
Установка Minio
Для запуска Minio будем использовать Docker. Благодаря тому, что приложения Docker распространяются в виде образов, установка упрощается до минимума.
Следуя инструкциям, расположенным на странице Minio в Docker Hub, выполним следующие команды (из за особенностей Docker все команды необходимо выполнять под root-ом):
docker pull minio/minio
Эта команда скачает из Docker Hub образ Minio последней версии.
Запуск Minio
Для запуска сервера можно воспользоваться командой:
docker run -p 9000:9000 minio/minio server /export
После чего можно обратиться к нему по URL http://localhost:9000/ .
При таком запуске будет создана docker volume в каталоге /var/lib/docker/
.
При каждом запуске будет создана новая volume, то есть при перезагрузке сервера
будут потеряны все данные. Нам такой вариант не подходит.
Подробнее про docker volume можно почитать в документации Docker. Для обеспечения надежного хранения данных необходимо примонтировать существующий каталог на Docker-сервере внутрь контейнера.
В документации Minio приводится более полная инструкция по настройке сервера.
Запуск Minio с помощью docker-compose
Для более гибкого управления контейнером с Minio можно использовать docker-compose.
Необходимо создать каталог minio
. Расположение этого каталога роли не играет,
имя также может быть любым, однако должно нести смысловую нагрузку.
Для работы с docker-compose необходимо подготовить файл docker-compose.yml
. Я
взял образец из документации Minio и
модифицировал его.
Листинг файла docker-compose.yml
приведен ниже.
# docker-compose.yml
version: "2"
services:
minio:
restart: always
image: minio/minio
ports:
- "9000:9000"
environment:
MINIO_ACCESS_KEY: minio
MINIO_SECRET_KEY: minio124
command: server /export
volumes:
- /mnt/hdd/minio/data:/export
- /mnt/hdd/minio/config:/root/.minio
Здесь следует обратить внимание на следующие моменты:
restart:always
определяет политику перезагрузки контейнера. При таких настройках контейнер будет автоматически перезагружаться после падения (подробнее).ports
прокидывает 9000 порт внутрь контейнера. Это значит, что при обращении на порт 9000 сервера docker, подключение будет автоматически переведено на порт 9000 контейнера. Для получения более подробной информации по теме проброса портов необходимо искать по ключевым словамdocker network
.MINIO_ACCESS_KEY
иMINIO_SECRET_KEY
хранят данные для подключения к серверу. Их необходимо сгенерировать случайным образом, в противном случае сервер будет уязвим.Каталоги
/mnt/hdd/minio/data
и/mnt/hdd/minio/config
должны существовать. В первом будут сохраняться данные, во втором – настройки. Естественно, вместо приведенных можно указывать любые каталоги.
После применения всех изменений необходимо запустить сервер командой
docker-compose up
Для запуска и остановки контейнера можно воспользоваться командами
docker-compose start
docker-compose stop
При такой конфигурации данные будут надежно сохранены.
Выводы
Настроенный сервер можно использовать как полноценную замену Amazon S3 для хранения и контролируемого доступа к данным.