使用 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
的文件中:{
frankenphp
order 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/app
COPY . .
# 删除测试和其他不必要的文件以节省空间
# 或者,在 .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
的程序可用。