该页面已由社区翻译,可能不是最新的。参见参考版本(英文)。

该页面已由社区翻译,可能不是最新的。参见参考版本(英文)。

该页面已由社区翻译,可能不是最新的。参见参考版本(英文)。

由...提供支持
PHP 应用程序作为独立二进制文件

PHP 应用程序作为独立二进制文件

FrankenPHP 能够将 PHP 应用程序的源代码和资源文件嵌入到静态的、独立的二进制文件中。

由于这个特性,PHP 应用程序可以作为独立的二进制文件分发,包括应用程序本身、PHP 解释器和生产级 Web 服务器 Caddy。

了解有关此功能的更多信息 Kévin 在 SymfonyCon 上的演讲

有关嵌入 Laravel 应用程序,请阅读此特定文档条目

# 准备你的应用

在创建独立二进制文件之前,请确保应用已准备好进行打包。

例如,你可能希望:

  • 给应用安装生产环境的依赖
  • 导出 autoloader
  • 如果可能,为应用启用生产模式
  • 丢弃不需要的文件,例如 .git 或测试文件,以减小最终二进制文件的大小

例如,对于 Symfony 应用程序,你可以使用以下命令:

# 导出项目以避免 .git/ 等目录
mkdir $TMPDIR/my-prepared-app
git archive HEAD | tar -x -C $TMPDIR/my-prepared-app
cd $TMPDIR/my-prepared-app

# 设置适当的环境变量
echo APP_ENV=prod > .env.local
echo APP_DEBUG=0 >> .env.local

# 删除测试和其他不需要的文件以节省空间
# 或者,将这些文件添加到您的 .gitattributes 文件中,并设置 export-ignore 属性
rm -Rf tests/

# 安装依赖项
composer install --ignore-platform-reqs --no-dev -a

# 优化 .env
composer dump-env prod

# 自定义配置

要自定义配置,您可以放置一个 Caddyfile 以及一个 php.ini 文件 在应用程序的主目录中嵌入(在之前的示例中是$TMPDIR/my-prepared-app)。

# 创建 Linux 二进制文件

创建 Linux 二进制文件的最简单方法是使用我们提供的基于 Docker 的构建器。

  1. 在准备好的应用的存储库中创建一个名为 static-build.Dockerfile 的文件。

    FROM --platform=linux/amd64 dunglas/frankenphp:static-builder
    
    # 复制应用代码
    WORKDIR /go/src/app/dist/app
    COPY . .
    
    # 构建静态二进制文件
    WORKDIR /go/src/app/
    RUN EMBED=dist/app/ ./build-static.sh
    

    Caution

    某些 .dockerignore 文件(例如默认的 Symfony Docker .dockerignore) 会忽略 vendor/ 文件夹和 .env 文件。在构建之前,请务必调整或删除 .dockerignore 文件。

  2. 构建:

    docker build -t static-app -f static-build.Dockerfile .
    
  3. 提取二进制文件

    docker cp $(docker create --name static-app-tmp static-app):/go/src/app/dist/frankenphp-linux-x86_64 my-app ; docker rm static-app-tmp
    

生成的二进制文件是当前目录中名为 my-app 的文件。

# 为其他操作系统创建二进制文件

如果你不想使用 Docker,或者想要构建 macOS 二进制文件,你可以使用我们提供的 shell 脚本:

git clone https://github.com/php/frankenphp
cd frankenphp
EMBED=/path/to/your/app ./build-static.sh

dist/ 目录中生成的二进制文件名称为 frankenphp-<os>-<arch>

# 使用二进制文件

就是这样!my-app 文件(或其他操作系统上的 dist/frankenphp-<os>-<arch>)包含你的独立应用程序!

若要启动 Web 应用,请执行:

./my-app php-server

如果你的应用包含 worker 脚本,请使用如下命令启动 worker:

./my-app php-server --worker public/index.php

要启用 HTTPS(自动创建 Let’s Encrypt 证书)、HTTP/2 和 HTTP/3,请指定要使用的域名:

./my-app php-server --domain localhost

你还可以运行二进制文件中嵌入的 PHP CLI 脚本:

./my-app php-cli bin/console

# PHP Extensions

默认情况下,脚本将构建您项目的 composer.json 文件中所需的扩展(如果有的话)。 如果 composer.json 文件不存在,将构建默认扩展,如 静态构建条目 中所述。

要自定义扩展,请使用 PHP_EXTENSIONS 环境变量。

# 自定义构建

阅读静态构建文档 查看如何自定义二进制文件(扩展、PHP 版本等)。

# 分发二进制文件

在Linux上,创建的二进制文件使用UPX进行压缩。

在Mac上,您可以在发送文件之前压缩它以减小文件大小。 我们推荐使用 xz

编辑此页面