カクカクしかじか

技術的なアレコレ

Railsアプリの開発環境でminioをDockerで動かす方法

minioって何?

S3互換のストレージサービスです。

実際にやっていく💪

手順1. docker-compose.ymlの定義

とりあえず、docker-compose.ymlにminioを定義します。

docker-compose.yml

version: '2'
services:
  <省略>
  minio:
    container_name: minio
    hostname: minio
    image: minio/minio
    ports:
      - "9000:9000"
    volumes:
      - minio:/data
    command: server /data
    environment:
      MINIO_ACCESS_KEY: minio-access-key
      MINIO_SECRET_KEY: minio-secret-key
    restart: always
volumes:
  minio:

やったこと📝

  • ローカルマシンの9000番ポートをminioコンテナの9000ポートに紐付ける
  • minioボリュームを作成して、minioコンテナの/data配下にマウント
  • server /data で、オブジェクトストレージサーバをコンテナの起動時に実行させるようにして、データを/data配下に保存するようにする
  • MINIO_ACCESS_KEY, MINIO_SECRET_KEYを指定してないと、ランダムな値が起動時にアサインされるので好きな値を記載して固定化するようにした

手順2. minioとの接続確認

docker-compose.ymlと同階層で以下のコマンドを実行します。

$ docker-compose up -d

そして、ローカルのminioと接続します。
上記設定では、http://localhost:9000/でアクセス出来ます。
すると以下のようなログイン画面が見れます。

image.png

ここでは、docker-compose.ymlに定義した MINIO_ACCESS_KEYMINIO_SECRET_KEY を入力してログインします。 ログインに成功すると以下のような画面に遷移します。

image.png

手順3. minioでバケットとポリシーの設定

S3と同様にバケットを作成して、ファイルや画像をアップロードする場所を作成します。 作成は、画面右下の「+」ボタンより行います。
押下すると「Upload file」、「Create bucket」の2つのボタンが表示されるので、「Create bucket」を押下します。
バケット名を入力し、Enterを押下するとバケットが作成されます。

mineo5-1024x499.png

バケットを作成したら、policyを設定します。
※設定しないと、アプリケーションからファイルの読み書きができません。
設定は、作成したbucket名にマウスをのせると「:」が表示されるのでそれを押下します。

minio3-1024x531.png

下記のように読み書きのpolicyを設定します。※Prefixは入力しなくても大丈夫です。

minio4-1024x537.png

手順4. carrierwave.rbの設定

carrierwave を使っている前提で設定を行います。

/config/initializers/carrierwave.rb

CarrierWave.configure do |config|
  if Rails.env.production?
    <省略>
  else
    # minioの参照パス
    config.asset_host = 'http://localhost:9000/minio-bucket'
    # 認証情報
    config.fog_credentials = {
      provider: 'AWS',
      aws_access_key_id: 'docker-compose.ymlに書いたアクセスキー,
      aws_secret_access_key: 'docker-compose.ymlに書いたシークレットキー,
      path_style: true,
      region: ENV['AWS_REGION'],
      endpoint: 'http://localhost:9000'
    }
    # バケット名
    config.fog_directory = 'minio-bucket'
    config.cache_storage = :fog
  end
end