こんにちは。株式会社リンクネット、ソリューション事業部の石原です。
当社ではPHPのフレームワークであるLaravelを使用したWEBサービスの開発を行っています。
AWS S3などのクラウドストレージを使用した開発を行う場合に、ローカル開発環境でも同様の操作が行えるよう、S3互換APIを提供するMinIOを利用する設定を行いましたのでご紹介します。
$ sail artisan --version
Laravel Framework 9.49.0
Laravelアプリケーションの新規作成時に、デフォルトのスタック以外に、MinIOを有効化しておきます。不要なスタックがあれば削除してください。
$ curl -s "https://laravel.build/example-app2?with=mysql,redis,meilisearch,mailpit,selenium,minio" | bash
S3ドライバをインストールしておく必要があります。
$ sail composer require league/flysystem-aws-s3-v3 "^3.0"
http://localhost:8900 にアクセスして、バケットを作成しておきます。docker-compose.ymlに記載されているMINIOROOTUSERとMINIOROOTPASSWORDでログインします。
.envファイルには以下のように設定しました。エンドポイントのIPアドレスにホストマシンのIPアドレスを指定することで、temporaryUrlメソッドによる一時ストレージURLの生成もうまく動作するようになります。
FILESYSTEM_DISK=s3
AWS_ACCESS_KEY_ID={MINIO_ROOT_USERの値}
AWS_SECRET_ACCESS_KEY={MINIO_ROOT_PASSWORDの値}
AWS_DEFAULT_REGION=ap-northeast-1
AWS_BUCKET={バケット名}
AWS_USE_PATH_STYLE_ENDPOINT=true
AWS_ENDPOINT=http://{ホストマシンのIPアドレス}:9000
あらかじめバケットを作成し、バケットにアクセス可能なIAMユーザーのアクセスキーペアを準備しておきます。
.envファイルには以下のように設定しました。
FILESYSTEM_DISK=s3
AWS_ACCESS_KEY_ID={IAMユーザーのアクセスキーID}
AWS_SECRET_ACCESS_KEY={IAMユーザーのシークレットアクセスキー}
AWS_DEFAULT_REGION=ap-northeast-1
AWS_BUCKET={バケット名}
AWS_USE_PATH_STYLE_ENDPOINT=false
Alibaba Cloud のOSSを利用する場合、インターネット経由とイントラネット経由でエンドポイントのURLが異なります。 そのため、専用のパッケージを利用することにしました。
$ sail composer require alphasnow/aliyun-oss-laravel
あらかじめバケットを作成し、バケットにアクセス可能なRAMユーザーのアクセスキーペアを準備しておきます。
.envファイルには以下のように設定しました。
FILESYSTEM_DISK=s3
OSS_ACCESS_KEY_ID={RAMユーザーのアクセスキーID}
OSS_ACCESS_KEY_SECRET={RAMユーザーのシークレットアクセスキー}
OSS_BUCKET={バケット名}
OSS_ENDPOINT=oss-ap-northeast-1.aliyuncs.com
OSS_INTERNAL=oss-ap-northeast-1-internal.aliyuncs.com
上記のように設定を行うことで、プログラムには変更を加えることなく、ローカル開発環境でもクラウドストレージの操作を気軽に検証することが可能になりました。