前提
PHP公式のDockerイメージphp:8.1-apache-buster
を使ってLaravel9を実行しています。
artisan
コマンドを使うと、ログファイルの所有者がroot
ユーザーになってしまい、WEBアクセス時にパーミッションエラーが発生してしまうので、下記リンク先を参考にログ出力ファイルを分けることをしようと思いました。
ところが、whoami
やphp_sapi_name()
、posix_geteuid()
で取得できる内容は、artisan
コマンド実行時でもWEBアクセス時でも同じになってしまい、まったく区別ができない状態です。
【Laravel】ログファイルのPermission deniedを恒久的に防ぐ
Laravel でログファイルの権限が原因で php artisan が失敗する
実現したいこと
ログの設定で、ログファイルのパーミッションを666
などにすればパーミッションエラーは回避できると思いますが、できればDockerコンテナ上でPHPの実行環境がWEBアクセスなのかCLIなのかを区別できるようにする方法が知りたいです。
よろしくお願いします。
試したこと
以下の関数、コマンドを試してみましたが、どれも同じ結果になります。
php
1// config/logging.phpでpathに下記結果を設定しても、CLI呼出しの内容に固定されてしまう 2// ⇒ 解決策に書いていますがキャッシュにより、 3// 呼び出し時の値ではなくartisan config:cache実行時の値に固定されてしまうことが原因でした。 4 5trim(`whoami`); // →WEBでもCLIでも同じく root 6php_sapi_name(); // →WEBでもCLIでも同じく cli 7posix_geteuid(); // →WEBでもCLIでも同じく 0 8posix_getuid(); // →WEBでもCLIでも同じく 0
補足情報(FW/ツールのバージョンなど)
Laravel v9.24.0
Dockerfile
1FROM php:8.1-apache-buster 2 3ENV APACHE_DOCUMENT_ROOT="Laravelのpublicディレクトリ" 4 5ADD https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/ 6RUN apt-get update \ 7 && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ 8・・・ 9// 必要なパッケージのインストールやapacheのドキュメントルートの変更など 10・・・ 11 && a2enmod rewrite 12 13// エントリポイントを設定する 14COPY start-app.sh /opt/ 15RUN chmod +x /opt/start-app.sh 16ENTRYPOINT ["/opt/start-app.sh"]
bash
1#!/bin/sh 2 3# Dockerfileで設定したエントリポイントとなるstart-app.shファイル 4 5・・・ 6# キーの生成や設定やビューのキャッシュなど 7・・・ 8 9# apacheをフォアグラウンド実行する 10apache2-foreground
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。