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 路由,但 trae 本身不内置 PHP 运行时。它只负责把 http://xxx.test 的请求按规则转给本地某个端口(比如 127.0.0.1:9000),而 php-fpm 必须已监听那个端口,否则 502 Bad Gateway。
- trae 不是 Docker 编排工具,不启动/管理容器内的 php-fpm
- trae 不是 PHP 环境管理器,不安装/启停
php-fpm二进制 - 你看到的“启动 phpfpm 服务”,其实是手动或脚本确保
php-fpm进程在跑,并监听对得上的 socket 或 TCP 地址
怎么让 php-fpm 在 trae 下正常工作?
关键就两点:php-fpm 启动 + traefik(trae)配置能连上它。常见组合有三种:
-
宿主机直跑 php-fpm:确认
php-fpm已安装,改好www.conf中的listen = 127.0.0.1:9000(别用 unix socket,traefik 容器内默认连不了宿主机文件系统),然后sudo php-fpm启动 -
Docker 容器跑 php-fpm:用
docker run -d --name myphp -p 9000:9000 php:8.2-fpm,确保暴露端口且php-fpm进程在前台运行(镜像通常已配好) -
trae 配置指向正确地址:编辑项目根目录下的
.trae.yml,加upstream: http://127.0.0.1:9000(宿主机)或upstream: http://host.docker.internal:9000(Docker for Mac/Win)
为什么 traefik 报 502 或 “connection refused”?
这是最常卡住的地方,本质是网络通路没打通:
立即学习“PHP免费学习笔记(深入)”;
-
php-fpm根本没启动:运行ps aux | grep php-fpm或sudo systemctl status php8.2-fpm看进程是否存在 - 监听地址不对:
netstat -tuln | grep :9000检查是否真在127.0.0.1:9000监听(不是127.0.0.1:9001或/run/php/php8.2-fpm.sock) -
防火墙拦截:macOS / Windows 的防火墙可能拦了 9000 端口;Linux 上检查
ufw或iptables - trae 配置未生效:改完
.trae.yml后要trae restart,不是 reload
复杂点在于:trae 的抽象层掩盖了底层网络拓扑,你以为它“启动了 php-fpm”,其实只是在等你把后端端口喂给它。真正容易被忽略的,是 php-fpm 默认监听 unix socket,而 traefik 容器根本访问不到宿主机的 socket 文件路径——必须显式切到 TCP 模式并开放端口。











