質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

Q&A

解決済

1回答

866閲覧

EC2で画像が反映されない

uoyuta

総合スコア7

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

0グッド

0クリップ

投稿2021/09/27 05:38

編集2021/09/28 06:17

解決したいこと

docker環境にて反映されていた画像をEC2上でも表示させたいです。
こちらを参考に「EC2へデプロイ」しました。
こちらを参考に「docker環境構築」しました。

解決策をご存じの方がいましたら、ご教示頂けますと幸いです。

環境

Mac(m1)
Laravel
docker(Laradock)
EC2

発生している問題・エラー

投稿した画像をDBに保存させて表示させたいです。
イメージ説明
EC2にて検証ツールで確認
イメージ説明

イメージ説明

画像はフォルダ内にあるかと思います。。。
イメージ説明

該当するソースコード

php

1#画像表示 2#root@ip:/home/ubuntu/itemsearch/resources/views/index.blade.php 3<img width="100%" height="50%" src="{{ asset('storage/public/image/'.$item->image) }}">

php

1#画像保存場所 2root@ip://home/ubuntu/itemsearch/public/storage/image# ls 354A5ihXbzzzHXVXHgw5YiCgx2VBI41LR2vWib8w2.jpg hCeiBmTWJ5tRxG2sljMUVGYhmgaF21JCCCPGNI36.jpg 4 5root@ip://home/ubuntu/itemsearch/storage/app/public/image# ls 654A5ihXbzzzHXVXHgw5YiCgx2VBI41LR2vWib8w2.jpg hCeiBmTWJ5tRxG2sljMUVGYhmgaF21JCCCPGNI36.jpg 7

php

1#php artisan storage:linkを行った場所 2 3root@ip-~://home/ubuntu/itemsearch 4 5docker-compose exec workspace bashにてコンテナ内にはいり行いましたが、改善しません

自分で試したこと

php

1#chmod 777 storage/logs vendor 2#chmod 777 /var/www/storage/app/public/image 3#chmod -R 777 /var/www/storage/app/public/image 4下記にて実行しましたが改善せず 5/var/www#

追記

現状解決しておりませんので、Qiitaにも質問させていただきます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

AbeTakashi

2021/09/28 02:05

php artisan storage:link はDockerコンテナの中に入って実行されたでしょうか? 質問文の内容ではそこまで読み取れないのですが、もしそうでないのならおそらくそれが原因です。コンテナに入って実行されているのであれば、その点は分かりやすいように質問文に追記した方がいいでしょう。 参考) https://teratail.com/questions/360471
uoyuta

2021/09/28 02:47

失礼しました。 docker-compose exec workspace bashにてコンテナ内に入り、実行しましたが表示がされない形です。
uoyuta

2021/09/28 03:45

関係ないかもしれませんが、エラー画像を追加を追加させていただきました。
退会済みユーザー

退会済みユーザー

2021/09/28 05:44

できあがったhtmlの該当部分のソースも提示してください <imgタグのものです
AbeTakashi

2021/09/28 05:45

なるほど、ではコンテナ内に入ってWEBサーバのエラーログは確認可能でしょうか。404なのでおそらくサーバ側のエラーログを見れば、わりと明確な判断ができる場合が多いです。パス情報も記載されているはずなので、あるべき場所にファイルがないということが明確かと思います。ここから原因を探るのが近道かと思います。
uoyuta

2021/09/28 06:17

aguさん 画像追加させていただきました。
uoyuta

2021/09/28 06:25

AbeTakashiさん webサーバーのログは「laradock_workspace_1」か「laradock_php-fpm 」かと思うのですが、、 どちらも、Sep 26 06:09:01 で最終が止まっております。dockerに異常がありそうでしょうか、、?
退会済みユーザー

退会済みユーザー

2021/09/28 06:30

あれ? このlaravelプロジェクトが存在する場所はどっち? (3.113.185.168のサーバーですよ) /var/www/itemsearch /home/ubuntu/itemsearch
uoyuta

2021/09/28 06:46

/home/ubuntu/itemsearchです! 実際に上記のitemsearch内にあるビューを変更すると反映されます
AbeTakashi

2021/09/28 07:02

コンテナの状況がわからないのでなんとも言えませんが、docker-compose.ymlを見ればどちらにコンテンツファイルがあるかなんとなく分かると思います。こちらもホスト上からログを参照するのではなく、コンテナに入って直接Apacheもしくはnginxが吐き出した生ファイルのログを見るのが一番堅実かと思います。WEBサーバのログの場所が分からない場合はWEBサーバの設定ファイルを見るしかありませんが、Apacheなら /etc/httpd/conf/httpd.conf とかその近く、nginxであれば /etc/ngnix/nginx.conf とかもしくはその近くにあると思います(php-fpmがあるならnginxかな?)。
uoyuta

2021/09/28 08:06

現在、EC2にログイン後、docker-compose exec workspace bashにてdocker内にはいりました、 そちらで、「docker logs laradock_workspace_1」を行いますと下記のエラーが出てしまいます。 bash: docker: command not found
AbeTakashi

2021/09/28 08:49

コンテナ内に入ったらdockerコマンドは使えませんので、tailコマンドなどLinuxに入ってるコマンドでファイルを見る必要があります。 参考) https://eng-entrance.com/linux-command-tail アクセスして404が出た直後にtailコマンド使って最後の行を見るといいと思います
uoyuta

2021/09/28 09:58

先ほどと同じく、EC2にログイン後、docker-compose exec workspace bashにてdocker内にはいりまして、「tail laradock_workspace_1」「tail /etc/ngnix/nginx.conf」を両方実行しましたが、下記のような形で見つからないみたいです。 tail: cannot open 'openresty/nginx.conf' for reading: No such file or directory docker-compose exec workspace bash後に「root@3fc81b17c761:/var/www# ls」で確認しますと下記が表示されます app composer.json database laradock package-lock.json README.md server.php tests artisan composer.lock docker-compose.yml node_modules phpunit.xml resources storage vendor bootstrap config infra package.json public routes tailwind.config.js webpack.mix.js
AbeTakashi

2021/09/28 10:19 編集

うーん、Linuxの操作がおぼつかない感じでしょうか? コンテナの中がどうなってるか分からないので明確な答えはお伝えできないのですが、コンテナ内には行った後にcdコマンドなどでディレクトリを移動したりして、nginxの設定ファイルを探しだし(たいていは/etc/nginx以下のどこかにあるはず)、そのファイルの中身をcatコマンドなどで覗いてみてください。その中にnginxが吐き出しているログのファイルのパスが書いてあるところあると思うので、そのファイルを直接tailコマンドなどで見ていただくと、おそらく404の原因がつかめるのではと思っております(nginxがあると期待しているファイルのパスが見えるはずです)。 Dockerは便利ではありますが、Linuxの知識がないとちょっとトラブった時に対応ができないことがあるので、Linuxの基礎的なところは学ばれた方がいいかもしれません。 念のため再確認ですが、docker-compose exec workspace bash でコンテナに入った後に、Laravelプロジェクトがあるディレクトリでphp artisan storage:linkを叩かれていますよね?(コンテナに入る前に叩いても意味がないです) あとは叩いたときにエラーとかは出ていませんか? これが上手くいっていればおそらく画像は見えると思うのですが。 参考) https://skill-upupup-future.com/?p=502 追記) 何か既視感があって過去の質問も見てみたら、同様の質問されて解決してましたね。だとすればstorage:linkとは関係ない画像なのかな? どちらにせよnginxのログを見ていただくのが、解決の一番の近道です。 再追記) コンテナに入ったらstorageディレクトリは見えてるのですね。コンテナの中から見てstorage/public/image/ 以下にファイルは存在していますか?
uoyuta

2021/09/28 10:51

Linuxの操作がおぼつかない感じです。。すいません 現在下記のような形で、etcは見つけたのですが、その中に「nginx」が見当たらない状態です。 root@3fc81b17c761:/# ls bd_build bin boot certs dev etc home lib lib32 lib64 libx32 media mnt opt proc root run sbin srv sys tmp usr var
AbeTakashi

2021/09/28 11:05 編集

すいません、質問文再度改めて見たら <img width="100%" height="50%" src="{{ asset('storage/public/image/'.$item->image) }}"> じゃなくて <img width="100%" height="50%" src="{{ asset('storage/image/'.$item->image) }}"> が正しいかもしれませんね。シンボリックリンクがちゃんと張られていれば、こちらが正しい可能性もあります。 参考) https://tektektech.com/laravel-storage-app-public/
uoyuta

2021/09/28 11:14

本当にごめんなさい。。。 解決しました! 本当に長い時間お付き合い頂いてありがとうございます。
AbeTakashi

2021/09/29 05:42 編集

解決して良かったですね。自己解決&ベストアンサーとして解答いただくのがいいと思います(過去の質問でも受付中のものがありますが、解決したものはベストアンサーを入れて締めた方がいいです)。もし私の最後の内容で解決したのであれば、おそらくサーバのログを見れば一発で解決できていたと思います。そういう意味でもDockerを使うなら多少なりともLinuxの知識を身につけられるといいと思います。
guest

回答1

0

自己解決

src="{{ asset('storage/image/'.$item->image) }}"

に修正して画像が反映されました!

AbeTakashiさんありがとうざいました。

投稿2021/09/29 05:13

uoyuta

総合スコア7

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問