Write the Code. Change the World.

6月 28

https://learnku.com/docs/laravel/10.x/octane/14909#swoole

https://segmentfault.com/a/1190000040673969

https://chriswhite.is/coding/swoole-vs-roadrunner-for-laravel-octane/

composer require laravel/octane

# 选择 swoole
php artisan octane:install

# 安装 swoole
pecl install swoole

# 查找 php.ini 文件位置
php -i grep | php.ini

# vim 编辑,并配置
extension=swoole.so

# 重启 php
sudo /etc/init.d/php-fpm restart

# 查看扩展
php -i |grep swoole

然后配置 swoole. 打开根目录下的 config/octance.php,加入下边的配置。

 'swoole' => [
        'options' => [
            'log_file' => storage_path('logs/swoole/swoole_http.log'),
            'package_max_length' => 10 * 1024 * 1024,
        ],
    ],

可以对一些细节进行配置。

# 指定服务,这里是 swoole
OCTANE_SERVER=

# 是否使用 https
OCTANE_HTTPS

下边来启动服务。

php artisan octane:start

配置 nginx

map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}

server {
    listen 80;
    listen [::]:80;
    listen 443 ssl http2;
    server_tokens off;
    server_name .youme.com;
    root "/home/vagrant/code/temp/youme.com/public";

    index index.html index.htm index.php;

    charset utf-8;

    location /index.php {
        try_files /not_exists @octane;
    }

    location / {
        try_files $uri $uri/ @octane;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    access_log off;
    error_log  /var/log/nginx/youme.com-error.log error;

    sendfile off;

    location @octane {
        set $suffix "";

        if ($uri = /index.php) {
            set $suffix ?$query_string;
        }

        proxy_http_version 1.1;
        proxy_set_header Host $http_host;
        proxy_set_header Scheme $scheme;
        proxy_set_header SERVER_PORT $server_port;
        proxy_set_header REMOTE_ADDR $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;

        proxy_pass http://127.0.0.1:8000$suffix;
    }

    ssl_certificate     /etc/ssl/certs/youme.com.crt;
    ssl_certificate_key /etc/ssl/certs/youme.com.key;
}

完整的配置是这样子的。

然后安装 chokidar 来监视。

项目目录下

sudo pnpm add -D chokidar

下边来启动 Octane 看看请求。

php artisan octane:start --watch

多次刷新浏览器,请求如下所示。

测试网页如下所示。测试网页就是直接使用初始化的 laravel 项目的。

当然,你也可以手动指定端口、进程这些。

php artisan octane:start --server=swoole --port=8010

# 指定进程数
php artisan octane:start --workers=4

php artisan octane:start --max-requests=250

php artisan octane:start --workers=4 --task-workers=6

守护进程

到此,用时用上了,可是你终端不能关啊。你一关窗口。服务就停了。必须得一直盯着,这滋味不好受压。这个着急啊。可是,是有方法的。 node.js 那边一般用 pm2 来达成守护的作用。 php 这边可以用 supervisord 来实现。

/etc/supervisor/conf.d 下,新建 youme.com.conf 文件。 ubuntu 和 centos 文件夹以及命名可能会有些不一样。注意点。

[program:youme.com]
process_name=%(program_name)s_%(process_num)02d
command=/usr/bin/php8.2 /home/vagrant/code/temp/youme.com/artisan octane:start
autostart=true
autorestart=true
user=nginx
numprocs=3
redirect_stderr=true
stdout_logfile=/etc/supervisor/conf.d/youme.com.log
stderr_logfile=/etc/supervisor/conf.d/youme.com_err.log

启动。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注