Ruu*_*Ven 13 phpstorm laravel docker
因此,经过数小时的谷歌搜索,没有找到正确的答案。我已经开始使用 Docker 和 Laravel 的风帆为 Windows 安装 Laravel 8.x 教程。
现在我想使用 Xdebug 并且完全不知道该怎么做。
在项目的根目录中有一个 docker-compose.yml (这是默认值)
# For more information: https://laravel.com/docs/sail
version: '3'
services:
laravel.test:
build:
context: ./vendor/laravel/sail/runtimes/8.0
dockerfile: Dockerfile
args:
WWWGROUP: '${WWWGROUP}'
image: sail-8.0/app
ports:
- '${APP_PORT:-80}:80'
environment:
WWWUSER: '${WWWUSER}'
LARAVEL_SAIL: 1
PHP_IDE_CONFIG: 'serverName=localhost'
volumes:
- '.:/var/www/html'
networks:
- sail
depends_on:
- mysql
- redis
# - selenium
# selenium:
# image: 'selenium/standalone-chrome'
# volumes:
# - '/dev/shm:/dev/shm'
# networks:
# - sail
# depends_on:
# - laravel.test
mysql:
image: 'mysql:8.0'
ports:
- '${DB_PORT}:3306'
environment:
MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
MYSQL_DATABASE: '${DB_DATABASE}'
MYSQL_USER: '${DB_USERNAME}'
MYSQL_PASSWORD: '${DB_PASSWORD}'
MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
volumes:
- 'sailmysql:/var/lib/mysql'
networks:
- sail
redis:
image: 'redis:alpine'
ports:
- '${REDIS_PORT}:6379'
volumes:
- 'sailredis:/data'
networks:
- sail
# memcached:
# image: 'memcached:alpine'
# ports:
# - '11211:11211'
# networks:
# - sail
mailhog:
image: 'mailhog/mailhog:latest'
ports:
- 1025:1025
- 8025:8025
networks:
- sail
networks:
sail:
driver: bridge
volumes:
sailmysql:
driver: local
sailredis:
driver: local
Run Code Online (Sandbox Code Playgroud)
在 vendor/laravel/sail/runtimes/8.0 文件夹中有一个 Dockerfile
FROM ubuntu:20.04
LABEL maintainer="Taylor Otwell"
ARG WWWGROUP
WORKDIR /var/www/html
ENV DEBIAN_FRONTEND noninteractive
ENV TZ=UTC
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN apt-get update \
&& apt-get install -y gnupg gosu curl ca-certificates zip unzip git supervisor sqlite3 libcap2-bin \
&& mkdir -p ~/.gnupg \
&& echo "disable-ipv6" >> ~/.gnupg/dirmngr.conf \
&& apt-key adv --homedir ~/.gnupg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys E5267A6C \
&& apt-key adv --homedir ~/.gnupg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys C300EE8C \
&& echo "deb http://ppa.launchpad.net/ondrej/php/ubuntu focal main" > /etc/apt/sources.list.d/ppa_ondrej_php.list \
&& apt-get update \
&& apt-get install -y php8.0-cli php8.0-dev \
php8.0-pgsql php8.0-sqlite3 php8.0-gd \
php8.0-curl php8.0-memcached \
php8.0-imap php8.0-mysql php8.0-mbstring \
php8.0-xml php8.0-zip php8.0-bcmath php8.0-soap \
php8.0-intl php8.0-readline \
php8.0-msgpack php8.0-igbinary php8.0-ldap \
php8.0-redis \
&& php -r "readfile('http://getcomposer.org/installer');" | php -- --install-dir=/usr/bin/ --filename=composer \
&& curl -sL https://deb.nodesource.com/setup_15.x | bash - \
&& apt-get install -y nodejs \
&& apt-get -y autoremove \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
RUN setcap "cap_net_bind_service=+ep" /usr/bin/php8.0
RUN groupadd --force -g $WWWGROUP sail
RUN useradd -ms /bin/bash --no-user-group -g $WWWGROUP -u 1337 sail
COPY start-container /usr/local/bin/start-container
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
COPY php.ini /etc/php/8.0/cli/conf.d/99-sail.ini
RUN chmod +x /usr/local/bin/start-container
EXPOSE 8000
ENTRYPOINT ["start-container"]
Run Code Online (Sandbox Code Playgroud)
怎么办?我在 Windows 系统上,我想将它连接到 PhpStorm
小智 16
我在 Linux 工作站上的 VS Code 遇到了同样的问题。
也许我的解决方案也适用于您。
显然,Laravel Sail 根本没有安装 XDebug。为了包含它,您必须修改Dockerfile、编辑docker-compose.yml和重建容器。
这就是我所做的。
cp -r vendor/laravel/sail/runtimes/8.0 ./resources/docker/
context并args在以下的第一行添加了一个变量docker-compose.yml:# For more information: https://laravel.com/docs/sail
version: '3'
services:
laravel.test:
build:
context: ./resources/docker/8.0
dockerfile: Dockerfile
args:
WWWGROUP: '${WWWGROUP}'
XDEBUG: ${APP_DEBUG}
...
Run Code Online (Sandbox Code Playgroud)
所以context我复制了原始 Docker 配置的点。我还决定将新的XDEBUGarg绑定到文件中APP_DEBUG变量的值.env,以便在生产环境中关闭 XDebug。
Dockerfile我之前复制的内容,以便在构建容器时包含 xdebug。该脚本还应该在里面为 Xdebug 3 编写正确的配置选项php.ini:FROM ubuntu:20.04
LABEL maintainer="Taylor Otwell"
ARG WWWGROUP
ARG XDEBUG
WORKDIR /var/www/html
ENV DEBIAN_FRONTEND noninteractive
ENV TZ=UTC
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN apt-get update \
&& apt-get install -y gnupg gosu curl ca-certificates zip unzip git supervisor sqlite3 libcap2-bin \
&& mkdir -p ~/.gnupg \
&& echo "disable-ipv6" >> ~/.gnupg/dirmngr.conf \
&& apt-key adv --homedir ~/.gnupg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys E5267A6C \
&& apt-key adv --homedir ~/.gnupg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys C300EE8C \
&& echo "deb http://ppa.launchpad.net/ondrej/php/ubuntu focal main" > /etc/apt/sources.list.d/ppa_ondrej_php.list \
&& apt-get update \
&& apt-get install -y php8.0-cli php8.0-dev \
php8.0-pgsql php8.0-sqlite3 php8.0-gd \
php8.0-curl php8.0-memcached \
php8.0-imap php8.0-mysql php8.0-mbstring \
php8.0-xml php8.0-zip php8.0-bcmath php8.0-soap \
php8.0-intl php8.0-readline \
php8.0-msgpack php8.0-igbinary php8.0-ldap \
php8.0-redis
RUN if [ ${XDEBUG} ] ; then \
apt-get install -y php-xdebug \
&& echo "[XDebug]" > /etc/php/8.0/cli/php.ini \
&& echo "zend_extension="$(find /usr/lib/php/20200930/ -name xdebug.so)" > /etc/php/8.0/cli/php.ini" \
&& echo "xdebug.mode = debug" >> /etc/php/8.0/cli/php.ini \
&& echo "xdebug.start_with_request = yes" >> /etc/php/8.0/cli/php.ini \
&& echo "xdebug.discover_client_host = true" >> /etc/php/8.0/cli/php.ini ;\
fi;
RUN php -r "readfile('http://getcomposer.org/installer');" | php -- --install-dir=/usr/bin/ --filename=composer \
&& curl -sL https://deb.nodesource.com/setup_15.x | bash - \
&& apt-get install -y nodejs \
&& apt-get -y autoremove \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
RUN setcap "cap_net_bind_service=+ep" /usr/bin/php8.0
RUN groupadd --force -g $WWWGROUP sail
RUN useradd -ms /bin/bash --no-user-group -g $WWWGROUP -u 1337 sail
COPY start-container /usr/local/bin/start-container
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
COPY php.ini /etc/php/8.0/cli/conf.d/99-sail.ini
RUN chmod +x /usr/local/bin/start-container
EXPOSE 8000
ENTRYPOINT ["start-container"]
Run Code Online (Sandbox Code Playgroud)
$ ./vendor/bin/sail stop
$ ./vendor/bin/sail up --build -d
Run Code Online (Sandbox Code Playgroud)
您可以查看 XDebug 是否正在运行:
$ ./vendor/bin/sail php -v
PHP 8.0.0 (cli) (built: Nov 27 2020 12:26:22) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.0-dev, Copyright (c) Zend Technologies
with Zend OPcache v8.0.0, Copyright (c), by Zend Technologies
with Xdebug v3.0.1, Copyright (c) 2002-2020, by Derick Rethans
Run Code Online (Sandbox Code Playgroud)
仅适用于 VSCode:
里面Preferences -> Settings下Debug你应该检查“调试:无处不在允许断点”。
更改默认launch.json文件:
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Listen for XDebug",
"type": "php",
"request": "launch",
"port": 9003,
"pathMappings": {
"/var/www/html" : "${workspaceFolder}"
}
},
{
"name": "Launch currently open script",
"type": "php",
"request": "launch",
"program": "${file}",
"cwd": "${fileDirname}",
"port": 9000
}
]
}
Run Code Online (Sandbox Code Playgroud)
在上面海报的一些帮助之后,我让 XDebug 处理网络请求。
我对 PHPStorm 和 XDebug 2.x 有相当多的经验。我是 docker 新手,所以可能有更好的方法来解决这个问题。我还没有弄清楚如何运行或调试依赖于 PHPStorm 内部数据库连接的测试(右键单击测试进行调试)。如果我正在“侦听” sail test(这将正确运行测试),它们会使用断点成功运行,但 PHPStorm 在运行测试时找不到 MySQL 数据库,我也收到此错误:“Xdebug: [Step Debug] 无法连接到调试客户端。试过:host.docker.internal:9003"
更新 1/18/21 以修复 PHPStorm 中的本地环境,以便它可以找到数据库和 Docker 网络的其余部分。现在我可以在 PHPStorm 中成功运行测试和调试。对于 PHPStorm 2020.3.1 的当前版本,您需要在要求网络模式的位置添加网络名称。我将向他们报告此事,以便尽快解决。
通过运行获取您的网络名称docker network ls。在这种情况下,它是 myProjectName_sail。
NETWORK ID NAME DRIVER SCOPE
8e8635ce01a6 bridge bridge local
401307dbfaad host host local
ad8020ad629e myProjectName_sail bridge local
d85a9668cade none null local
Run Code Online (Sandbox Code Playgroud)
在 PHPStorm Preferences>PHP>CLI Interpreter>...
关于调试 Web 请求的修复:
我拥有的:
我做了什么:
RUN apt-get -y install vimdocker exec -it mySite.test_1 vim /etc/php/8.0/cli/php.ini.你需要让你的/etc/php/8.0/cli/php.ini文件看起来像这样(client_host 是关键):
[XDebug]
xdebug.mode = debug
xdebug.start_with_request = yes
xdebug.client_host = host.docker.internal
Run Code Online (Sandbox Code Playgroud)
我按照@Enea74 的建议将其添加到 Dockerfile 中。我很难让条件返回 TRUE,所以我TRUE现在在这里硬编码:
RUN if [ true ] ; then \
apt-get install -y php-xdebug \
&& echo "[XDebug]" > /etc/php/8.0/cli/php.ini \
&& echo "zend_extension="$(find /usr/lib/php/20200930/ -name xdebug.so)" > /etc/php/8.0/cli/php.ini" \
&& echo "xdebug.mode = debug" >> /etc/php/8.0/cli/php.ini \
&& echo "xdebug.start_with_request = yes" >> /etc/php/8.0/cli/php.ini \
&& echo "xdebug.client_host = host.docker.internal" >> /etc/php/8.0/cli/php.ini ;\
fi;
Run Code Online (Sandbox Code Playgroud)
sail build --no-cachesail up -dsail php -v
返回:
PHP 8.0.0 (cli) (built: Nov 27 2020 12:26:22) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.0-dev, Copyright (c) Zend Technologies
with Zend OPcache v8.0.0, Copyright (c), by Zend Technologies
with Xdebug v3.0.1, Copyright (c) 2002-2020, by Derick Rethans
Run Code Online (Sandbox Code Playgroud)
现在在 PHPStorm 中执行以下操作。我认为它自己发现了许多这些设置:我不记得设置所有这些值:
希望这会帮助某人。
为了运行 xdebug,您需要安装 PHP 扩展。我个人喜欢使用docker-php-extension-installer来安装它们。
在第 35 行后添加这些行:
ADD https://raw.githubusercontent.com/mlocati/docker-php-extension-installer/master/install-php-extensions /usr/local/bin/
RUN chmod +x /usr/local/bin/install-php-extensions && sync && \
install-php-extensions xdebug
Run Code Online (Sandbox Code Playgroud)
在第 35 行后添加这些行:
RUN sudo apt-get install php-xdebug
Run Code Online (Sandbox Code Playgroud)
之后您需要配置 Xdebug、PhpStorm 和您的浏览器。
xdebug.ini
zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20180731/xdebug.so
xdebug.remote_host=host.docker.internal
xdebug.remote_enable=1
xdebug.remote_autostart=1
xdebug.remote_port=9000
xdebug.idekey=PHPSTORM
Run Code Online (Sandbox Code Playgroud)
Remote_port和remote_host都非常重要。确保此端口不与容器内的服务冲突,在这种情况下不要使用8000 ,因为 PHP 已在此端口上运行。
您需要首先在以下位置创建一个服务器:
文件 > 设置 > 语言和框架 > PHP > 服务器
在这种情况下,正确映射路径非常重要: .:/var/www/html
这意味着左侧的项目根目录应该映射到/var/www/html
现在是时候创建运行配置了。您可以在 PhpStorm 右上角的“添加配置...”下执行此操作
使用屏幕截图作为指导。
| 归档时间: |
|
| 查看次数: |
6073 次 |
| 最近记录: |