awsのcloud9でdocker上のcakePHPをリモートデバックしたくて、頑張ったらできた。
ほかのphpのIDEだと、リモートデバッグする時にpath mappingみたいな設定ができるけど、cloud9だとそれがなさそう。かわりに、dockerもcloud9と同じpathにしたら動いたので。そのメモ。
ファイル一覧
- Dockerfile-php-container … DockerFile
- docker-compose.yml … docker compose ファイル
- My Runner … Cloud9のDebug用Runnerファイル
作業フォルダ
cloud9上で、作業するフォルダを作成
mkdir /home/ec2-user/environment/php/cake_dev/
cd /home/ec2-user/environment/php/cake_dev/
Docker準備
上で作ったフォルダに次のファイルを作って配置
Dockerfile-php-container
php7.2でcakePHPに必要なプラグインとxdebugの設定を書いたDockerFileをこんな感じで。xdebug.remote_hostは 親docker のipを指定。
FROM php:7.2-fpm
RUN apt-get -y update \
&& apt-get install -y libicu-dev\
&& docker-php-ext-configure intl \
&& docker-php-ext-install intl \
&& docker-php-ext-install pdo_mysql
RUN pecl install xdebug \
&& docker-php-ext-enable xdebug \
&& echo "xdebug.remote_enable=1" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
&& echo "xdebug.remote_host=172.17.0.1" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
&& echo "xdebug.remote_autostart=1" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
&& echo "xdebug.remote_mode=req" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \
&& echo "xdebug.idekey=cloud9ide" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
docker-compose.yml
cloud9のRunnerだと、リモートDebugした時に src の pathを合わせることができなそうなので、dockerとcloud9の path を揃えてます。
今回は、このpath:/home/ec2-user/environment/php/cake_dev/
version: '3'
services:
db:
image: mysql:5.7
container_name: mydb
environment:
MYSQL_ROOT_PASSWORD: pass
MYSQL_DATABASE: cake_cms
MYSQL_USER: devuser
MYSQL_PASSWORD: devpass
ports:
- "3306:3306"
volumes:
- mysqldata:/var/lib/mysql
web:
build:
context: .
dockerfile: Dockerfile-php-container
container_name: php_web
depends_on:
- db
# for cloud9 runner (debug) -> Make the directory structure the same
volumes:
- /home/ec2-user/environment/php/cake_dev/:/home/ec2-user/environment/php/cake_dev/
ports:
- "8888:8888"
links:
- db
command: bash -c "cd /home/ec2-user/environment/php/cake_dev/cms && bin/cake server -H 0.0.0.0 -p 8888"
volumes:
mysqldata:
Cloud9のRunnner
My Runner
xdebugしたいだけなので、scriptは止まらないように cat あとは、debughostにdockerのip を指定してます。
// This file overrides the built-in PHP (cli) runner
// For more information see http://docs.aws.amazon.com/console/cloud9/change-runner
{
"script": [
"cat "
],
"selector": "^.*\\.(php|phar)$",
"info": "Running PHP script $file",
"working_dir": "/",
"debugger": "xdebug",
"debughost": "172.17.0.1",
"debugport": 9000,
"env": {},
"trackId": "cloud9ide"
}
CakePHP準備
CakePHPはcloud9上のフォルダにジェネレーターで資材一式を作って、docker-composeのvolumesでdockerから見えるような構成にしてます。
作成
curl -s https://getcomposer.org/installer | php
php composer.phar create-project --prefer-dist cakephp/app cms
動作確認
docker起動
docker-compose up -d
runner起動
ボタンポチ
ブレークポイント
cms/src/Controller/PagesController.php の適当なところにブレークポイント
URLにアクセス
cloud9のurlにポート8888でアクセスして、ブレークポイントで止まればOK
※ 8888のポートはAWSの管理コンソールで空けておかないと、届かないので注意。
docker停止
docker-compose down