LoginSignup
1
2

More than 3 years have passed since last update.

Xdebugを使えるDockerローカル開発環境

Posted at

前提

ローカル(自PC)に Docker Desktop で開発環境を構築する場合を想定しています。
LAN内の別PC・サーバーやVPS、AWS・GCP等のクラウド上での設定にはあわないのでご注意を。

ローカル開発環境の作成

Xdebug をインストールした php-fpm と Nginx の環境を作成します。
1つディレクトリを作成してその中で作業してください。

Xdebug設定

Xdebugの設定ファイルを作成します。
デバッグ(ステップ実行)するかはIDE側(PhpStormなど)で切り換える使い方になります。

docker-php-ext-xdebug.ini
zend_extension = xdebug.so

xdebug.remote_enable = "1"
xdebug.remote_autostart = "1"
xdebug.remote_host = "host.docker.internal"
項目 設定内容
xdebug.remote_enable リモートデバッグを有効化
xdebug.remote_autostart リモートデバッグを自動で開始
xdebug.remote_host リモートデバッグの接続先ホスト(自PC)

Docker Desktop 環境ではリモートホストに host.docker.internal を指定します。

php-fpm

Xdebug をインストールした php-fpm のコンテナを作成します。

Dockerfile
FROM php:7.3-fpm-alpine3.10

RUN : "Install build dependencies ..."; \
    set -xe; \
    apk add --update --no-cache -t .build-deps \
        autoconf \
        build-base; \
    : "Install Xdebug ..."; \
    pecl install xdebug; \
    : "Cleanup ..."; \
    apk del --purge .build-deps; \
    pecl clear-cache;

PECLを使って Xdebug をインストールします。
インストールの段階では Xdebug の有効化はせず、Docker Compose のボリューム設定を使って Xdebug 設定ファイルをマウントして有効化します。

Nginx設定

Nginx のコンテナを動作させるための最小限の設定ファイルを作成します。

nginx-php-fpm.conf
server {
    listen 80 default_server;
    root /var/www/html/public;

    index index.html index.php;

    charset utf-8;

    access_log  /dev/stdout;
    error_log   /dev/stderr;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found off; }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass php-fpm:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }

    location ~ /\.ht {
        access_log off;
        log_not_found off;
        deny all;
    }
}

Docker Compose

php-fpm と Nginx を実行するための Docker Compose 設定を作成します。

docker-compose.yml
version: '3'

services:
  php-fpm:
    build:
      context: ./
      dockerfile: Dockerfile
    environment:
      PHP_IDE_CONFIG: "serverName=MyApp"
    expose:
      - "9000"
    volumes:
      - .:/var/www/html
      - ./docker-php-ext-xdebug.ini:/usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini:ro

  nginx:
    image: nginx:1-alpine
    expose:
      - "80"
    ports:
      - "80:80"
    volumes:
      - ./nginx-php-fpm.conf:/etc/nginx/conf.d/nginx-php-fpm.conf
項目 設定
PHP_IDE_CONFIG PhpStorm でコンソール実行のデバッグをするための設定

index.php

テスト用に実行するPHPファイルを作成します。

public/index.php
<?php
declare(strict_types=1);

if (PHP_SAPI === 'cli') {
    echo PHP_VERSION;
    return;
}

echo phpinfo();

環境を起動する

docker-compose up

http://127.0.0.1 にブラウザでアクセスしてPHP情報が表示されたらOKです。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2