Help us understand the problem. What is going on with this article?

vagrant+virtualbox+ubuntu上のdocker上のphp+apacheのxdebug+vscodeについてハマったメモ

More than 1 year has passed since last update.

概要

dockerでphp5.4の開発環境を作ったメモ。古い環境での開発は面倒ですね。
vscodeにphp debugをいれてデバッグ実行。
デバッグポイントで止まらなくてハマったが、以下の記事で紹介されていた方法で解決。
VisualStudioCodeのデバッグでどうしてもブレークで止まらない場合 (PHP Xdebug)

※2018/09/06 追記
この情報は古くなっている場合があります。 最新の環境だとXdebug動きませんでした。
新しい環境で動かしたみた記事はこちら → xdebug+nginx+vscode

動作環境

  • windows10
  • vagrant2.0.2
  • virtualbox5.1.26
  • ubuntu-16.04
  • Docker version 17.09.0-ce, build 19e2cf6
  • docker-compose version 1.18.0, build 8dd22a9

構造

project
  - .vscode
    - launch.json
  + server # Docker用ファイル
  + src    # phpソースファイル
  + logs   # ログ・ファイル
  - docker-compose.yml

設定

ホスト:Visual Studio Code の PHP DEBUGの設定

"stopOnEntry": true,の設定がないとステップ実行できなかった。

.vscode/launch.json
{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Listen for XDebug",
      "type": "php",
      "request": "launch",
      "port": 9000,
      "stopOnEntry": true,
      "log": true,
      "pathMappings": {
          "/var/www/html": "${workspaceRoot}/src"
      }
    }
  ]
}

ゲスト: apacheサーバの設定

server/apache/Dockerfile
FROM php:5.4-apache

# Apacheモジュールインストール
RUN a2enmod rewrite

# PHPモジュールインストール
RUN docker-php-ext-install mbstring
RUN docker-php-ext-install mysql


# Install xdebug for php debugging
RUN apt-get update
RUN apt-get install -y php-pear
RUN pecl install xdebug-2.4.1

RUN echo "zend_extension=$(find /usr/local/lib/php/extensions/ -name xdebug.so)" > /usr/local/etc/php/conf.d/xdebug_settings.ini \
    && echo "debug.default_enable = 1" >> /usr/local/etc/php/conf.d/xdebug_settings.ini \
    && echo "xdebug.remote_enable=on" >> /usr/local/etc/php/conf.d/xdebug_settings.ini \
    && echo "xdebug.remote_autostart=on" >> /usr/local/etc/php/conf.d/xdebug_settings.ini \
    && echo "xdebug.remote_connect_back = on" >> /usr/local/etc/php/conf.d/xdebug_settings.ini \
    && echo "xdebug.remote_log = /var/log/apache2/xdebug.log" >> /usr/local/etc/php/conf.d/xdebug_settings.ini

# php設定
RUN echo '\
date.timezone = "Asia/Tokyo"\n\
memory_limit = -1\n\
' >> /usr/local/etc/php/php.ini

# PHPのログを出力
# error_log = /dev/stderr\n\
RUN echo '\
log_errors = On\n\
error_log = /var/log/apache2/php.log\n\
error_reporting = E_ALL\n\
display_errors = On\n\
' >> /usr/local/etc/php/conf.d/docker.ini

# apacheのログを出力
RUN echo '\
CustomLog /var/log/apache2/access.log combined \n\
ErrorLog /var/log/apache2/error.log\n\
LogLevel warn\n\
' >> /etc/apache2/conf-enabled/log.conf
docker-compose.yml
version: "3"
services:
  # サーバー
  php: 
    build: ./server/apache
    volumes:
      - ./src:/var/www/html
      - ./logs:/var/log/apache2
    ports: 
      - "80:80"

この時点のソース

vscodeを起動して、デバッガを起動しておく。
apacheを立ち上げて、表示されたページにブラウザからアクセスするとステップ実行可能。
"stopOnEntry": true,により、デバッグポイントがなくても、ファイルの最初でストップする。

おまけ

PHP7 + nginx でも同様に設定できた。

server/php7/Dockerfile
FROM php:7-fpm
RUN apt-get update 
RUN docker-php-ext-install pdo_mysql

RUN pecl install xdebug

RUN echo "zend_extension=$(find /usr/local/lib/php/extensions/ -name xdebug.so)" > /usr/local/etc/php/conf.d/xdebug_settings.ini \
    && echo "debug.default_enable = 1" >> /usr/local/etc/php/conf.d/xdebug_settings.ini \
    && echo "xdebug.remote_enable=on" >> /usr/local/etc/php/conf.d/xdebug_settings.ini \
    && echo "xdebug.remote_autostart=on" >> /usr/local/etc/php/conf.d/xdebug_settings.ini \
    && echo "xdebug.remote_connect_back = on" >> /usr/local/etc/php/conf.d/xdebug_settings.ini


# PHPのログを出力
# error_log = /dev/stderr\n\
RUN echo '\
log_errors = On\n\
error_log =/dev/stderr\n\
error_reporting = E_ALL\n\
display_errors = On\n\
' >> /usr/local/etc/php/conf.d/docker.ini

この時点のソース

参考

Docker for Mac の PHPStorm で Xdebug を行う
Dockerで古いPHP(5.x)のXdebugを組み込んだデバッグ環境を構築する
PHP開発者がいまさら聞けない、Xdebugの基礎の基礎
PHP5.4に対応するXdebugは2.4.1
vscode-php-debug
UbuntuへのPECL xdebugインストール
vagrant:ubuntu + docker + nginx + xdebug
【Xdebug】Windows 7のVagrant でリモートデバッグできない問題
VS CodeのDebug Extension設定について
XDEBUG EXTENSION FOR PHP | DOCUMENTATION
VisualStudioCodeのデバッグでどうしてもブレークで止まらない場合 (PHP Xdebug)
VSCodeでPythonをデバッグする
xdebug-php.md
nginx+php7.0+xdebugインストールではまったこと
UbuntuのPHP開発環境
Vagrant上のPHPを Xdebug + NetBeans(おまけでVisual Studio Codeでも)でリモートデバッグする

hibohiboo
Javascriptが好きです。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした