環境が変わるたびに Xdebug の設定にハマってブログに書いている いしかわ です。
今回も開発環境が Docker に変わり、案の定ハマったので足跡を残しておきます(苦笑
それと、弊社ではめずらしい求人が出ていることがありますので、どうぞ見てみてください。
>> 採用情報はコチラ
■ 構成
OS X Yosemite
Docker for Max
Docker version 1.12.5
Webサーバーコンテナ
CentOS 6.8
PHP 5.3.3
Xdebug 2.1.4
DBサーバーコンテナ
MySQL
最初、よくわからなかったのがネットワーク構成。おそらく以下のような感じのはず?
MacはWifiにて 192.168.0.x を利用。ただ、ネットワークを移動すると 192.168.3.x や 192.168.11.x なども利用しています。
Docker for Mac を入れると、Mac の eth0 に対して 172.17.0.1 が割り当てられます。
Docker内の各コンテナには ランダムに空いているIPが割り当てられます。Webコンテナは 172.17.0.2、DBコンテナに 172.17.0.3 が振られていました。
Docker 内は bridge ネットワークとなっており、コンテナ起動時にコンテナ内に直接書き込まれるようです。
■ Xdebug の設定
CentOS 6.8、PHP5.3.3 の環境にて、Xdebug 自体は入っており /etc/php.d/xdebug.ini が確認できました。
xdebug.ini を以下のように書き換えます。Dockerfile の COPY なり RUN echo なりご自由な感じで。
zend_extension=/usr/lib64/php/modules/xdebug.so
xdebug.idekey = "PHPSTORM"
xdebug.remote_autostart= 1
xdebug.remote_connect_back = 1
xdebug.remote_enable = 1
Apache が立ち上がるように、Dockerfileの末尾は以下としています。
EXPOSE 80
ENTRYPOINT ["/usr/sbin/httpd", "-DFOREGROUND"]
以下にてコンテナを起動。
docker run -d -p 80:80 image_name
※ -p 9000:9000 などは必要なし。Xdebug の 9000 は、Webサーバー側からMac側への通信のため。
http://localhost/info.php なり何なりで、phpinfo() の中身を確認。Xdebug が確認できればOK。
■ PHPStorm でデバッグ実行
PHPStorm を適切に設定する。
Run/Debug Configrations は PHP Remote Debug にて。
DBGp Proxy は設定せず。
Servers では Use path mappings で 手元のファイルと位置を合わせる。
Deployment では Connection の Type を Local or mounted folder に。Mappings でも位置を合わせる。
で、デバッグを実行。いつもなら引っかかるはずなのだが・・・、引っかからず。
んー、なんでだろう、アレコレ探しているとわかったことが。
どうも、xdebug.remote_connect_back は$_SERVER[‘HTTP_X_FORWARDED_FOR’] か $_SERVER[‘REMOTE_ADDR’] の値に対してポート9000で通信するようです。
説明の詳細はここのGif画像でも確認できます。 https://xdebug.org/docs/remote
実際に、PHP内で下記のように確認してみると、Dockerの内部ネットワークIPが表示された。
echo $_SERVER['HTTP_X_FORWARDED_FOR']; // 空
echo $_SERVER['REMOTE_ADDR']; // 172.17.0.1
んー、もしかすると内部ネットワークIPを指してしまうので、IDEで拾えないのかもしれないですね。
で、以下のように Xdebug の設定を変えてみました。
xdebug.remote_connect_back = 0
xdebug.remote_host = 192.168.0.10
すると、IDE でデバッグが引っかかりました。
しかし課題が。私の環境ではオフィスによってWifiのIPが変わるため、切替のたびに xdebug.remote_host を変えたくないのです。
■ Mac の en0 に複数のIPを割り当てる
いろいろ調べていたところ、Macでは1つのNICに複数のIPを振れるようです。
sudo ifconfig en0 alias 10.254.254.254
これで ifconfig してみると en0 に2つのIPが振られていました。
次に、PHPStorm で設定します。なぜこのような設定なのかは分からなかったのですが、おそらくIDE側からXdebugに対して10.254.254.254:9000 に対して通信してくれと連絡するような設定なのでしょうか。
xdebug.ini についても以下のように設定します。
xdebug.remote_connect_back = 0
xdebug.remote_host = 10.254.254.254
試してみると、デバッグに成功しました。
しかし、また課題が。
今度はMacを再起動すると en0 に設定した alias が消えているではありませんか。
■ en0 の alias を消えないように
ifconfig en0 alias の設定が再起動しても消えないように、調べてみると Apple の公式の回答がありました。
GUIの System Preferences > Network で en0 を選択し、 Duplicate Service を選択し設定すると再起動しても消えないとのこと。
実際に試してみると、再起動しても設定は消えず問題は解決しました。
うむ、これにて一件落着。
ロゴスウェア
最新記事 by ロゴスウェア (全て見る)
- Amazon Linux(EC2)と PHPSTORM で Xdebug を行う - 2018年9月26日
- やらないことの合意 - 2018年6月27日
- 卒園アルバムとプロジェクトマネジメント - 2018年3月30日
Comments are closed.