LaravelでMinIOを利用する備忘録

概要

AmazonS3クラウドストレージサービスと互換性のあるAPI

メリット

ファイルアップロード機能などが存在する場合、ローカルでもS3に保存するテストが書ける

イメージ

👍 Laravel × MinIOの環境構築

docker-compose.yml

minio:
    image: minio/minio:RELEASE.2021-07-08T01-15-01Z.fips
    volumes:
      - ./minio:/data
    ports:
      - ${IP}:9000:9000
    environment:
      MINIO_ACCESS_KEY: admin
      MINIO_SECRET_KEY: password
    command: server /data

.env(Laravel)

AWS_URL=http://minio:9000
AWS_ACCESS_KEY_ID=admin
AWS_SECRET_ACCESS_KEY=password
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=xxBucket
AWS_PATH_STYLE_ENDPOINT=true

💦 Dockerで使用する際のAWS_URLの設定の注意

.env(Laravel)AWS_URLの項目がDockerを使用している場合はホスト名にコンテナ名を入れる

minio: ← これがコンテナ名
    image: minio/minio:RELEASE.2021-07-08T01-15-01Z.fips
    volumes:
      - ./minio:/data
    ports:
      - ${IP}:9000:9000
    environment:
      MINIO_ACCESS_KEY: admin
      MINIO_SECRET_KEY: password
    command: server /data

=================================== 

AWS_URL=http://minio:9000

💦 Dockerで使用している場合の画像URL問題

概要

仮にコンテナ名がminioだった場合、Storage::url($path)を使用すると以下のようなURLが返却される

http://minio:9000/xxxx/xxx.jpg

これだとクライアントからアクセスしても接続できない

対処法

負けた気がするが、hostsファイルに以下のように設定するとホスト側からでも閲覧できる

ホスト側のminioのIP minio

参考

https://n-s.tokyo/2019/04/minio-tips/