frankenphp 是基于 caddy 的独立 php 应用服务器,需下载带 php sapi 的二进制文件,在 laravel 根目录执行 ./frankenphp run --env=production 启动,自动识别 public/index.php 入口,不依赖 .env 文件,须确保 vendor/ 已安装且 storage/ 有写权限。

FrankenPHP 不能直接作为 Laravel 的“内置服务器”运行,它是一个基于 Caddy 的 PHP 应用服务器,需以反向代理或 SAPI 模式启动 Laravel —— 关键在于用 frankenphp 命令启动时正确指向 Laravel 的 public/index.php 入口,并禁用默认的 PHP 内置服务器行为。
确认 FrankenPHP 已安装且支持 SAPI 模式
FrankenPHP 不是 Composer 包,也不是 Laravel 扩展包;它是独立二进制程序,必须从 frankenphp.dev 下载对应平台的 frankenphp 可执行文件(如 frankenphp-darwin-arm64),并确保其有执行权限。验证是否支持 PHP SAPI:
$ ./frankenphp --version FrankenPHP v0.12.0 (Caddy v2.8.4, PHP 8.3.6)
若输出中不含 PHP 版本号,说明下载的是纯 Caddy 版(无 PHP SAPI),必须重下带 php 后缀的版本(例如 frankenphp-darwin-arm64-php)。
在 Laravel 项目根目录运行 FrankenPHP 服务
FrankenPHP 默认会查找当前目录下的 public/ 并自动识别 index.php,但 Laravel 的入口路径需显式声明。进入你的 Laravel 项目根目录(含 artisan 和 public/),执行:
$ ./frankenphp run --workers=2 --env=production
注意以下几点:
- 不要加
--document-root public:FrankenPHP 会自动检测public/,手动指定反而可能绕过 Laravel 的路由逻辑 -
--env=production是必须的:Laravel 的APP_ENV由环境变量驱动,FrankenPHP 不读取.env,需显式传入;开发时可用--env=local - 不使用
--router或自定义 Caddyfile:除非你明确需要重写规则,否则默认内置路由器已适配 Laravel 的单入口机制 - 端口默认为
:8080,访问http://localhost:8080即可,无需额外配置APP_URL
解决常见 404 / 500 错误
启动后访问首页报 404,大概率是未启用 PHP SAPI 模式;报 500 则多因环境变量缺失或 storage/ 权限问题:
-
Warning: require(/path/to/bootstrap/autoload.php): Failed to open stream→ 检查是否在 Laravel 项目根目录运行命令,不是在public/下 -
Class 'App\Http\Controllers\Controller' not found→composer install未执行,或vendor/autoload.php路径解析失败;FrankenPHP 不自动加载 Composer 自动加载器,必须确保vendor/存在且已安装依赖 - 静态资源(CSS/JS)返回 404 → 确认
public/下文件存在,且未被.htaccess或其他规则干扰(FrankenPHP 不读取 .htaccess) - Session 或缓存写入失败 → 检查
storage/和bootstrap/cache/目录权限,FrankenPHP 进程用户需有写权限
对接 Nginx/Apache 时不要用反向代理模式
FrankenPHP 的设计目标是替代 FPM + Nginx 组合,而非作为上游服务被代理。如果你已在跑 Nginx,又想用 FrankenPHP,正确做法是停掉 php-fpm、注释掉 Nginx 的 fastcgi_pass 配置,改用 proxy_pass http://127.0.0.1:8080 —— 但这会丢失 HTTP/2 Server Push、原生 TLS 终止等优势。更推荐直接用 FrankenPHP 对外提供服务,仅在需要 WAF、负载均衡等场景才前置 Nginx。
真正容易被忽略的是环境变量隔离:FrankenPHP 启动时继承 shell 环境,但不会自动加载 .env;APP_KEY、数据库凭证等仍需通过 --env 或系统级 export 注入,硬编码在 Caddyfile 里既不安全也不符合 Laravel 的配置习惯。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











