何がしたい
dockerコンテナとしてnginxとphp-fpm動作させて、PhpStormを使ったxdebugによるリモートデバッグできるまでをやる
Overview
- mac
- dockerはdocker-for-mac
- dockerコンテナ上でnginxが動作
- dockerコンテナ上でphp-fpmが動作
- with Xdebug
- PhpStormでXdebugリモートデバッグをする
Source
HTTPリクエストの処理概要
- nginxにport:80でリクエストが飛ぶ
- nginxからphp-fpmにport:9000でリクエストが飛ぶ(9000はphp-fpmのデフォルト設定)
- php-fpmはphpを動作させてレスポンスする
- php上でxdebugが動作する (
xdebug.remote_autostart=1
なので、勝手に動作) - php上のxdebugが、phpの処理中に、
xdebug.remote_host
に対してDBGp接続(これなに?)を試みる - PhpStormがDBGpをうまくやっている・・・んだと思う(曖昧・・・💧)
- php上でxdebugが動作する (
- nginxがphp-fpmのレスポンスをクライアントに返す
(URLに?XDEBUG_SESSION_START=xxx
とかつける必要はないよ)
docker
- nginx用のコンテナ、php-fpm用のコンテナ を作成する
- docker-for-macだと、"dockerのホストマシン"というのはmacではなく、mac上で動いている仮想環境
- コンテナから見たmacは、docker.for.mac.host.internal
- (ちなみにホストマシンはhost.docker.internal)
- せっかくなので、docker-composeを使う
Xdebug
- なんでかXdebugがデフォルトで使うport:9000と、php-fpmがデフォルトで使うport:9000とが、被っているので、どちらかを変える必要がある
- なんでやねん
- 設定例
xdebug.idekey="PHPSTORM"
xdebug.remote_enable=1
xdebug.remote_host=docker.for.mac.host.internal
xdebug.remote_port=9001
xdebug.remote_autostart=1
; xdebug.remote_connect_back=1
- 設定を参考にしたページ・・・は色々あったけど、どれもしっくりこなかった。公式は https://xdebug.org/docs/all_settings
PhpStorm
よくわかんなかったんで適当にやった・・・