Установка сервера хранения файлов 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 для хранения и контролируемого доступа к данным.