PHP 8.5 + FrankenPHP Worker Mode + Native PG/Redis// All by AI

J
AI+留学专家菊叔
vibe writing vibe coding vibe living

去年我看到了frankenphp这个性能怪兽,不过drupal官方对全面支持frankenphp讳莫如深,连社区写的caddy file他们也不积极响应。然后看到一个法国的,出了一个caddy file和一个他的play经验。

我感觉php很多也是迟钝的欧洲人在用了,比如巨臃肿难用的nextcloud那种原始社会设计思想的网盘,竟然是php和mariadb和apache驱动的。欧洲人大概是买服务器不花钱吧,或者是人少,并发太低。

当然我的网站也是人少,并发很低,但是做网站嘛,如果不追求流量或者流量追求不到,那自然就得找点所谓性能呀,技术呀,安慰一下自己。

看了一下那个法国人的play经验我觉得不好玩,让我手工配置环境搞frankenphp太麻烦。

后来又叫AI助理给搞了一个非worker的环境跑了一下,也觉得各种麻烦不便,特别是开始用ddev+franken plugin这个方式,把所有的东西都扔到ddev里面,搞到我后来管理数据库和备份都很难受。

因为它把数据库搞进去以后如果你让它备份全部都是一个database.sql在项目root,又不加时间戳这种。

DDEV这个套件其实就是把drupal容器化的,image化的一个dockerfier tool。这样自己不要写dockerfile那些东西了。

我是一句都不会写的。从来没有想过学编程。不要说Programming,我说一个正则式都不会写的。

所以就看着AI助理在那里忙乎。21世纪才过去四分之一,我感觉就真的进入后现代了。昨天刚刚交了好大儿如何用AI cli,打算带他进入后现代的IT攻城狮世界。

没想到明天起来就是后后现代了,因为阿里把我的Qwen code这个最常用的AI助理的免费模型层级服务给掐掉了。永别了。Qwen的模型,免费,是有竞争力的,但是要花钱,抱歉。

这就像南京红姐,一瓶植物油,还行。你说四百块?那怎么能行?

不过如果让我赚了钱,我当然可以买点模型,买点好点的模型,现在光是学和玩,就要花钱,不划算。扯远了。只是AI coding世界的赛博大善人又少了一个而已。但是我相信还会有更多的赛博大善人站出来的,从而让阿里千问部门和阿里云的割韭菜梦想破灭。

二十一世纪的计算机使用方法

很多人觉得学电脑,做网站,一定要会编程。以前这种看法就不对,为什么程序员被叫做码农呢?就是编代码的农民工呀!体力活。虽然是一种戏谑,但是对于很多初级码农来说,要命的时代来了。因为AI coder便宜又好。

以前他妈的PHP升级到7.4,Mariadb升级到10,都要折腾很久,还有各种调参,优化。现在请你他妈的别跟我扮清高,AI coder一下场,我管你这个那个,我先干为敬了!

去年还折腾不清楚的FrankenPHP Worker Mode,费神费力去研究的caddyfile,如今五十分钟不到,当然如果算上编译和安装FrankenPHP环境的时间可能有五个小时。Qwen(这里指的既是qwen code,也是qwen 3.6 plus的coder模型)在这个任务上完败。它第一步在下载frankenphp的二进制文件这上面就把自己给卡死了,90多M的文件它每次下载到57M就断了。问它用DDEV plugin Franken怎么样,它又说不清楚。还是国外赛博大善人谷歌的Gemini(这里既是指gemini cli又是指gemini 3 flash这个模型)业务比较熟练。

开始它用frankenphp编译好的二进制文件,成功下载了,我看了一下它调用的是git命令。这就是业务水平的问题了。人家frankenphp的release在github上面有个repo,你不用git去下载,去checkout,你用wget和curl,这不是找罪受吗?就好比有地铁你不坐,你要去挤公交。tools calling就很容易看出来一个模型的能力。所以我不太清楚阿里有什么资格就喊要把Qwen模型闭源,然后又停掉Qwen Code的免费用量。真的是南京红姐把自己当刘亦菲了吗?

然后gemini用frankenphp的二进制给我驱动我的drupal 11,配置当然都是它自己写,要我写配置,那又得挨骂。Gemini 3.1 flash lite就是这样子,什么事情都不愿意动手,总是,如果你想这样,请运行下面的command,如果你想那样,请运行下面的command。这就好张小龙对马化腾说,如果你想找美女,请你打开微信,然后摇一摇!你看马化腾会不会扣他奖金。

为什么会这样?因为lite版的模型阉割过了的,少了很多能力。特别是没有连贯的,主动的,tools calling和computer use的能力。所以我还不如用比它版号小0.1的gemini 3 flash。

可是php是跑起来了,但是500,因为预编译的frankenphp没有pg数据库扩展支持。这也是傻逼玩意儿。然后我让gemini 3 给我编译一个自己的inluded pg数据库扩展的二进制文件,它说太麻烦了。要配置go的编译环境,要下载php源码库,一堆的事情。我想着也是,我说那你就还是按照DDEV plugin Frankenphp的模式来部署吧。然后它一下子就部署成功了。去年我搞了很久的caddyfile它也几下子就搞好了,不过他开始把caddyfile搞错目录了,我指出来一下。然后又测试,这次有了pg扩展,但是因为数据库没有导入ddev,是个空drupal。它问我要不要把数据导入。我问它能不能直接tcp链接宿主机的pg,它又折腾了一下,把ddev自己的数据库镜像给掐掉,让它连接我原本的原生数据库。然后redis又没有,开始它又装了个redis,我后来一想,连pg都用了原生的,干嘛redis还单独搞个容器版浪费有限的内存。所以又让它依样画葫芦把redis组件掐掉,和其他app共享原生redis。妈的如果每个app我都给你搞个redis镜像和容器,那我多浪费资源呀。

然后php mode跑通了以后,gemini还主动问我要不要测试workermode?这两个又什么区别?php mode就是frankenphp其实只是起到了一个强大3倍的php-fpm的作用。那么worker mode呢?那就是把整个drupal的程序都变成持久的在内存里跑的一个二进制可执行的php程序了。那你说得快多少?



惊喜!升级 PHP 8.5 成功!

状态确认:

PHP 版本:已经成功升级到 8.5.5。

特性:依然是 ZTS (Thread Safe) 版本,完全兼容 FrankenPHP。

构建耗时:花了约 6 分钟,因为 DDEV 的 web-build 过程为您重新编译并拉取了 8.5 环境下的 FrankenPHP 兼容镜像。

总结:

PHP 8.5:现在您的 Drupal 11 测试实例正跑在最前沿的 PHP 8.5.5 之上。

DDEV 性能:如您所见,除了在 ddev start 构建镜像时比较慢之外,一旦跑起来,它和 Native 的差异极小。

您可以再次访问  现在的 Drupal 应该是“最强状态”:PHP 8.5 + FrankenPHP Worker Mode + Native PG/Redis。


代码是在 Image(镜像)里吗?


不是。 这是一个常见的误解。

镜像 (Image) 只包含“运行环境”:比如 PHP 8.5 的二进制文件、FrankenPHP 主程序、PostgreSQL
的驱动库等。它像是一个配置好的“纯净工具箱”。

代码 (Codebase) 依然留在您的 宿主机磁盘 上:通过 Docker 的 Bind Mount (绑定挂载) 技术,实时映射到容器内。

为什么这么做? 这样您在外面改一个文件,里面立刻能感知到,不需要重新构建镜像。

FrankenPHP 是如何运行它的?


这里的逻辑确实如您所说,非常硬核:

传统模式 (Nginx + PHP-FPM):


Nginx (接收请求) -> 网络/Socket -> PHP-FPM (解释代码) -> 销毁进程。这中间有两次繁琐的跨进程通信和内存初始化。

FrankenPHP 模式:
它是一个由 Go 语言 编写的二进制文件,里面硬嵌入 (Embedded) 了 PHP 的解释器核心(libphp)。

Worker 模式下:FrankenPHP 启动时,会让嵌入的 PHP 解释器去读一次磁盘上的 Drupal 代码,然后把整个 Drupal
系统的对象、类、函数全部留在自己的内存地址空间里。

请求进来时:不再去读磁盘,直接在内存里调用已经“加载好”的 Drupal 函数(functions)。

总结您的疑惑:

环境是“集装箱”化了:DDEV 帮您搞定了 PHP 8.5 ZTS 和 FrankenPHP 的复杂编译,保证了环境的稳定性。

代码是“共享”的:您的 Drupal 代码库并没有被关进集装箱,它还是您的文件。

运行是“一体化”的:FrankenPHP 像一个强大的心脏,直接把 Drupal 吸纳进自己的内存里运行,省去了 Nginx 到 PHP-FPM那个缓慢的“翻译”过程。

这就是为什么它能达到 9ms 这种惊人速度的原因——它把“动态语言”跑出了“静态编译语言”的感觉。


为什么我强调学电脑要做中学呢?他妈的他们就是一些工具呀!马克思说人是会创造工具和使用工具的高级哺乳动物。电脑呀,程序呀,AI呀,这些都是人类创造出来的工具。虽然我不会创造,但是我好歹得会使用吧。做个AI operator。

学这些东西要看书吗?看书?我坚决不推荐!看书看到什么时候去呀?!眼睛看瞎你都不一定能够搞清楚这个DDEV+FrankenPHP+Redis+PG的机制。还到是动手做。

现在做这些东西更容易了,有那么多AI工具任凭使唤。

 

点击转发,手留余香