frankenphp 1.5生产单二进制构建核心是将php应用、caddy服务器、php运行时静态打包为一个不依赖系统环境的可执行文件;需先清理非必要文件、设app_env=prod、生成生产自动加载器,再通过frankenphp build --php-ini prod.ini --server-name example.com固化配置并生成二进制,最后chmod +x运行并开放80/443端口。

FrankenPHP 1.5 生产环境单二进制构建,核心是把 PHP 应用、Caddy 服务器、PHP 运行时三者静态打包为一个可执行文件,运行时不依赖系统 PHP、Caddy 或 php.ini 文件。配置的关键不在“启动时改”,而在“构建时定”——所有配置必须在 frankenphp build 这一步固化进去。
应用层准备:清理 + 固化环境
二进制会把当前目录下所有可读文件(包括 .env、缓存、日志)一并打包,不清理会导致体积膨胀、敏感信息泄露或启动失败:
- 删掉非运行必需内容:.git、tests/、vendor/bin/、storage/logs、storage/framework/{cache,views,sessions}
- 执行
composer install --no-dev --optimize-autoloader,生成生产级自动加载器 - 确认
.env中设为APP_ENV=prod和APP_DEBUG=false - Laravel/Symfony 项目建议再运行
php artisan config:clear和php artisan view:clear - 确保
public/index.php能本地返回 HTTP 200,FrankenPHP 默认只托管public/目录
PHP 配置嵌入:唯一有效路径是 --php-ini
FrankenPHP 1.5 官方静态二进制硬编码 php.ini,运行时不读取任何外部 php.ini,-c 参数无效,Dockerfile 中 COPY 也不起作用。生效方式只有构建时嵌入:
- 准备一个自定义
prod.ini,例如设置memory_limit = 256M、opcache.enable = 1、date.timezone = Asia/Shanghai - 构建命令中显式传入:
frankenphp build --php-ini prod.ini --output myapp --server-name example.com - 该 ini 文件会被完整 embed 进最终二进制,
phpinfo()中显示的 Loaded Configuration File 会是embedded://php.ini,且内容与你的 prod.ini 一致 - 不要试图在 Caddyfile 里写
php_admin_flag opcache.enable on—— embed SAPI 不支持这类指令
域名与 HTTPS:--server-name 决定证书行为
--server-name 不只是个标识,它直接控制 Let's Encrypt 自动证书申请逻辑:
- 生产环境必须填已解析到本机 IP 的真实域名(如
example.com),否则无法签发有效证书 - 本地测试可用
localhost,Caddy 会自签本地证书(浏览器提示不安全,但可手动信任) - 若需纯 HTTP 模式(如内网部署),可设为
--server-name :80,此时跳过 HTTPS 流程 - HTTP/3(QUIC)自动启用,无需额外配置,但需确保 UDP 443 端口开放
构建与部署:权限 + 端口 + 验证
生成的二进制是独立可执行文件,部署极简,但有几处细节决定是否能真正跑起来:
- Linux/macOS 下执行
chmod +x myapp后直接运行:./myapp - 确保服务器防火墙放行 TCP 80/443 和 UDP 443(HTTP/3 所需)
- 首次运行会自动申请证书,需保证 DNS 解析生效、外网可访问;若失败,查看日志中
caddy logs相关输出 - 验证是否生效:访问
http://example.com和https://example.com,检查响应头中是否有Server: Caddy和X-Powered-By: FrankenPHP - 如需后台运行,推荐用 systemd 或 supervisor,避免直接 & 启动(进程易被中断)
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











