frankenphp部署laravel无需改代码,关键在启动方式与环境准备:先用frankenphp serve --worker=public/index.php快速验证,确保.env设为prod、autoload已优化、扩展齐全,再按需使用caddyfile或build打包。

FrankenPHP 部署 Laravel 项目不需要改一行代码,但关键在“启动方式”和“环境准备”——它不是编译器,而是把 PHP 解释器、Caddy 服务器和你的 Laravel 文件打包成一个可执行文件或直接运行的服务。
先用内置服务快速验证能否跑通
这是最轻量、最快发现问题的起点,不依赖 Caddyfile、不配 systemd、也不需要 Docker:
- 确保项目根目录下有 public/index.php,且权限正常(
chmod 644 public/index.php) - .env 中已设好 APP_ENV=prod 和 APP_DEBUG=false
- 运行命令:
frankenphp serve --worker=public/index.php - 访问
https://localhost(自动启用 HTTPS + HTTP/3),看到 Laravel 欢迎页即成功
若报 500 错误且日志提示 Class 'Illuminate\Foundation\Application' not found,说明 autoloader 没加载——补上 composer install --no-dev --optimize-autoloader。
确认 PHP 扩展是否齐全
FrankenPHP 二进制自带扩展,但不是全量。Laravel 常用的扩展必须存在,否则启动失败:
- 检查已加载扩展:
frankenphp php-cli -m | grep -E "(pdo|mbstring|openssl|xml|json|ctype|bcmath|fileinfo)" - 缺失
pdo_mysql?换用带该扩展的 FrankenPHP 二进制,或改用官方 Docker 镜像(支持install-php-extensions) - 别指望 UPX 压缩后还能看清错误——调试阶段加
--no-compress,避免报segmentation fault这类模糊问题
用 Caddyfile 启动(适合生产或本地长期运行)
在项目根目录新建 Caddyfile,内容简洁明确:
{ frankenphp }
localhost {
root * public/
encode zstd br gzip
php_server {
try_files {path} index.php
}
}
注意三个易错点:
-
root * public/必须以斜杠结尾,写成./public或/app/public会 404 - 域名写
localhost即可,FrankenPHP 会自动签发本地证书;如需真实域名,改localhost并确保--server-name匹配 - 启动命令就是
frankenphp run(当前目录有 Caddyfile 就自动识别)
打包成单文件分发(离线部署场景)
生成的是「可执行文件 + 内嵌 PHP + 明文 PHP 代码」,不是编译,但便于交付:
- 清理无关文件:
rm -rf .git tests/ vendor/bin/ storage/logs/ storage/framework/cache/ - 优化自动加载:
composer dump-autoload --optimize --no-dev - 执行打包:
frankenphp build --output myapp --server-name localhost - 赋予执行权限:
chmod +x myapp,然后直接运行./myapp - Windows 不支持该二进制,仅限 Linux/macOS
队列和定时任务需单独管理——FrankenPHP 只管 HTTP 请求,php artisan queue:work 或 php artisan schedule:run 要另起进程。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











