使用 FrankenPHP 通过 Docker 部署 Laravel web 应用程序非常简单,只需将项目挂载到官方 Docker 镜像的 /app 目录中即可。
从 Laravel 应用的主目录运行此命令:
docker run -p 80:80 -p 443:443 -p 443:443/udp -v $PWD:/app dunglas/frankenphp
享受吧!
本地安装
或者,你可以从本地机器运行 FrankenPHP 与 Laravel 项目:
在 Laravel 项目根目录添加以下配置到名为
Caddyfile的文件中:{frankenphporder php_server before file_server}# 服务器的域名localhost {# 将 webroot 设置为 public/ 目录root * public/# 启用压缩(可选)encode zstd br gzip# 执行 public/ 目录中的 PHP 文件并服务资源php_server}
在 Laravel 项目根目录启动 FrankenPHP:
./frankenphp run。
Laravel Octane
Octane 可以通过 Composer 包管理器安装:
composer require laravel/octane
安装 Octane 后,你可以执行 octane:install Artisan 命令,这将在你的应用程序中安装 Octane 的配置文件:
php artisan octane:install --server=frankenphp
Octane 服务器可以通过 octane:start Artisan 命令启动。
php artisan octane:start
octane:start 命令可以接受以下选项:
--host: 服务器应绑定到的 IP 地址(默认:127.0.0.1)--port: 服务器应该可用的端口(默认:8000)--admin-port: 管理服务器应该可用的端口(默认:2019)--workers: 可用于处理请求的工作进程数量(默认:auto)--max-requests: 在重新加载服务器之前要处理的请求数量(默认:500)--caddyfile: FrankenPHPCaddyfile文件的路径--https: 启用 HTTPS、HTTP/2 和 HTTP/3,并自动生成和更新证书--http-redirect: 启用 HTTP 到 HTTPS 的重定向(仅当传递 –https 时启用)--watch: 当应用程序被修改时自动重新加载服务器--poll: 在通过监视器监视网络文件时使用文件系统轮询--log-level: 记录指定日志级别或更高级别的日志消息
在 Laravel Octane 的官方文档 中了解更多信息。
Laravel 应用作为独立二进制文件
使用 FrankenPHP 的应用嵌入特性,可以将 Laravel 应用作为独立二进制文件分发。
按照以下步骤将你的 Laravel 应用打包为 Linux 的独立二进制文件:
在你的应用仓库中创建一个名为
static-build.Dockerfile的文件:FROM --platform=linux/amd64 dunglas/frankenphp:static-builder# 复制你的应用WORKDIR /go/src/app/dist/appCOPY . .# 删除测试和其他不必要的文件以节省空间# 或者,在 .dockerignore 文件中添加这些文件RUN rm -Rf tests/# 复制 .env 文件RUN cp .env.example .env# 更改 APP_ENV 和 APP_DEBUG 以准备生产环境RUN sed -i'' -e 's/^APP_ENV=.*/APP_ENV=production/' -e 's/^APP_DEBUG=.*/APP_DEBUG=false/' .env# 如有需要,对你的 .env 文件进行其他更改# 安装依赖RUN composer install --ignore-platform-reqs --no-dev -a# 构建静态二进制文件WORKDIR /go/src/app/RUN EMBED=dist/app/ ./build-static.sh
注意
一些
.dockerignore文件将忽略vendor/目录和.env文件。在构建之前,请确保调整或删除.dockerignore文件。构建:
docker build -t static-laravel-app -f static-build.Dockerfile .
提取二进制文件:
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
填充缓存:
./frankenphp php-cli artisan optimize
运行数据库迁移(如果有):
./frankenphp php-cli artisan migrate
生成应用的密钥:
./frankenphp php-cli artisan key:generate
启动服务器:
./frankenphp php-server
你的应用现在已经准备好了!
在 应用嵌入 文档中了解更多可用选项以及如何为其他操作系统构建二进制文件。
更改存储路径
默认情况下,Laravel 将上传的文件、缓存、日志等存储在应用的 storage/ 目录中。这对于嵌入式应用来说是不适合的,因为每个新版本将被提取到不同的临时目录中。
设置 LARAVEL_STORAGE_PATH 环境变量(例如,在 .env 文件中),或者调用 Illuminate\Foundation\Application::useStoragePath() 方法以使用临时目录之外的目录。
使用独立二进制文件运行 Octane
甚至可以将 Laravel Octane 应用打包为独立二进制文件!
这样做,请正确安装 Octane 并按照 前一节 中描述的步骤操作。
然后,要通过 Octane 以工作模式启动 FrankenPHP,请运行:
PATH="$PWD:$PATH" ./frankenphp php-cli artisan octane:frankenphp
![注意]
要使命令工作,独立二进制文件 必须 被命名为
frankenphp,因为 Octane 需要在路径中有一个名为frankenphp的程序可用。
