Docker、PHPStorm 和 Xdebug 权威指南
Docker 彻底改变了我们开发应用程序的方式。有了它,每个人都可以轻松地用一条命令运行复杂的应用程序,而无需担心依赖关系等内部细节。在团队或企业环境中,这些优势更加显著。我还记得刚加入现在这家公司的前三天,我配置了项目以及所有相关的库和工具。Docker 让这一切变得更容易、更快捷、更一致。
但凡事皆有代价。维护所有 Docker 组件会更加复杂。此外,一些在本地运行的常规开发环境中非常容易的操作,例如从 IDE 调试应用程序,现在也需要一些额外的配置。要让 Xdebug 正常工作,这并非易事。我找不到一份指南能够涵盖从头到尾的所有步骤。因此,我决定撰写这篇文章。它将指导您逐步完成使用 Docker 构建的 Symfony 4 应用程序安装和配置 Xdebug 和 PHPStorm 的过程。
先决条件
- 本测试在 Ubuntu 18.04 机器上进行,机器上安装了 PHPStorm 2018.1.4 以及最新版本的Docker和Docker Compose。在其他操作系统上,某些操作可能会略有不同。
- 我假设您对 Docker、PHP 和 XDebug 有基本的了解。
- 您可以克隆此存储库作为基础来遵循本指南,因为它包含一个基本的 Symfony Flex 应用程序,其中包含本文中解释的所有 Docker 内容。
步骤 1 - 将应用程序 Docker 化
当然,要使用 Xdebug,您必须将其安装在 Docker 容器中。
具体安装方法取决于您的基础镜像。我通常使用基于 alpine 的镜像。我不会详细介绍如何 Docker 化 Symfony 应用程序。您可以参考演示仓库中包含的Dockerfile进行操作。
以下是安装 Xdebug 的 Dockerfile 的相关摘录:
ARG WITH_XDEBUG=false
RUN if [ $WITH_XDEBUG = "true" ] ; then \
pecl install xdebug; \
docker-php-ext-enable xdebug; \
echo "error_reporting = E_ALL" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini; \
echo "display_startup_errors = On" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini; \
echo "display_errors = On" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini; \
echo "xdebug.remote_enable=1" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini; \
fi ;
我不想为开发和生产设置单独的 Dockerfile,因此我定义了一个构建参数来告诉我们是否要安装 Xdebug。
然后,在我的 Docker-compose 文件中,我对我的应用程序有以下定义:
version: "3"
services:
php:
build:
context: .
args:
- WITH_XDEBUG=true
env_file: .env
volumes:
- .:/var/www/app:rw
请参阅完整的 docker-compose 文件。
这没什么特别的。重要的是“env_file”指令,它告诉 Compose 从“.env”文件加载环境变量,这是 Symfony 4 应用程序的标准方式。
我们将使用该文件为 Xdebug 添加一些必需的环境变量。如果您愿意,也可以使用“environment”部分直接添加到 docker-compose 文件中。
环境变量
我们将定义以下环境变量:
- PHP_IDE_CONFIG - 此变量定义与应用程序关联的服务器配置。稍后会详细介绍。
- XDEBUG_CONFIG - 此变量用于定义一些 Xdebug 配置。“远程主机”是您的主机(运行 PHPStorm 的主机)的私有 IP。“remote_port”是 PHPStorm 监听传入 Xdebug 连接的端口。这两个设置允许 PHPStorm 和 Xdebug 进行通信。如果没有这个设置,PHPStorm 和 Xdebug 将无法正常工作。
我们将把它们添加到我们的“.env”文件中,如下所示:
PHP_IDE_CONFIG=serverName=symfony-demo
XDEBUG_CONFIG=remote_host=192.168.1.102 remote_port=9001
就代码而言,这就是全部。
接下来让我们深入研究 PHPStorm 配置。
PHPStorm 配置
您应该做的第一件事是检查您的调试设置。在 PHPStorm 中,前往“文件”->“设置”->“语言和框架”->“PHP”->“调试”。
确保您拥有之前在“XDEBUG_CONFIG”环境变量中配置的某些端口:
接下来,我们需要配置服务器。PHPStorm 会通过服务器将本地系统中的文件路径映射到容器中的文件路径。
转到文件 -> 设置 -> 语言和框架 -> PHP -> 服务器
为您的服务器命名。它应该与您在“PHP_IDE_CONFIG”环境变量中定义的值匹配。我们将其命名为“symfony-demo”。
“主机”和“端口”决定了访问应用程序的方式。我这里是 localhost:8888。
然后是“路径映射”。
在“项目文件”部分,你需要将应用程序的根路径映射到容器内的路径。在我的例子中,它是“/var/www/app”。
单击“应用”保存您的配置。
最后一部分是配置项目的远程调试器。
在右上角点击“编辑配置”:
单击左上角的绿色“加号”,然后从列表中选择“PHP 远程调试”。
现在像这样配置它:
确保将其与之前创建的“服务器”定义关联。使用“PHPSTORM”作为 idekey。
你的 IDE 现在应该已经正确配置了。让我们测试一下。
测试
-
打开“src/Controllers/HelloController.php”并在“hello”方法中放置一个断点。
-
使用以下命令启动 Docker 容器
docker-compose up
-
然后点击PHPStorm右上角的“开始监听PHP调试连接”图标。
如果一切顺利,您应该会看到执行在断点处停止。
就这样。现在您应该拥有一个完全配置的开发环境,其中包含 Docker、Xdebug 以及与 PHPStorm IDE 集成的开发环境。
如果您有任何问题或疑问,请随时在下方或在 GitHub 存储库中发表评论。
谢谢,调试顺利;)
文章来源:https://dev.to/brpaz/docker-phpstorm-and-xdebug-the-definitive-guide-14og