Docker + CakePHP4.2 + VSCode でデバッグサーバに接続する
日中そういうことにドハマリしたので、日々の勉強がてらやってみて成功したのでメモしてみる。
ということで、上記バージョン以外ではどうかは保証外。
ディレクトリ構成
ということでこの状態からガンガン行こうか
xdebug の設定(php.ini
)
php.ini
にこんな感じでケツに追記した。
元となるファイルは、PHP の Docker コンテナ起動してから「/usr/local/etc/php/php.ini-develop
」をコピって来ればいいでしょう。
[xdebug] xdebug.idekey = "PHPVSCode" xdebug.client_host = 'host.docker.internal' xdebug.client_port = 9003 xdebug.mode = "debug" xdebug.output_dir = "/root/codes/trace_logs" xdebug.remote_handler = "dbgp" xdebug.start_with_request = yes xdebug.log_level = 10
デバッグ設定はすごく癖が強くて、Java ならデバッグサーバが立ち上がってそこに IDE が接続詞に行きますが、PHP はデバッグサーバが指定のクライアントにデバッグ接続しに行くという流れがあるようです。
それを知らないとガチでハマります。
今回は Docker 内の PHP からホストマシンの 9003
ポートへ接続しに行きます。
Dockerfile
こっちはこんな感じ
FROM php:7-fpm-buster RUN apt-get update && \ apt-get upgrade -y && \ apt-get install -y unzip curl wget git gcc libicu-dev RUN docker-php-ext-install intl pdo pdo_mysql RUN pecl install xdebug && docker-php-ext-enable xdebug COPY --from=composer /usr/bin/composer /usr/bin/composer ADD ./php.ini /usr/local/etc/php/ WORKDIR /root/codes CMD cms/bin/cake server -H 0.0.0.0 -p 80 EXPOSE 80
最後の2行は、CakePHP のインストール後に入力しませう。
docker-compose.yml
設定
docker-compose.yml
も一応晒します。
version: '3.7' services: host: restart: always build: ./data/main environment: TZ: 'Asia/Tokyo' volumes: - './sources:/root/codes' ports: - "8765:80" tty: true stdin_open: true
VSCode の設定
先ずはこのプラグインをインストール
すると VSCode のデバッグアイコン内はこんな感じになります。
「create a launch.json file」 のリンクから PHP の JSON ファイル開いて
{ "version": "0.2.0", "configurations": [ { "name": "XDebug on docker", "type": "php", "request": "launch", "port": 9003, "pathMappings": { // {docker上のdocument root}:{ローカルのdocument root} "/root/codes/cms":"/Users/armeria/workspace/PHP/cakePhp/sources/cms" }, "ignore": [ "**/vendor/**/*.php" ] } ] }
これで準備 OK。
お試し
Docker 起動して
% docker-compose up -d Starting cakephp_host_1 ... done %
VSCode のデバッガを立ち上げます。
適当なソース(デフォルト生成の先頭にクエリだけ突っ込んだもの)にブレークポイント仕掛けて
アクセスすると
(`・ω・´)シャキーン