使用 Laravel Sail 添加和开发 Laravel Octane 应用(兼容 Debug)

本文原创,转载请注明出处。

我写的其它关于 Laravel Sail 内容:使用 PHPStorm 来开发和 Debug Laravel Sail 项目

使用 Laravel Sail 添加和开发 Laravel Octane 应用(兼容 Debug)

Laravel Sail 为我们提供了基于 Docker 的开发环境,Laravel Octane 可以显著提升我们的 Laravel 应用的性能,那我们应该如何使用 Laravel Sail 来开发我们的 Laravel 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 安装方法

image-20220315000952661

开放容器端口

在项目根目录的 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 容器构建(build)时将 Dockerfile 同目录下的 supervisord.conf 复制进容器中 Supervisord 应用的目录中。

在同目录下的 start-container 文件中我们也可以看到 sail 在启动容器时将执行以下 Supervisord 指令来根据配置文件启动我们的进程。

/usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf

所以我们要修改的内容就在 supervisord.conf 中,打开文件,此处便是容器执行的指令,文档建议的方法是直接修改这条指令,但是这将导致无法使用 PhpStorm 进行 Debug,所以我们的思路是让容器同时启动和守护两个进程。

supervisord.conf 的末尾添加 octane 的配置

[program:octane]
command=/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan octane:start --server=swoole --host=0.0.0.0 --port=8000 --watch
user=sail
environment=LARAVEL_SAIL="1"
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0

此处即为启动基于 Octane 的 Laravel 应用,指定服务器为 swoole 服务,在 8000 端口传输数据,并监听文件修改。

容器 reBuild

由于 supervisord.conf 是在容器 build 的阶段便进入容器了,所以修改 supervisord.conf 后需要重新 build 我们的容器,使用以下命令即可:

sail build --no-cache

Enjoy it~

启动容器后,查看 Octane 的运行状态

sail php artisan octane:status

image-20220315083123578

使用浏览器访问 localhost:8000 即可看到我们应用的首页。

image-20220315083252779

在需要进行 Debug 的时候访问 80 端口上的应用即可。
尽情开发你的高性能 PHP 应用吧~

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 1

我按你的进行启动后,访问80端口是关闭的

5个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!