1. file not found で詰まった際の解決策
タイトルの通りLaravelとDockerで環境構築すると【file not found】で詰まりました。
結論からいうと default.confの設定を誤っていたてめです。
default.confは簡単に説明すると今回サーバーとして採用したNginxの設定ファイルです。
すごく基本的なことでつまずいていたので解説していきます。
環境構築で参考にしたのは以下のサイトです。
https://peblo.gs/laravel-env-with-docker/
2.解決策って結局なんなの?
まずはゴールをイメージしてください。サーバーがファイルを読み取るまでには大きく以下の2つが重要です。
- default.confにファイルの居場所を教えてあげる
- サーバーが読み取るファイルの位置を理解する。
大きくこの2つが理解できていれば「file not found」のエラーが起きることはありませんでした。
今回の私のケースでいうと以下の通りです。
server {
listen 80;
root /var/www/public;
index index.php;
~以下省略~
これが今回私が定義していたrootです。
ですがサーバー側はfileがないと突き返してきます。
それでは実際にはどこにファイルがあったのでしょうか?
以下の画像の通りpublicの上に laravel というディレクトリが存在しています。
ですからこれを以下の通りに修正します。
server {
listen 80;
root /var/www/laravel/public; //laravelを付け足す。
index index.php;
修正した後に以下のコマンドを実行してdockerをクリーンな状態にします。
docker-compose down
docker-compose up -d
上記のコマンドが実行できたら再度サーバーを立ち上げます。
これで無事エラーは解決しました。
3.補足
詳しい解説はできませんが、「laravelの上にsrcディレクトリがあるじゃん!」と思った方もいるのではないでしょうか?
上記の画像の通りです。
どういうことなのでしょう?実際にDockerに潜り込んで見てみます。
docker exec -it コンテナ名 bash
でDockerに潜入できます。それでは見てみましょう。
上記の画像の通りDockerに潜入するとすでにvar/www
のルートが定義されています。さらに順を追っていくと laravel→public→index.php
と定義されているのが分かりました。
なのでrootが分からない時は以下の通りに順を追ってみましょう。
- dockerに潜入
- lsコマンドでファイル一覧を表示
- cdで指定の位置に移動
- 2と3を繰り返してファイルの位置を探す
上記の手順を踏めば大抵のfile not foundは解決できると考えます。
4.まとめ
このようなことが起きないために以下のことを理解しておく必要があります。
- 自分が使っているサーバーの設定ファイルのrootが合っているか確認する。
- ファイルの位置が分からない時はdockerに潜入してファイルを探す。
大きくはこの2つです。初学者にとって環境構築は分からないことだらけです。挫けずにエラーと向き合いましょう(^^)
ここまでお読みいただきありがとうございました!