もやぶろ

moyashidaisukeのブログだからもやぶろ。フリーランスのエンジニアのダイスケです。QOLあげて色々楽しくチャレンジして良く生きたい。プログラム関連とかギター関連とか旅行関連とか色々。

【Laravel】【PHP】dockerでphp-fpm使う時にLaravelのlogsフォルダのpermissionでハマった話

ハマりました、、、

環境

  • docker-compose使ってる
  • nginx -> php-fpm のコンテナ使ってる(中身はDockerFileで微調整)
  • Laravel使ってる
    • フロントはSPAなので、実質APIサーバ
  • selenium使ってE2Eテスト(Laravel Dusk)してる
  • phpunitも使ってる

事象

  • ローカルで動くけどAWS CodeBuildでDuskのテストがこける
  • DuskでAPIが500を返してる
    • nginxのログで確認した
      • 500という情報だけ
    • php-fpmのログ出ない
    • laravelのログ出てない
  • 同じAPIのphpunitでのテストは通ってる

結論

storage/logs/laravel.logに書き込めずにエラーが出てた😇

対応

dusk実行前にstorage/logs/laravel.logにpermissionを付与するようにした。(暫定対応・・

詳細

ls の結果

drwxrwxrwx 6 root root 4096 Apr 1 15:34 ..
-rw-r--r-- 1 root root 78134 Apr 1 15:36 laravel.log
drwxrwxrwx 4 root root 4096 Apr 1 15:36 .

phpunitで実行する場合は、php-clientで実行=DockerのデフォルトUser=root でなので問題なく動く。

duskの場合はnginx経由でphp-fpmとして動くので、www-data で動くので、 laravel.logにpermissionが無い😇

まとまってないけどまとめ

これは、、、うーん、、どうなってるのが正解なんですかね、、とりあえず動くようにはなったのですが。しかもローカル(Mac)では再現しないし、、、

あと、APIサーバとして使ってる場合はエラーの解析がログ頼みになりがちなので(HTMLのレンダリングしてれば画面にエラーが出ることが多い)、そもそもログが出てないと何も分からず無駄に時間を使ってしまいました・・