LaravelをAWSのEC2へデプロイする手順を参考にさせていただき、EC2の中に作成中のLaravelアプリケーションをデプロイしました。
基本的なCRUD処理ができる掲示板アプリです。
ローカル環境上では、プロフィール画像を指定しなければ、デフォルトの画像が割り当てられるようにしていました。
EC2にデプロイした後に、同じような形でデフォルト画像を表示しようと思ったのですが、表示されませんでした。
一度、public/storageを削除し、php artisan storage:link として、再度シンボリックリンクを貼ってもうまくいきませんでした。
現在、storage/public配下に、noimage.pngが存在している状態です。
Laravelのバージョンは、 5.8.37です。
##シンボリックリンクとは??
ショートカットのようなものです。
今回の例で言うと、laravelアプリの、トップのpublicが、ウェブ上に公開されるディレクトリとなります。ブラウザからサーバー上のファイルにアクセスするときは、 /storage/app/publicの中にあるため、画像を表示することができません。そこで、public/storage と、storage/app/public にリンクを持たせることにより、
public/storageにアクセスする=storage/app/publicにアクセスする、ということを実現できます。
(間違っていたらすみません)
ローカルではこれで行けたが、EC2上では表示できない....
こんな感じです。
ちゃんとシンボリックリンク貼ってるのに....
原因は、画像の閲覧権限が無いことでした。
アプリのトップ]$ ls -l public/storage/
-rw------- 1 ec2-user ec2-user 2510 4月 14 06:28 noimage.png
このimage.pngの権限が600だったので、「所有者」のみ読み書き可能と言う状態でした。
$ chmod 664 public/storage/noimage.png
で、「所有グループ」に読み書き権限、「その他」に読み取り権限を与えることにより....
表示できました。
シンボリックリンクを貼っても画像が表示されない方は、権限周りを一度見てみると良いかもです。