FrankenPHP单文件打包部署的核心是将PHP应用、Caddy服务器和PHP运行时三者编译为一个独立可执行二进制,实现“拷过去就能跑”;操作分三步:应用准备(清理无关文件、生成生产自动加载器、设为prod环境)、构建二进制(用frankenphp build命令指定输出名与域名)、部署运行(赋权后直接执行,支持自动HTTPS或HTTP模式)。

FrankenPHP 单文件打包部署,核心是把 PHP 应用、Caddy Web 服务器、PHP 运行时三者全部编译进一个可执行二进制里,实现“拷过去就能跑”。它不是简单压缩代码,而是真正嵌入运行环境。操作分三步:准备应用、生成二进制、运行验证。
一、应用准备:清理+生产化
打包前必须让项目处于可嵌入状态,否则二进制会过大或启动失败:
- 删除开发无关文件:移除
.git、tests/、vendor/bin/、日志目录、临时缓存(如storage/framework/cache) - 生成生产级自动加载器:
composer dump-autoload --optimize --no-dev - 设置生产环境变量:确保
.env中APP_ENV=prod、APP_DEBUG=false;Laravel/Symfony 建议运行php artisan config:clear和php artisan view:clear - 确认入口路径:FrankenPHP 默认托管
public/目录,确保public/index.php可正常响应请求
二、构建单二进制文件
FrankenPHP 提供官方构建工具 frankenphp build,需在项目根目录执行:
- 安装 FrankenPHP CLI(推荐使用 Homebrew 或直接下载二进制):
brew install dunglas/tap/frankenphp(macOS)或从 GitHub Releases 下载对应平台的frankenphp二进制并加入$PATH - 运行构建命令:
frankenphp build --output myapp --server-name example.com - 关键参数说明:
--output 指定输出二进制名(如myapp);
--server-name 设置域名(用于 HTTPS 自动证书,本地测试可用localhost);
--no-compress 可选,跳过 UPX 压缩(调试时建议加);
--php-ini 可指定自定义php.ini路径(如需调整内存或扩展)
成功后生成一个几十MB左右的独立可执行文件(如 myapp),无需系统 PHP 或 Caddy 环境即可运行。
立即学习“PHP免费学习笔记(深入)”;
三、部署与运行
单文件部署极简,但要注意权限和端口:
- 将生成的二进制文件(如
myapp)复制到目标服务器(Linux/macOS),赋予可执行权限:chmod +x myapp - 首次运行会自动申请 Let's Encrypt 证书(需域名已解析且开放 80/443 端口):
./myapp - 如仅本地测试,可强制 HTTP 模式:
SERVER_NAME=:80 ./myapp,访问http://localhost - 后台常驻建议用 systemd(Linux)或 launchd(macOS)管理;也可配合
nohup ./myapp &快速验证 - 检查是否生效:访问
https://your-domain.com,查看响应头中是否有Server: Caddy和X-Powered-By: FrankenPHP
整个过程不依赖 Composer、PHP 安装、Nginx 配置或 FPM 管理,真正做到“一份二进制,全栈就绪”。对 Laravel、Symfony、WordPress 等主流项目均兼容,重点在于应用本身已完成生产优化。



















