はじめに
「Laravelの教科書」を参考に学習を始めました。ところが、環境設定でphpMyAdminを使えるようにする際、エラーが発生し解消に苦戦したため、備忘録として残します。
開発環境
- pc windows11
- PHP 8.3.16
- Laravel Framework 11.38.2
- dockerを使用
#現象
1.「Laravelの教科書」を参考にWSL、Ubuntu、Dockerをインストールし、Laravelプロジェクトを作成する。
2. プロジェクトファイル内のdocker-compose.ymlファイル、.envファイルを編集しphpMyAdmin用の設定を加える。
3. 編集後、Laravel Sailを起動しブラウザで http://localhost:8080/ を表示する。
4. 2で設定したユーザー名、パスワードを入力するとしログインしようとすると画像のようなエラーが出る。
原因
.envファイルの記述漏れでした。
docker-compose.ymlファイルには以下のように記述していました。
services:
laravel.test:
build:
context: './vendor/laravel/sail/runtimes/8.4'
dockerfile: Dockerfile
args:
WWWGROUP: '${WWWGROUP}'
image: 'sail-8.4/app'
extra_hosts:
- 'host.docker.internal:host-gateway'
ports:
- '${APP_PORT:-80}:80'
- '${VITE_PORT:-5173}:${VITE_PORT:-5173}'
environment:
WWWUSER: '${WWWUSER}'
LARAVEL_SAIL: 1
XDEBUG_MODE: '${SAIL_XDEBUG_MODE:-off}'
XDEBUG_CONFIG: '${SAIL_XDEBUG_CONFIG:-client_host=host.docker.internal}'
IGNITION_LOCAL_SITES_PATH: '${PWD}'
---以下省略
この中で WWWGROUP: '${WWWGROUP}'
と WWWUSER: '${WWWUSER}'
の記述がありますが、.env
ファイルには記述がありませんでした。
以下のように.envファイルの最終行に書き加えることで解決することができました。
WWWGROUP=1000
WWWUSER=1000
追記
この WWWGROUP: '${WWWGROUP}'
と WWWUSER: '${WWWUSER}'
についてChatGPTで調べると以下のことが分かりました。
WWWGROUP
と WWWUSER
は phpMyAdmin を使用するために必須ではありません。これらの環境変数は主に Laravel プロジェクト内で PHP アプリケーションがファイルの所有権やパーミッションを適切に扱うため に使用されます。
以下に WWWGROUP
と WWWUSER
の役割と、phpMyAdmin の関係について詳しく説明します。
WWWGROUP
と WWWUSER
の役割
WWWGROUP
と WWWUSER
は、主に以下の目的で使用されます:
-
Laravel のキャッシュやログのファイル所有権を正しく設定する
- Laravel のアプリケーションでは、
storage
ディレクトリ内にキャッシュやログが保存されます。これらのファイルをホストシステム上のユーザーとグループに合わせるために、WWWGROUP
とWWWUSER
を指定します。 - 通常、コンテナ内で動作する PHP (Apache/Nginx) プロセスの実行ユーザーを、ホスト側のユーザーと一致させるために使います。
- Laravel のアプリケーションでは、
-
Docker ボリュームのファイルアクセス権を適切に設定する
- Docker コンテナでマウントしたボリューム内のファイルにアクセスできるように、UID (ユーザーID) と GID (グループID) をホスト環境に合わせます。
例:
services:
app:
build:
context: .
environment:
WWWGROUP: "${WWWGROUP}" # ホストシステムのグループID
WWWUSER: "${WWWUSER}" # ホストシステムのユーザーID
phpMyAdmin における役割
-
phpMyAdmin 自体は
WWWGROUP
やWWWUSER
を必要としません。- phpMyAdmin はデータベースにアクセスするためのウェブインターフェースツールであり、これらの変数とは無関係です。
- phpMyAdmin の動作には、MySQL サーバー (
db
サービス) への接続情報 (PMA_HOST
やPMA_PORT
) が必要です。
phpMyAdmin をセットアップする際に必要な設定例:
services:
phpmyadmin:
image: phpmyadmin/phpmyadmin
ports:
- "8080:80"
environment:
PMA_HOST: db
PMA_PORT: 3306
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
MYSQL_DATABASE: example_db
この設定では、PMA_HOST
や PMA_PORT
が正しく設定されていれば、phpMyAdmin は正常に動作します。
まとめ
WWWGROUP
とWWWUSER
は Laravel や PHP のファイル権限管理に関連する変数です。- phpMyAdmin を使用する際には、これらの変数は不要です。
- phpMyAdmin のセットアップに必要なのは、MySQL サーバーの接続設定(
PMA_HOST
,PMA_PORT
など)だけです。
補足
もし Laravel プロジェクトをセットアップする際にエラーが発生し、WWWGROUP
や WWWUSER
が必要であれば、それを .env
ファイルに追加してください。ただし、phpMyAdmin の動作には影響しません。