使用 Laravel Sail 容器添加和开发 Laravel Octane 应用进程
本文原创,转载请注明出处。
我写的其它关于 Laravel Sail 内容:使用 PHPStorm 来开发和 Debug Laravel Sail 项目
Laravel Sail 为我们提供了基于 Docker 的开发环境,Laravel Octane 可以显著提升我们的 Laravel 应用的性能,那我们应该如何使用 Laravel Sail 来开发我们的 Laravel Octane 应用呢?
本文假设本地已经拥有一个 Laravel Sail 项目且已经能够正常启动容器进行开发,将在此基础上为其安装 Laravel Octane 并使其能够在 Sail 容器中运行。
Laravel Octane 的安装
建立 sail 命令别名,将用 sail
来代替 vendor/bin/sail
1 | alias sail='[ -f sail ] && bash sail || bash vendor/bin/sail' |
启动 sail 容器
1 | sail up -d |
安装 Octane
1 | sail composer require laravel/octane |
由于 Sail 容器中默认安装 php-swoole 扩展,所以我们无需再手动为容器配置 PHP 扩展,直接执行 Octane 的安装指令即可:
1 | sail php artisan octane:install |
在安装的过程中,选择 swoole
安装方法
开放容器端口
在项目根目录的 docker-compose.yml
文件中开放 8000 端口,如果你的项目根目录没有这个文件,则需要运行以下命令让 Sail 发布 Docker 文件
1 | sail artisan sail:publish |
在 docker-compose.yml
中开放 8000 端口
1 | ... |
安装 Chokidar
由于 Laravel Octane 启动后,应用将常驻内存,无法及时地根据文件的修改重新解释我们的应用,所以需要监听文件的修改,在代码变更时重新解释。
监听文件修改需要 Chokidar 文件监视库
1 | sail npm install --save-dev chokidar |
修改 Supervisord 指令
Sail 容器中是如何维持 PHP 进程的?
打开项目根目录下的 /docker/8.1/Dockerfile
若找不到文件请使用 sail artisan sail:publish
发布文件
docker 文件夹内有针对不同版本的 PHP 配置不同的容器,具体执行哪个版本是看 docker-compose.yml
1 | ... |
在 Dockerfile 中可以看到如下的指令
1 | COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf |
Supervisord 是一款进程管理工具,主要功能是保护我们的进程,它将在后台启动我们需要的进程,并防止其被操作系统中断或者在中断后迅速重启。此处的 supervisord.conf
即为 Supervisord 的配置文件。根据指令,我们可以知道 Sail 是在 Docker 构建(build)时将 Dockerfile 同目录下的 supervisord.conf
复制进容器中 Supervisord 应用的目录中。
在同目录下的 start-container
文件中我们也可以看到 sail 在启动容器时将执行以下 Supervisord 指令来根据配置文件启动我们的进程。
1 | /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf |
所以我们要修改的内容就在 supervisord.conf
中,打开文件,此处便是容器执行的指令,文档建议的方法是直接修改这条指令,但是这将导致无法使用 PhpStorm 进行 Debug,所以我们的思路是让容器同时启动和守护两个进程。
在 supervisord.conf
的末尾添加 octane
的配置
1 | [program:octane] |
此处即为启动基于 Octane 的 Laravel 应用,指定服务器为 swoole 服务,在 8000 端口传输数据,并监听文件修改。
容器 reBuild
由于 supervisord.conf
是在容器 build 的阶段便进入容器了,所以修改 supervisord.conf
后需要重新 build 我们的容器,使用以下命令即可:
1 | sail build --no-cache |
Enjoy it~
启动容器后,查看 Octane 的运行状态
1 | sail php artisan octane:status |
使用浏览器访问 localhost:8000 即可看到我们应用的首页。
尽情开发你的高性能 PHP 应用吧~