Instalar RoadRunner PHP en Linux
Una forma de optimizar o hacer que un proyecto de gran alcance en PHP mantenga un buen rendimiento, es desarrollarlo con RoadRunner PHP. RoadRunner es un servidor de aplicaciones de alto rendimiento, balanceador de carga y administrador de procesos de código abierto diseñado específicamente para PHP, pero escrito en Go (Golang). Vamos entonces a instalar RoadRunner PHP en Linux Ubuntu.
A diferencia del modelo tradicional de PHP (como PHP-FPM), donde cada petición HTTP inicia y destruye el proceso de la aplicación, RoadRunner mantiene la aplicación «viva» en memoria entre una petición y otra.
Instalar RoadRunner PHP en Linux
La instalación básica de RoadRunner consiste en estos pasos:
1- Instalar PHP 8.3 sudo apt install php8.3
2- Instalar composer sudo apt install composer
3- Definimos un directorio para nuestro proyecto (yo lo llamé proyecto-php), luego ingresamos a ese directorio y procedemos con la instalación de RoadRunner:
composer require spiral/roadrunner-cli --dev
./vendor/bin/rr get
El comando rr ya es RoadRunner, y durante el proceso de instalación nos preguntará si deseamos crear el archivo .rr.yaml predetermiando. Le decimos entonces que Yes.
El archivo .rr.yaml es un archivo de configuración en formato YAML que le indica al servidor de Go cómo debe comportarse, qué servicios activar y cómo gestionar nuestros procesos de PHP. Podemos usar este formato de .rr.yaml que yo uso generalmente:
version: '3'
server:
command: "php worker.php"
relay: "pipes"
http:
address: "0.0.0.0:8080"
workers:
command: "php worker.php"
relay: "pipes"
middleware: [ "static", "gzip" ]
static:
dir: "./assets" #Directorio donde tengo a Bootstrap 5.3.3
forbid: [ ".php" ]
calculate_etag: true
allow: [".css", ".js", ".png", ".jpg", ".jpeg", ".gif", ".ico", ".pdf"]
reload:
enabled: true
patterns: [".php"]
dirs: ["app", "src", "routes", "views"]
ignore: [".git", "vendor"]
# CONFIGURACIÓN DE LOGS
logs:
level: debug # Nivel global de debug
mode: development
channels:
server:
level: debug # Baja el nivel del worker para ver más
output: [ "logs/server.log" ]
http:
level: debug # Baja el nivel del HTTP para ver todas las peticiones
output: [ "logs/http.log" ]
Si RoadRunner es el motor de un coche, el .rr.yaml es el panel de control donde definimos la potencia, los límites y los accesorios.
Para trabajar con PHP puro y RoadRunner, necesitamos la herramienta de RoadRunner y las implementaciones PSR-7 (que reemplazan a los frameworks tipo Laravel):
composer require spiral/roadrunner-http nyholm/psr7
Al finalizar el proceso de instalación debemos tener una estructura de archivos y directorios básica así:
Pero en el archivo .rr.yaml que compartí tenemos relacionados unos directorios adicionales que no aparecen en la estructura básica. Esos directorios y archivos adicionales son directorios que yo tengo en mi proyecto para los logs (logs/), para los estilos, javascript y bootstrap (assets/), también tengo un directorio llamado app/ que es donde úbico el desarrollo de mi proyecto, y finalmente en la raíz del directorio tengo al worker.php.
El worker.php es el archivo de entrada (punto de enlace) que vive dentro de nuestra aplicación PHP, y se encarga de comunicarse con RoadRunner.
A diferencia de un archivo index.php tradicional que se ejecuta y muere en cada petición, el worker.php es un script de bucle infinito. Se inicia una vez, carga nuestro framework o lógica en memoria, y luego se queda esperando ‘órdenes’ de RoadRunner. Todos los scripts y desarrollos que hagamos en adelante pasan por el worker.php.
Entonces ya deberíamos tener una estructura de directorio y archivos así:
Mira, como RoadRunner no es Apache, ni NGINX, ni cosa parecida, debemos implementar nosotros mismos las funciones que necesitamos para manejar redireccionamientos, generar archivos PDF y XLSX. Pero he compartido aquí mi worker.php y un helper que ya tiene todo lo necesario para manejar esas funciones más comunes, además de la conexión a la base de datos, como cualquier sistema en PHP.
En el directorio app/ he colocado un script llamado prueba.php para validar el funcionamiento de RoadRunner.
<?php echo "Hola desde PHP con RoadRunner"; ?>
Poner en marcha a RoadRunner
Para poner en marcha a RoadRunner, basta con escribir este comando dentro del mismo directorio de nuestro proyecto:
./rr serve -d
Y listo
En el siguiente artículo podemos ver cómo contenerizar un proyecto de RoadRunner en Docker.
Más teoria sobre RoadRunner.
Comparte esto en




