前提・実現したいこと
Dockerを利用してローカルにlaravel開発環境を構築したいです。
権限関連らしきエラーが出てlaravelの初期画面を表示することができません。
一応該当ディレクトリの権限設定を777に変更すれば(「試したこと」で詳しく記述します)
laravel初期画面はちゃんと表示されるのですが、本来これでいいものなのかが初めてなのでわかりません。
環境構築時に参考にしているサイト
https://qiita.com/mukae_tech/items/89075e7caf7d6506e0b3
発生している問題・エラーメッセージ
ディレクトリの権限設定を触らずにhttp://localhost/にアクセスすると下記のようなエラーが表示されます。
UnexpectedValueException The stream or file "/var/www/app/storage/logs/laravel-2020-11-02.log" could not be opened in append mode: failed to open stream: Permission denied
試したこと
①権限関連のエラーのようなので、ディレクトリの権限を777に変更。
/var/www/app/storage配下を再帰的に権限777にすればlaravelの初期画面は出てくるようになりました。
ただ、本番環境などでも777でいいものなのかがわかりません。
②nginxに書き込み権限を与える
♯chown -R nginx:nginx app/storage chown: invalid user: 'nginx:nginx'
「そんなユーザーはいない」といわれてしまっているように見えます。
参照サイト
https://akamist.com/blog/archives/3272
###試したこと追記1
hentaimanさんの回答をもとに、プロセスからphp-fpmの実行ユーザーを確認しようとしました。
しかし、psコマンドを叩いてもプロセスの中にphp-fpmらしきものは見当たりませんでした。
root@17fc25ef4b3d:/var/www# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.0 33096 10596 pts/0 Ss+ 09:13 0:00 /usr/bin/python3 -u /sbin/my_init root 12 0.0 0.0 294292 6680 pts/0 S 09:13 0:00 /usr/sbin/syslog-ng --pidfile /var/run/syslog-ng.pid -F --no-caps root 21 0.0 0.0 4552 788 pts/0 S+ 09:13 0:00 /usr/bin/runsvdir -P /etc/service root 22 0.0 0.0 4400 832 ? Ss 09:13 0:00 runsv cron root 23 0.0 0.0 4400 736 ? Ss 09:13 0:00 runsv sshd root 24 0.0 0.0 31616 3196 ? S 09:13 0:00 /usr/sbin/cron -f root 690 0.0 0.0 25104 7172 pts/1 Ss 10:28 0:00 bash root 1209 0.0 0.0 4628 860 pts/2 Ss+ 10:51 0:00 /bin/sh root 1283 0.0 0.0 37668 3176 pts/1 R+ 11:03 0:00 ps aux
コマンドを選定するにあたって参考にしたサイト
https://qiita.com/shuntaro_tamura/items/4016868bda604baeac3c
###試したこと追記2
hentaimanさんの回答のコメントをもとに、
そもそも入るコンテナが間違っている可能性を考えました。
確かに「試したこと追記1」ではdocker-compose exec workspace bash
と実行してworkspace というコンテナに入ってしまっていました・・・
docker ps
を実行してコンテナを一覧
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3c3d1c8c4907 laradock_nginx "/docker-entrypoint.…" 7 days ago Up 7 hours 0.0.0.0:80-81->80-81/tcp, 0.0.0.0:443->443/tcp laradock_nginx_1 2a916030c4e8 laradock_php-fpm "docker-php-entrypoi…" 7 days ago Up 7 hours 9000/tcp laradock_php-fpm_1 17fc25ef4b3d laradock_workspace "/sbin/my_init" 7 days ago Up 7 hours 0.0.0.0:3000-3001->3000-3001/tcp, 0.0.0.0:4200->4200/tcp, 0.0.0.0:8080->8080/tcp, 0.0.0.0:2222->22/tcp, 0.0.0.0:8001->8000/tcp laradock_workspace_1 ad03d4acda49 laradock_phpmyadmin "/docker-entrypoint.…" 7 days ago Up 7 hours 0.0.0.0:8081->80/tcp laradock_phpmyadmin_1 284bd149d89f docker:19.03-dind "dockerd-entrypoint.…" 7 days ago Up 7 hours 2375-2376/tcp laradock_docker-in-docker_1 c75ba4374797 laradock_mysql "docker-entrypoint.s…" 7 days ago Up 7 hours 0.0.0.0:3306->3306/tcp, 33060/tcp laradock_mysql_1
docker-compose exec php-fpm bash
を実行するとphp-fpm のコンテナに入れました。
その上でps aux
を実行すると下記のような結果が返ってきました。
root@2a916030c4e8:/var/www# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.1 369128 34892 ? Ss 09:13 0:01 php-fpm: master process (/usr/local/etc/php-fpm.conf) www-data 6 0.0 0.1 371592 30068 ? S 09:13 0:00 php-fpm: pool www www-data 7 0.0 0.0 369128 10204 ? S 09:13 0:00 php-fpm: pool www root 8 0.0 0.0 2388 756 pts/0 Ss+ 16:17 0:00 /bin/sh root 14 0.0 0.0 4000 3200 pts/1 Ss 16:30 0:00 bash root 318 0.0 0.0 7640 2704 pts/1 R+ 16:36 0:00 ps aux
※このコンテナにはpsコマンドがインストールされていなかったので別途インストールしました。
これを見ると、www-data
のような気がします。
いったん「/var/www/app/storage」配下を再帰的に権限755にしたうえで、
#chown -R www-data:www-data app/storage
と実行したところ、コマンドは通ったのですがhttp://localhost/にアクセスするとはじめと同じエラーが出てしまいました。
775でも試しましたが同じでした。
###試したこと追記3
hentaimanさんの回答のコメントをもとに、
公式ドキュメント(http://laradock.io/getting-started/)を見ながら、
できるだけ公式に忠実にlaradockのインストールを行ってみました。
※もう1台パソコンがあるのでそちらのほうに新規で環境を作り直しています。
結論から言うと同じエラーが出ました。
長いですが、インストールの下りを記載します。
■laradockインストール
↓ドキュメント配下にLaravelAppというフォルダを作ってその中に移動
cd Documents mkdir LaravelApp cd LaravelApp
↓該当ディレクトリの中にいる状態でコマンド実行(公式より引用)
git clone https://github.com/laradock/laradock.git docker-compose up -d nginx mysql
■envの設定
サムプルファイルを.env
という名前でコピー
cd laradock copy env-example .env
※↑公式はcp env-example .env
というコマンドでしたが、Windowsのコマンドプロンプトから操作したので、copyコマンドに変えました。
.env
をエディターで開き公式の説明に基づいて変更
APP_CODE_PATH_HOST=../ ↓ APP_CODE_PATH_HOST=../app
cp env-example .env
上部で、APP_CODE_PATH_HOST変数をプロジェクトパスに変更します。APP_CODE_PATH_HOST=../project-z/
必ずproject-zプロジェクトフォルダ名に置き換えてください。
公式(https://laradock.io/getting-started/)日本語訳より引用
↑今回はプロジェクトフォルダ名をapp
としました。
なので、この後
C:\Users\ユーザー名\Documents\LaravelApp
の下に
app
ディレクトリを手動で作成しました。
■コンテナの立ち上げ?
laladockディレクトリ上でコマンド実行
docker-compose up -d nginx mysql (中略) Creating laradock_mysql_1 ... done Creating laradock_docker-in-docker_1 ... done Creating laradock_workspace_1 ... done Creating laradock_php-fpm_1 ... done Creating laradock_nginx_1 ... done) ↑成功?
■コンテナに入る
C:\Users\ユーザー名\Documents\LaravelApp\laradock>docker-compose exec workspace bash bash: $'\r': command not found bash: $'\r': command not found bash: /root/aliases.sh: line 119: syntax error near unexpected token `$'{\r'' 'ash: /root/aliases.sh: line 119: `function mkd() { root@eb68bc599f20:/var/www#
エラーが出つつもコンテナには入れました。
■.envのDB_HOST=の設定
4-データベースホストを使用するようにプロジェクト構成を更新します
PHPプロジェクトの.envファイルまたは読み取り元の構成ファイルを開き、データベースホストDB_HOSTをmysql次のように設定します。
DB_HOST=mysql
公式(https://laradock.io/getting-started/)日本語訳より引用
.env
ファイルの中身を見ましたが、DB_HOST
という設定箇所を見つけることはできませんでした。
そして、公式ドキュメントはここで終わっているように見えます。
これだけではhttp://localhotにアクセスしても404のエラーでした。
laravel自体のインストールがまだだったので、もともとお手本にしていた
https://qiita.com/mukae_tech/items/89075e7caf7d6506e0b3
を参考にlaravelのインストールを行いました。
■default.confの設定変更
C:\Users\ユーザー名\Documents\LaravelApp\laradock\nginx\sites\default.conf
conf
1root /var/www/public; 2↓ 3root /var/www/app/public;
先ほどapp
ディレクトリを手動で作成したのでこのように変更しました。
■phpmyadminのコンテナ立ち上げ(?)とlaravel自体のインストール
laradockにいる状態で
docker-compose up -d nginx mysql phpmyadmin docker-compose exec workspace bash composer create-project laravel/laravel app "6.0.*"
ここまで行ってからlocalhostにアクセスすると、
The stream or file "/var/www/storage/logs/laravel-2020-11-05.log" could not be opened in append mode: failed to open stream: Permission denied
質問時と同じのエラーでした。
補足情報(FW/ツールのバージョンなど)
Windows10 pro
Docker version 19.03.13
php7.4.11

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/04 13:34 編集
2020/11/04 15:59
2020/11/04 17:12
2020/11/05 04:33
2020/11/05 12:30