参考资料

  1. Fresns 的时区配置核心是在 .env 文件中设置 APP_TIMEZONE 参数
  2. Fresns 的代理环境配置,核心是让系统在 CDN 或反向代理
  3. Fresns 核心安装要求汇总
  4. Supervisor 是 Fresns 在生产环境中运行队列的标准方案
  5. OpenResty 本质上是一个集成了 Nginx 与 LuaJIT 的 Web 平台
  6. Fresns 的队列,它的核心是按需配置,并非安装必选项
  7. Fresns 对 PHP 超时限制有明确要求,主要是为了避免插件依赖下载超时
  8. Fresns 的队列进程启动命令,核心就是 php artisan queue:work

RoadRunner 是 Octane 支持的三个服务器之一,它的定位是“最稳定、进程隔离最好”的选择

RoadRunner 是 Octane 支持的三个服务器之一,它的定位是“最稳定、进程隔离最好”的选择。它用 Go 编写,以二进制形式运行,不需要安装任何 PHP 扩展,天然适合容器化部署。

📦 安装与激活

在 Fresns 根目录的终端中执行:

1. 安装 Octane 包

composer require laravel/octane

2. 安装 RoadRunner 服务

php artisan octane:install --server=roadrunner

首次启动时,Octane 会自动下载对应平台的 RoadRunner 二进制文件。如果下载失败,也可以手动安装:

composer require spiral/roadrunner-cli spiral/roadrunner-http
./vendor/bin/rr get-binary

3. 启动服务

php artisan octane:start --server=roadrunner

默认监听 127.0.0.1:8000。

⚙️ 启动参数说明

参数说明默认值
--host绑定的 IP 地址127.0.0.1
--port服务端口8000
--rpc-portRoadRunner 的 RPC 通信端口6001
--workersWorker 进程数量auto
--max-requests重启前处理的最大请求数500

🔗 Nginx 反向代理配置

RoadRunner 同样需要 Nginx 作为前置代理,配置与 Swoole 场景一致:

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

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

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;
}

🔄 进程守护(必须)

与 Swoole 一样,RoadRunner 必须加入进程守护。宝塔面板中可参考:

  • 启动用户:www

  • 运行目录:Fresns 主程序根目录

  • 启动命令:php artisan octane:start --server=roadrunner --host=127.0.0.1 --port=8000

💡 RoadRunner 与 Swoole 的核心差异

对比项RoadRunnerSwoole
依赖Go 二进制,无需 PHP 扩展需安装 PECL swoole 扩展
进程隔离强隔离,一个 worker 崩溃不影响其他进程间共享内存,隔离性较弱
并发任务不支持 Octane::concurrently()支持协程并发和 Task Worker
日志输出默认输出到 stderr,需在 .rr.yaml 配置落盘按 PHP 标准输出处理
适用场景容器化、混跑 HTTP + Queue、追求稳定需要并发 I/O、深度调优

简单选择建议:如果你不想折腾 PHP 扩展、希望部署简单且进程隔离好,选 RoadRunner;如果你需要协程并发或 Swoole 生态的额外能力,选 Swoole。

⚠️ 注意事项

二进制文件位置:RoadRunner 的 rr 二进制文件需要可执行权限,如果提示“binary not found”,检查是否在项目根目录且已执行 chmod +x rr。

日志配置:RoadRunner 默认将日志输出到 stderr,如果希望日志落盘,需要在项目根目录创建 .rr.yaml 文件,配置 logs.output 指向日志文件。

文件上传限制:如果遇到大文件上传失败,检查 RoadRunner 的默认请求体大小限制,必要时在 .rr.yaml 中调整 http.max_request_size。

HTTPS 链接修正:如果站点启用了 HTTPS,在 .env 中添加 OCTANE_HTTPS=true,否则 Octane 生成的链接会以 http:// 开头。

作者:王壹杰
时间:2026-10-01 16:51:23
来源:https://fresns.ciilii.com/