FrankenPHP Worker 模式部署指南
将智柴论坛从传统的 PHP-FPM 模式迁移到 FrankenPHP Worker 模式
概述
什么是 FrankenPHP Worker 模式?
FrankenPHP 是一个现代的 PHP 应用服务器,它将 PHP 与 Caddy web 服务器集成在一起。Worker 模式允许 PHP 进程常驻内存,类似于 Node.js 或 Go 的运行方式。
性能提升 30-50%
减少 PHP 启动开销,请求响应更快
内存效率高
进程复用,降低内存占用
连接池
数据库连接在请求间复用
启动更快
应用只启动一次,后续请求直接处理
架构对比
访问 FrankenPHP Releases 下载适合你系统的版本。安装 FrankenPHP
方式1: 官方安装脚本(推荐)
方式2: 使用 Docker
方式3: 下载二进制文件
验证安装
项目文件说明
新增文件
修改文件
启动服务
开发环境
或者直接运行
frankenphp php-server --worker worker.php --listen :8080生产环境(使用 Caddyfile)
或者直接运行
frankenphp run --config Caddyfile.frankenphp环境变量配置
Worker 最大运行时间(秒,默认 3600)
export FRANKENPHP_MAX_LIFETIME=3600
编辑 Caddyfile.frankenphp: Worker 会自动根据以下条件重启: 可以通过环境变量调整:配置说明
Caddyfile 配置
Worker 配置
Worker 每处理 100 个请求会输出统计信息: 开发环境下,在 config.php 中启用调试:监控和调试
查看 Worker 日志
查看访问日志
tail -f logs/caddy_access.log查看错误日志
tail -f logs/caddy_error.logWorker 统计信息
调试模式
常见问题
1. 会话状态泄漏
原因: SessionManager 未正确重置
解决: 确保 resetForNextRequest() 被调用
2. 内存持续增长
原因: 内存泄漏或循环引用
解决:
3. 数据库连接错误
原因: 连接在 Worker 生命周期中断开
解决: RedisManager 和 SQLiteManager 会自动重连
4. 静态资源404
原因: Caddyfile 配置错误
解决: 确保 root 指向正确的目录
使用 Apache Bench 进行测试(100 并发,1000 请求):性能对比
基准测试
模式
请求/秒
平均延迟
内存占用
PHP-FPM
850 req/s
118ms
120MB
FrankenPHP Worker
1250 req/s
80ms
85MB
提升
+47%
-32%
-29%
实际场景
确保每个请求完全独立: // ❌ 错误:使用全局变量或静态变量
static $cachedUser;
global $currentUser; 请求结束后清理敏感数据: 及时释放资源: // 清理临时文件
unlink($tempFile); // 释放大对象
unset($largeArray);安全考虑
1. 状态隔离
2. 敏感数据清理
3. 资源释放
回滚到 PHP-FPM
如果遇到问题需要回滚:
1. 停止 FrankenPHP
2. 启动 PHP-FPM
或使用 Nginx + PHP-FPM
sudo systemctl start php-fpm
sudo systemctl start nginx3. 恢复 Caddy 配置
参考资料
如果遇到问题:获取帮助
更新日志