与其使用本地安装的 PHP 库,还可以通过优秀的 static-php-cli 项目 创建 FrankenPHP 的静态构建(尽管它的名字是这样,但该项目支持所有 SAPIs,不仅仅是 CLI)。
使用这种方法,一个单一的、便携的二进制文件将包含 PHP 解释器、Caddy web 服务器和 FrankenPHP!
FrankenPHP 还支持将 PHP 应用程序嵌入静态二进制文件中。
Linux
我们提供了一个 Docker 镜像来构建 Linux 静态二进制文件:
docker buildx bake --load static-builderdocker 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/frankenphpcd 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
