LoginSignup
1

More than 3 years have passed since last update.

laravelで、「シンボリックリンクを貼っても画像が表示されない」を解決する

Posted at

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にアクセスする、ということを実現できます。
(間違っていたらすみません)

image.png

ローカルではこれで行けたが、EC2上では表示できない....
こんな感じです。
image.png

ちゃんとシンボリックリンク貼ってるのに....

原因は、画像の閲覧権限が無いことでした。

アプリのトップ]$ 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

で、「所有グループ」に読み書き権限、「その他」に読み取り権限を与えることにより....
image.png

表示できました。

シンボリックリンクを貼っても画像が表示されない方は、権限周りを一度見てみると良いかもです。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1