FPHP-通用的 PHP 项目优化方法

这是什么

FPHP全称为 FrankenPHP,是一个基于 Go 和 Caddy 的高性能 PHP 环境

本文将介绍该框架的偏底层使用方法,如果你只是想给自己的 PHP 项目换一个高性能环境,可以直接阅读 TL;DR 部分

TL;DR

目前几乎所有项目都能兼容,您可以通过一键部署的方式快速运行一个实例来决定是否切换您的后端环境:

如果是新用户,使用优惠码 wp-admin 注册可享辅助技术支持服务,并且赠送一张 5 折优惠券(下方链接带有 AFF ,不喜欢可自行去除,您的支持是我前进的动力)

通过雨云一键部署

Deploy on RainYun

创建项目后,只需要在文件管理处,进入 public 文件夹后上传您的网页源代码即可

本文根据官方文档攥写: FrankenPHP:现代 PHP 应用服务器

安装 PHP 扩展

官方提供的镜像是 dunglas/frankenphp ,其内置了 docker-php-extension-installer ,我们可以通过 docker exec -it 命令进入容器并且执行命令安装 PHP 扩展,例如:

install-php-extensions opcache zip

这个命令会安装 opcache 扩展和 zip 扩展

只需要等待执行完成即可(建议完成后重启应用)

配置文件

您可以在应用管理-配置文件中管理 Caddyfile 以启用更多的特性

其中类似于 {$SERVER_NAME:localhost} 的写法是通过环境变量获取值,建议不要更改

在默认的文件内容中,你可以看到这样一段:

frankenphp {
	{$FRANKENPHP_CONFIG}
}

参考官方文档,您可以对这里做一些简单修改(官方翻译是机翻,有些问题,下方是修过的)

{
	frankenphp {
		num_threads <num_threads> # 设置要启动的 PHP 线程数量。默认:可用 CPU 数量的 2 倍。
		max_threads <max_threads> # 限制可以在运行时启动的额外 PHP 线程的数量。默认值:num_threads。可以设置为 'auto'。
		max_wait_time <duration> # 设置请求在超时之前可以等待的最大时间,直到找到一个空闲的 PHP 线程。 默认:禁用。
		php_ini <key> <value> # 设置一个 php.ini 指令。可以多次使用以设置多个指令。
		worker {
			file <path> # 设置 worker 模式下的启动脚本路径。
			num <num> # 设置要启动的 PHP 线程数量,默认为可用 CPU 数量的 2 倍。
			env <key> <value> # 设置一个额外的环境变量为给定的值。可以多次指定以设置多个环境变量。
			watch <path> # 设置要监视文件更改的路径。可以为多个路径多次指定。
			name <name> # 设置 worker 的名称,用于日志和指标。默认值:worker 文件的绝对路径。
			max_consecutive_failures <num> # 设置在 worker 被视为不健康之前的最大连续失败次数,-1意味着 worker 将始终重新启动。默认值:6。
		}
	}
}

想要最小化启动 worker 模式,可以只使用

{
	frankenphp {
		worker <file> <num> # file 为启动文件的路径, num 为线程数
	}
}

不过更推荐的是直接在第 50 行左右这里配置

php_server {
	#worker /path/to/your/worker.php
}

伪静态

在使用 WordPress 等程序时通常会被要求配置伪静态,此时可以将以下内容加入配置文件

rewrite {
    if {file} not favicon.ico
    if {file} not match \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$
    if {path} not match ^/wp-admin
    if {path} not match ^/wp-login.php
    to {path} {path}/ /index.php?{query}
}

我们也可以启用缓存

header Cache-Control "public, max-age=31536000"
@static {
    file
    ext js css png jpg jpeg gif ico svg woff woff2 ttf eot
}
header @static Cache-Control "public, max-age=31536000, immutable"

建议直接填写到这里:

当然,整个 {$SERVER_NAME:localhost} {} 块内都可以配置

1 个赞

熟人 :grinning_face:

大佬!!

1 个赞