使用 FrankenPHP 通过 Docker 部署 Laravel web 应用程序非常简单,只需将项目挂载到官方 Docker 镜像的 /app 目录中即可。

从 Laravel 应用的主目录运行此命令:

  1. docker run -p 80:80 -p 443:443 -p 443:443/udp -v $PWD:/app dunglas/frankenphp

享受吧!

本地安装

或者,你可以从本地机器运行 FrankenPHP 与 Laravel 项目:

  1. 下载与你的系统相对应的二进制文件

  2. 在 Laravel 项目根目录添加以下配置到名为 Caddyfile 的文件中:

    1. {
    2. frankenphp
    3. order php_server before file_server
    4. }
    5. # 服务器的域名
    6. localhost {
    7. # 将 webroot 设置为 public/ 目录
    8. root * public/
    9. # 启用压缩(可选)
    10. encode zstd br gzip
    11. # 执行 public/ 目录中的 PHP 文件并服务资源
    12. php_server
    13. }
  3. 在 Laravel 项目根目录启动 FrankenPHP:./frankenphp run

Laravel Octane

Octane 可以通过 Composer 包管理器安装:

  1. composer require laravel/octane

安装 Octane 后,你可以执行 octane:install Artisan 命令,这将在你的应用程序中安装 Octane 的配置文件:

  1. php artisan octane:install --server=frankenphp

Octane 服务器可以通过 octane:start Artisan 命令启动。

  1. php artisan octane:start

octane:start 命令可以接受以下选项:

  • --host: 服务器应绑定到的 IP 地址(默认:127.0.0.1
  • --port: 服务器应该可用的端口(默认:8000
  • --admin-port: 管理服务器应该可用的端口(默认:2019
  • --workers: 可用于处理请求的工作进程数量(默认:auto
  • --max-requests: 在重新加载服务器之前要处理的请求数量(默认:500
  • --caddyfile: FrankenPHP Caddyfile 文件的路径
  • --https: 启用 HTTPS、HTTP/2 和 HTTP/3,并自动生成和更新证书
  • --http-redirect: 启用 HTTP 到 HTTPS 的重定向(仅当传递 –https 时启用)
  • --watch: 当应用程序被修改时自动重新加载服务器
  • --poll: 在通过监视器监视网络文件时使用文件系统轮询
  • --log-level: 记录指定日志级别或更高级别的日志消息

Laravel Octane 的官方文档 中了解更多信息。

Laravel 应用作为独立二进制文件

使用 FrankenPHP 的应用嵌入特性,可以将 Laravel 应用作为独立二进制文件分发。

按照以下步骤将你的 Laravel 应用打包为 Linux 的独立二进制文件:

  1. 在你的应用仓库中创建一个名为 static-build.Dockerfile 的文件:

    1. FROM --platform=linux/amd64 dunglas/frankenphp:static-builder
    2. # 复制你的应用
    3. WORKDIR /go/src/app/dist/app
    4. COPY . .
    5. # 删除测试和其他不必要的文件以节省空间
    6. # 或者,在 .dockerignore 文件中添加这些文件
    7. RUN rm -Rf tests/
    8. # 复制 .env 文件
    9. RUN cp .env.example .env
    10. # 更改 APP_ENV 和 APP_DEBUG 以准备生产环境
    11. RUN sed -i'' -e 's/^APP_ENV=.*/APP_ENV=production/' -e 's/^APP_DEBUG=.*/APP_DEBUG=false/' .env
    12. # 如有需要,对你的 .env 文件进行其他更改
    13. # 安装依赖
    14. RUN composer install --ignore-platform-reqs --no-dev -a
    15. # 构建静态二进制文件
    16. WORKDIR /go/src/app/
    17. RUN EMBED=dist/app/ ./build-static.sh

    注意

    一些 .dockerignore 文件将忽略 vendor/ 目录和 .env 文件。在构建之前,请确保调整或删除 .dockerignore 文件。

  2. 构建:

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

    1. docker cp $(docker create --name static-laravel-app-tmp static-laravel-app):/go/src/app/dist/frankenphp-linux-x86_64 frankenphp ; docker rm static-laravel-app-tmp
  4. 填充缓存:

    1. ./frankenphp php-cli artisan optimize
  5. 运行数据库迁移(如果有):

    1. ./frankenphp php-cli artisan migrate
  6. 生成应用的密钥:

    1. ./frankenphp php-cli artisan key:generate
  7. 启动服务器:

    1. ./frankenphp php-server

你的应用现在已经准备好了!

应用嵌入 文档中了解更多可用选项以及如何为其他操作系统构建二进制文件。

更改存储路径

默认情况下,Laravel 将上传的文件、缓存、日志等存储在应用的 storage/ 目录中。这对于嵌入式应用来说是不适合的,因为每个新版本将被提取到不同的临时目录中。

设置 LARAVEL_STORAGE_PATH 环境变量(例如,在 .env 文件中),或者调用 Illuminate\Foundation\Application::useStoragePath() 方法以使用临时目录之外的目录。

使用独立二进制文件运行 Octane

甚至可以将 Laravel Octane 应用打包为独立二进制文件!

这样做,请正确安装 Octane 并按照 前一节 中描述的步骤操作。

然后,要通过 Octane 以工作模式启动 FrankenPHP,请运行:

  1. PATH="$PWD:$PATH" ./frankenphp php-cli artisan octane:frankenphp

![注意]

要使命令工作,独立二进制文件 必须 被命名为 frankenphp,因为 Octane 需要在路径中有一个名为 frankenphp 的程序可用。