trae 是轻量级本地开发工具,基于 Traefik 实现 HTTP 路由,但不管理 PHP 进程;php-fpm 需单独启动并监听 TCP 端口(如 127.0.0.1:9000),trae 仅反向代理请求至该地址。
trae 里不能直接启动php-fpm,它压根不管理 PHP 进程——php-fpm 是由 traefik(或nginx)反向代理转发请求的目标服务,得你自己在容器或宿主机上单独运行。
trae 是什么?和 php-fpm 有啥关系?
trae 是一个轻量级本地开发工具(类似 Laravel Valet 或 devserver),底层用的是 traefik 做 HTTP 路由,但
本身不内置 PHP 运行时。它只负责把
的请求按规则转给本地某个端口(比如
),而 php-fpm 必须已监听那个端口,否则 502 Bad Gateway。
trae 不是 Docker 编排工具,不启动/管理容器内的 php-fpm
trae 不是 PHP 环境管理器,不安装/启停
二进制
你看到的“启动 phpfpm 服务”,其实是手动或脚本确保
进程在跑,并监听对得上的 socket 或 TCP 地址
怎么让 php-fpm 在 trae 下正常工作?
关键就两点:php-fpm 启动 + traefik(trae)配置能连上它。常见组合有三种:
宿主机直跑 php-fpm
:确认
已安装,改好
中的
(别用 unix socket,traefik 容器内默认连不了宿主机文件系统),然后
启动
Docker 容器跑 php-fpm
:用
,确保暴露端口且
进程在前台运行(镜像通常已配好)
trae 配置指向正确地址
:编辑项目根目录下的
,加
(宿主机)或
(Docker for Mac/Win)
为什么 traefik 报 502 或 “connection refused”?
这是最常卡住的地方,本质是网络通路没打通:
PHP 8.5.5
PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。
下载
立即学习
“
PHP免费学习笔记(深入)
”;
根本没启动:运行
或
看进程是否存在
监听地址不对:
检查是否真在
监听(不是
或
)
防火墙
拦截:
mac
OS / Windows 的防火墙可能拦了 9000 端口;Linux 上检查
或
trae 配置未生效:改完
后要
,不是 reload
复杂点在于:trae 的抽象层掩盖了底层网络拓扑,你以为它“启动了 php-fpm”,其实只是在等你把后端端口喂给它。真正容易被忽略的,是 php-fpm 默认监听 unix socket,而 traefik 容器根本访问不到宿主机的 socket 文件路径——必须显式切到 TCP 模式并开放端口。
traehttp://xxx.test127.0.0.1:9000php-fpmphp-fpmphp-fpmwww.conflisten = 127.0.0.1:9000sudo php-fpmdocker run -d --name myphp -p 9000:9000 php:8.2-fpmphp-fpm.trae.ymlupstream: http://127.0.0.1:9000upstream: http://host.docker.internal:9000php-fpmps aux | grep php-fpmsudo systemctl status php8.2-fpmnetstat -tuln | grep :9000127.0.0.1:9000127.0.0.1:9001/run/php/php8.2-fpm.sockufwiptables.trae.ymltrae restart