今回dockerでlarvelの開発環境を作った時に、welcome.blade.phpがlocalhostでアクセスしたときに表示されませんでした。
結構はまりやすいこと。というわけで解決方法を!
Table of Contents
初めに
前提
今回はdocker-compose.yaml,Dockerfileはすでに作成されているということで説明します。
結論
結論だけをいうと、ドキュメントルートを指定していないのがいけませんでした!
いつもならそのままでも行けていたんですが、dockerだったらちょっと変わってくるっポイ。
ということで詳しい解決方法を説明していきますね。
どんなエラーが出たのか。
ForbiddenYou don’t have permission to access this resource.
Apache/2.4.38 (Debian) Server at 127.0.0.1 Port 80
こんな感じのエラーが出たんですね。
あら。。。
welcomeページが見れるのか確認
一旦ウエルカムページだけでも見れるかどうか確認してみます。
http://localhost/{アプリ名}/public/index.php
そしたらこんなエラーが出ました。
The stream or file “/var/www/html/{アプリ名}/storage/logs/laravel.log” could not be opened in append mode: Failed to open stream: Permission denied
何か権限がうまくいっていないようですね。
ということでstorageの権限を変えてみます。
storage配下のフォルダ、ファイルを再帰的に777の権限にする。
cd /var/www/html/{アプリ名}/
chmod 777 -R storage/
Code language: JavaScript (javascript)
ほ!そしたらウエルカムページが見れるようになりましたね!
これで見れることはわかりました。
ちなみにpublic/ というのはLaravelの処理の起点となるディレクトリなんですね。
PHPフレームワーク「Laravel」における処理の流れと、ルーティングを理解しよう
ただ、これを http://localhost で確認したいわけです。
というわけでドキュメントルートを変えていきます。
ドキュメントルートの変更
今回は作成していたDockerfileに初めからドキュメントルートを変えるようにします。
docker-compose build をしたら勝手にやってくれるというやつですね。
ということで、phpのDockerfileに追記してみます。
追記内容は以下です。
# ドキュメントルートの指定
ENV APACHE_DOCUMENT_ROOT /var/www/html/{アプリ名}/public
RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf
RUN sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf
Code language: PHP (php)
これでdocker-compose buildするとOKです!
↑にアクセスするとLaravelのwelcomeページが表示できます!
まとめ
これは結構はまりやすいっぽいですね。
やった事としては以下2点です。
- strageディレクトリの権限を変える
- ドキュメントルートを変更する
エラーって傍からみたらそこじゃんってなるけど、当事者からは分からない事ってたくさんですね。