与其使用本地安装的 PHP 库,还可以通过优秀的 static-php-cli 项目 创建 FrankenPHP 的静态构建(尽管它的名字是这样,但该项目支持所有 SAPIs,不仅仅是 CLI)。
使用这种方法,一个单一的、便携的二进制文件将包含 PHP 解释器、Caddy web 服务器和 FrankenPHP!
FrankenPHP 还支持将 PHP 应用程序嵌入静态二进制文件中。
Linux
我们提供了一个 Docker 镜像来构建 Linux 静态二进制文件:
docker buildx bake --load static-builder
docker cp $(docker create --name static-builder dunglas/frankenphp:static-builder):/go/src/app/dist/frankenphp-linux-$(uname -m) frankenphp ; docker rm static-builder
生成的静态二进制文件命名为 frankenphp
,可在当前目录中找到。
如果你想在没有 Docker 的情况下构建静态二进制文件,请查看 macOS 指令,它同样适用于 Linux。
自定义扩展
默认情况下,编译了大多数流行的 PHP 扩展。
为了减小二进制文件的大小并减少攻击面,你可以选择使用 PHP_EXTENSIONS
Docker ARG 构建扩展的列表。
例如,运行以下命令仅构建 opcache
扩展:
docker buildx bake --load --set static-builder.args.PHP_EXTENSIONS=opcache,pdo_sqlite static-builder
# ...
要添加启用你所启用扩展的附加功能的库,你可以使用 PHP_EXTENSION_LIBS
Docker ARG 传递:
docker buildx bake \
--load \
--set static-builder.args.PHP_EXTENSIONS=gd \
--set static-builder.args.PHP_EXTENSION_LIBS=libjpeg,libwebp \
static-builder
另见如何自定义构建
GitHub Token
如果你遇到了 GitHub API 频率限制,可以在名为 GITHUB_TOKEN
的环境变量中设置 GitHub Personal Access Token:
GITHUB_TOKEN="xxx" docker --load buildx bake static-builder
# ...
macOS
运行以下脚本以创建 macOS 的静态二进制文件(你必须安装了 Homebrew):
git clone https://github.com/dunglas/frankenphp
cd frankenphp
./build-static.sh
注意:此脚本也适用于 Linux(可能也适用于其他 Unix 系统),并由我们提供的基于 Docker 的静态构建器内部使用。
自定义构建
以下环境变量可以传递给 docker build
和 build-static.sh
脚本,以自定义静态构建:
FRANKENPHP_VERSION
:要使用的 FrankenPHP 版本PHP_VERSION
:要使用的 PHP 版本PHP_EXTENSIONS
:要构建的 PHP 扩展(支持的扩展列表在这里)PHP_EXTENSION_LIBS
:为扩展添加额外功能的库EMBED
:要嵌入二进制文件中的 PHP 应用程序的路径CLEAN
:当设置时,将从零开始构建 libphp 及其所有依赖项(不使用缓存)NO_COMPRESS
:不要使用 UPX 压缩结果二进制文件DEBUG_SYMBOLS
:当设置时,不会剥离调试符号,并将它们添加到二进制文件中MIMALLOC
:(实验性,仅限 Linux)用 mimalloc 替换 musl 的 mallocng 以提高性能RELEASE
:(仅限维护者)当设置时,结果二进制文件将上传至 GitHub