本文原创,转载请注明出处。
我写的其它关于 Laravel Sail 内容:使用 PHPStorm 来开发和 Debug Laravel Sail 项目
Laravel Sail 为我们提供了基于 Docker 的开发环境,Laravel Octane 可以显著提升我们的 Laravel 应用的性能,那我们应该如何使用 Laravel Sail 来开发我们的 Laravel Octane 应用呢?
Laravel Octane 通过使用高性能应用程序服务器为您的应用程序提供服务来增强您的应用程序的性能,包括 Open Swoole,Swoole,和 RoadRunner。Octane 启动您的应用程序一次,将其保存在内存中,然后以极快的速度向它提供请求。 —— Laravel 9 Octane 文档
Laravel Sail 是一个轻量级的命令行界面,用于与 Laravel 的默认 Docker 开发环境进行交互。Sail 为使用 PHP,MySQL 和 Redis 构建 Laravel 应用程序提供了一个很好的起点,而无需事先具有 Docker 经验。 —— Laravel 9 Octane 文档
本文假设本地已经拥有一个 Laravel Sail 项目且已经能够正常启动容器进行开发,将在此基础上为其安装 Laravel Octane 并使其能够在 Sail 容器中运行。
Laravel Octane 的安装
建立 sail 命令别名,将用 sail
来代替 vendor/bin/sail
alias sail='[ -f sail ] && bash sail || bash vendor/bin/sail'
启动 sail 容器
sail up -d
安装 Octane
sail composer require laravel/octane
由于 Sail 容器中默认安装 php-swoole 扩展,所以我们无需再手动为容器配置 PHP 扩展,直接执行 Octane 的安装指令即可:
sail php artisan octane:install
在安装的过程中,选择 swoole
安装方法
开放容器端口
在项目根目录的 docker-compose.yml
文件中开放 8000 端口,如果你的项目根目录没有这个文件,则需要运行以下命令让 Sail 发布 Docker 文件
sail artisan sail:publish
在 docker-compose.yml
中开放 8000 端口
...
services:
laravel.test:
...
ports:
- '${APP_PORT:-80}:80'
# 此处添加 8000 端口
- '8000:8000'
...
安装 Chokidar
由于 Laravel Octane 启动后,应用将常驻内存,无法及时地根据文件的修改重新解释我们的应用,所以需要监听文件的修改,在代码变更时重新解释。
监听文件修改需要 Chokidar 文件监视库
sail npm install --save-dev chokidar
修改 Supervisord 指令
Sail 容器中是如何维持 PHP 进程的?
打开项目根目录下的 /docker/8.1/Dockerfile
若找不到文件请使用 sail artisan sail:publish
发布文件
docker 文件夹内有针对不同版本的 PHP 配置不同的容器,具体执行哪个版本是看 docker-compose.yml
...
services:
laravel.test:
build:
context: ./docker/8.1 # 此处即为 Dockerfile 所在文件夹
在 Dockerfile 中可以看到如下的指令
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
Supervisord 是一款进程管理工具,主要功能是保护我们的进程,它将在后台启动我们需要的进程,并防止其被操作系统中断或者在中断后迅速重启。此处的 supervisord.conf
即为 Supervisord 的配置文件。根据指令,我们可以知道 Sail 是在 Docker 启动时将 Dockerfile 同目录下的 supervisord.conf
复制进容器中 Supervisord 应用的目录中。
在同目录下的 start-container
文件中我们也可以看到 sail 在启动容器时将执行以下 Supervisord 指令来根据配置文件启动我们的进程。
/usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf
所以我们要修改的内容就在 supervisord.conf
中,打开文件,将
...
[program:php]
command=/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan serve --host=0.0.0.0 --port=80
...
修改为
...
[program:php]
command=/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan octane:start --server=swoole --host=0.0.0.0 --port=8000 --watch
...
此处即为将原先的 php artisan serve
启动修改为 php artisan octane:start
启动,并指定服务器为 swoole 服务,在 8000 端口传输数据,并监听文件修改。
容器 reBuild
由于 supervisord.conf
是在容器 build 的阶段便进入容器了,所以修改 supervisord.conf
后需要重新 build 我们的容器,使用以下命令即可:
sail build --no-cache
Enjoy it~
启动容器后,查看 Octane 的运行状态
sail php artisan octane:status
使用浏览器访问 localhost:8000 即可看到我们应用的首页。
尽情开发你的高性能 PHP 应用吧~