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/でアクセス出来ます。
すると以下のようなログイン画面が見れます。
ここでは、docker-compose.ymlに定義した MINIO_ACCESS_KEY
と MINIO_SECRET_KEY
を入力してログインします。
ログインに成功すると以下のような画面に遷移します。
手順3. minioでバケットとポリシーの設定
S3と同様にバケットを作成して、ファイルや画像をアップロードする場所を作成します。
作成は、画面右下の「+」ボタンより行います。
押下すると「Upload file」、「Create bucket」の2つのボタンが表示されるので、「Create bucket」を押下します。
バケット名を入力し、Enterを押下するとバケットが作成されます。
バケットを作成したら、policyを設定します。
※設定しないと、アプリケーションからファイルの読み書きができません。
設定は、作成したbucket名にマウスをのせると「:」が表示されるのでそれを押下します。
下記のように読み書きのpolicyを設定します。※Prefixは入力しなくても大丈夫です。
手順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