Ở phần trước mình trình bày cách cài đặt cấu hình docker chạy nginx code php và mysql nhưng chưa đề cập đến việc config code xdebug. Nay mình hướng dẫn tiếp phần đó

Cài thêm xdebug cho docker - nginx - vscode - php-fpm - macos

2022-03-20 823 lượt xem
Trương Thanh Hùng

Cài thêm xdebug cho docker

Ở phần trước ( Cài đặt môi trường phát triển php với docker ) chúng ta đã làm việc đến phần docker-compose tạo php. Ở phần này mình xin nói ngắn gọn cách cài xdebug: 

Đây là file docker compose của mình với nội dung có cả mysql, nginx và php custom file: 

version: '3'
services:
    web:
        image: nginx:latest
        ports:
            - "80:80"
        volumes:
            - ./nginx.conf:/etc/nginx/conf.d/nginx.conf
            - ./app:/app
    php:
        build:
            context: .
            dockerfile: PHP_CUSTOM.Dockerfile
        volumes:
            - ./app:/app
            - ./xdebug.ini:/usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
    mysql:
        image: mariadb:latest
        environment:
            MYSQL_ROOT_PASSWORD: 'secret'
            MYSQL_USER: 'admin'
            MYSQL_PASSWORD: 'secret'
            MYSQL_DATABASE: 'testing'
        volumes:
            - mysqldata:/var/lib/mysql
        ports:
            - 3306:3306
volumes:
    mysqldata: {}

có cái đoạn khá quan trọng: 

./xdebug.ini:/usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini

ý nói là chúng ta sẽ bind file xdebug.ini vào trong folder /usr/local/etc/php/conf.d/ Vậy chúng ta sẽ có 1 file có tên là xdebug.ini như sau:

# xdebug.ini
zend_extension=xdebug.so
# For xdebug 3
xdebug.mode=debug,profile,trace
xdebug.start_with_request=yes
xdebug.client_host=host.docker.internal
xdebug.client_port=9001
xdebug.log_level=0
xdebug.remote_enable=1
xdebug.idekey=VSCODE
xdebug.remote_autostart=1

còn docker file của php custom thì vẫn như cũ : 

/PHP_CUSTOM.Dockerfile nội dung như sau:

FROM php:7.3-fpm
RUN docker-php-ext-install pdo pdo_mysql
RUN pecl install xdebug && docker-php-ext-enable xdebug

vì trong file docker compose mình có nói là code php sẽ được bind từ ./app:/app  nên khi config file cài đặt của vscode sẽ như này:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "XDebug (Docker)",
            "type": "php",
            "request": "launch",
            "port": 9001,
            "pathMappings": {
                "/app": "${workspaceRoot}/app",
            }
        }
    ]
}

Chú ý đoạn cài đặt pathMappings được định nghĩa bind từ app qua ${workspaceRoot}/app nghen!

Gọi lệnh :

docker-compose build --no-cache
docker-compose up

kết quả

và đặt debug thì được: