spiral/roadrunner

RoadRunner: High-performance PHP application server and process manager written in Go and powered with plugins

Fund package maintenance!
roadrunner-server

Installs: 4 407 476

Dependents: 84

Suggesters: 2

Security: 0

Stars: 7 663

Watchers: 147

Forks: 403

Open Issues: 43

Language:Go

Type:metapackage

v2024.1.0 2024-04-11 16:32 UTC

This package is auto-updated.

Last update: 2024-04-11 16:38:44 UTC


README

040fb694-1dd3-4865-9d29-8e0748c2c8b8

68747470733a2f2f706f7365722e707567782e6f72672f73706972616c2f726f616472756e6e65722f76657273696f6e 68747470733a2f2f676f646f632e6f72672f6769746875622e636f6d2f726f616472756e6e65722d7365727665722f726f616472756e6e65722f76323032343f7374617475732e737667 68747470733a2f2f696d672e736869656c64732e696f2f747769747465722f666f6c6c6f772f73706972616c7068703f7374796c653d736f6369616c 68747470733a2f2f636f6465636f762e696f2f67682f726f616472756e6e65722d7365727665722f726f616472756e6e65722f6272616e63682f6d61737465722f67726170682f62616467652e737667 68747470733a2f2f676f7265706f7274636172642e636f6d2f62616467652f6769746875622e636f6d2f726f616472756e6e65722d7365727665722f726f616472756e6e65722f7632 68747470733a2f2f696d672e736869656c64732e696f2f62616467652f646973636f72642d636861742d6d6167656e74612e737667 68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64642f73706972616c2f726f616472756e6e65723f7374796c653d666c61742d737175617265 All releases

RoadRunner is an open-source (MIT licensed) high-performance PHP application server, process manager written in Go and powered with plugins ❤️. It supports running as a service with the ability to extend its functionality on a per-project basis with plugins.

Features

RoadRunner features a range of plugins, including HTTP(S)/2/3 and fCGI servers that are compatible with PSR-7/PSR-17 standards. This is just one of its many capabilities. It serves as an effective alternative to the traditional Nginx+FPM setup, providing improved performance and more flexibility. Its extensive plugin options go far beyond just HTTP(S)/2/3 and fCGI servers, offering a broad range of functionalities:

  • Queue drivers: RabbitMQ, Kafka, SQS, Beanstalk, NATS, In-Memory.
  • KV drivers: Redis, Memcached, BoltDB, In-Memory.
  • OpenTelemetry protocol support (gRPC, http, jaeger).
  • Workflow engine via Temporal.
  • gRPC server. For increased speed, the protobuf extension can be used.
  • HTTP(S)/2/3 and fCGI servers features automatic TLS management, 103 Early Hints support and middleware like: Static, Headers, gzip, prometheus (metrics), send (x-sendfile), OTEL, proxy_ip_parser, etc.
  • Embedded distribute lock plugin which manages access to shared resources.
  • Metrics server (you might easily expose your own).
  • WebSockets and Broadcast via Centrifugo server.
  • Systemd-like services manager with auto-restarts, execution time limiter, etc.
  • Production-ready.
  • And more 😉

Join our discord server: Link

Official Website | Documentation | Forum | Release schedule

Installation

The easiest way to get the latest RoadRunner version is to use one of the pre-built release binaries, which are available for OSX, Linux, FreeBSD, and Windows. Instructions for using these binaries are on the GitHub releases page.

Docker:

To get the roadrunner binary file you can use our docker image: ghcr.io/roadrunner-server/roadrunner:2024.X.X (more information about image and tags can be found here).

FROM ghcr.io/roadrunner-server/roadrunner:2024.X.X AS roadrunner
FROM php:8.3-cli

COPY --from=roadrunner /usr/bin/rr /usr/local/bin/rr

# USE THE RR

Configuration located in the .rr.yaml file (full sample):

Installation via Composer

You can also install RoadRunner automatically using the command shipped with the composer package, run:

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

Server binary will be available at the root of your project.

Note

PHP's extensions php-curl and php-zip are required to download RoadRunner automatically. PHP's extensions php-sockets need to be installed to run roadrunner. Check with php --modules your installed extensions.

Installation option for the Debian-derivatives (Ubuntu, Mint, MX, etc)

wget https://github.com/roadrunner-server/roadrunner/releases/download/v2024.X.X/roadrunner-2024.X.X-linux-amd64.deb
sudo dpkg -i roadrunner-2024.X.X-linux-amd64.deb

Download the latest release via curl:

curl --proto '=https' --tlsv1.2 -sSf  https://raw.githubusercontent.com/roadrunner-server/roadrunner/master/download-latest.sh | sh

MacOS using Homebrew:

brew install roadrunner

Configuration can be located in .rr.yaml file (full sample):

version: '3'

rpc:
  listen: tcp://127.0.0.1:6001

server:
  command: "php worker.php"

http:
  address: "0.0.0.0:8080"

logs:
  level: error

Read more in Documentation.

Example Worker:

<?php

use Spiral\RoadRunner;
use Nyholm\Psr7;

include "vendor/autoload.php";

$worker = RoadRunner\Worker::create();
$psrFactory = new Psr7\Factory\Psr17Factory();

$worker = new RoadRunner\Http\PSR7Worker($worker, $psrFactory, $psrFactory, $psrFactory);

while ($req = $worker->waitRequest()) {
    try {
        $rsp = new Psr7\Response();
        $rsp->getBody()->write('Hello world!');

        $worker->respond($rsp);
    } catch (\Throwable $e) {
        $worker->getWorker()->error((string)$e);
    }
}

Important

If you see the EOF error, check that you have installed the PHP packages from this step. If this does not help, try to execute the command php worker.php directly and check the output.

Available Plugins: link

Run:

To run application server:

$ ./rr serve -c .rr.yaml

License:

The MIT License (MIT). Please see LICENSE for more information. Maintained by Spiral Scout.

Contributors

Thanks to all the people who already contributed!

68747470733a2f2f636f6e7472696275746f72732d696d672e7765622e6170702f696d6167653f7265706f3d726f616472756e6e65722d7365727665722f726f616472756e6e6572