Contents
概要
個人開発で使用している以下スタックで画像を保存できない問題がおきた。
- Laravel10
- MinIO(S3の代わり)
- Intervention IMage 3
調査
Intervention IMage
Intervention IMage がVersion2 → Version3 で大きく変わったこともあり、使用法を疑ったが、何ら問題はなかった。
debug等の値を見て見たが、問題なし。。。
/**
* 画像をリサイズする.
*
* @param \Illuminate\Http\UploadedFile $file
* @return \Intervention\Image\Interfaces\ImageInterface
*/
public function resize(UploadedFile $file): ImageInterface
{
return $this->ImageManager
->read($file)
->resize(Media::BLOG_IMAGE_WIDTH, Media::BLOG_IMAGE_HEIGHT);
}
/**
* 画像をS3にPutする.
*
* @param string $path
* @param \Illuminate\Http\UploadedFile $file
* @return bool
*/
public function putForS3(string $path, UploadedFile $file): bool
{
$convertFile = $this->ImageManger->resize($file)->toPng();
return $this->diskS3->put($path, $convertFile);
}
minio への通信
ローカル環境をDockerを用いて開発していることもあり、ローカルネットワークが怪しいと何故か閃いた。
以下のコマンドを用いてネットワークを見たところ、同じネットワーク内に存在していたのでコンテナ間の通信は担保されている様子でした。
docker network ls
docker network inspect
ただし、 minio に向けた curl
コマンドが返ってこないことが分かった。
原因
調査を進めていくと、サービス名に対してエンドポイントを指定しないといけないことが分かった。
minio:
image: quay.io/minio/minio:RELEASE.2023-01-18T04-36-38Z
container_name: 'discovery-gem_minio'
今回はminioとして登録していたので、 .env
のエンドぽいとの指定が以下の様に設定する必要がありました。
AWS_ENDPOINT=http:{docker-compose.ymlで指定したport}//minio
たったこれだけのために頭を悩ましたのは悔しすぎる。