Skip to main content

¿Qué es Octane?

Laravel Octane es un paquete que mejora drásticamente el rendimiento de las aplicaciones Laravel usando servidores de aplicaciones de alto rendimiento. En un PHP-FPM normal, la aplicación se arranca y se termina en cada solicitud. Con Octane, la aplicación se arranca una única vez y se mantiene en memoria, procesando las siguientes solicitudes con gran rapidez. La mayor diferencia respecto a PHP-FPM es que el proceso de arranque de la aplicación (registro de service providers, etc.) no se repite en cada solicitud. Al arrancar una sola vez, las solicitudes se procesan a altísima velocidad.

Servidores compatibles

Octane admite los siguientes tres servidores.
En Laravel Cloud se recomienda operar Octane con FrankenPHP y ofrece soporte totalmente gestionado.

Instalación y configuración

Instalación del paquete

Configuración inicial de Octane

Al ejecutarlo se muestra un prompt para elegir el servidor. Al seleccionarlo se genera config/octane.php.

FrankenPHP

Al elegir FrankenPHP, Octane descarga automáticamente el binario. No hacen falta pasos adicionales.

RoadRunner

Al elegir RoadRunner, Octane descarga automáticamente el binario.

Swoole

Swoole se instala como extensión de PHP con PECL.
Para usar Open Swoole, ejecuta:

Cómo arrancar

Arrancar el servidor

Por defecto arranca en el puerto 8000. Accede en http://localhost:8000.

Indicar el servidor

Indicar el número de workers

Para especificar también los task workers en Swoole:

Observación de cambios en archivos

Durante el desarrollo, los cambios en los archivos no se reflejan sin reiniciar el servidor. Con --watch se reinicia automáticamente.
Para usar --watch necesitas Node.js y Chokidar.

Otros comandos de gestión

Consideraciones sobre inyección de dependencias

En Octane la aplicación se mantiene en memoria, por lo que register y boot de los service providers solo se ejecutan una vez, al arrancar el servidor. La misma instancia de la aplicación se reutiliza entre solicitudes, así que hay que tener cuidado al inyectar el contenedor o la solicitud en el constructor de un objeto.

Inyección del contenedor

Si inyectas el contenedor directamente en el constructor de un singleton, se reutiliza un contenedor antiguo.
Los helpers globales app() y Container::getInstance() siempre devuelven el contenedor más reciente, así que son seguros.

Inyección de la solicitud

Tipar Illuminate\Http\Request en los métodos del controlador o en closures de ruta es seguro. El helper global request() también devuelve siempre la solicitud actual.

Inyección del repositorio de configuración

El helper global config() siempre devuelve el repositorio de configuración más reciente, así que es seguro.

Mitigación de fugas de memoria

Como Octane mantiene la aplicación en memoria, acumular datos en propiedades estáticas provoca fugas.

Reciclar workers con max-requests

Al reiniciar automáticamente el worker tras un cierto número de solicitudes se atenúan las fugas de memoria. El valor por defecto es 500 solicitudes.

Configuración del tiempo máximo de ejecución

Puedes definir el tiempo máximo de una solicitud en config/octane.php. Por defecto son 30 segundos.
Si cambias max_execution_time, reinicia el servidor Octane.

Tareas concurrentes (solo Swoole)

Con Swoole puedes ejecutar varias operaciones en paralelo con Octane::concurrently().
Las tareas concurrentes se ejecutan como “task workers” de Swoole en procesos separados. Indica el número con --task-workers.
A concurrently se le pueden pasar como máximo 1024 tareas (límite de Swoole).

Tick e Interval (solo Swoole)

En Swoole puedes registrar tareas que se ejecutan a intervalos regulares. Se registran en el método boot de un service provider.

Caché de Octane (solo Swoole)

Caché en memoria ultrarrápida basada en las tablas de Swoole. Soporta hasta 2 millones de lecturas/escrituras por segundo.

Caché con intervalo

Caché que se actualiza automáticamente cada cierto tiempo.
Los datos de la caché de Octane se pierden al reiniciar el servidor.

Tablas de Swoole (solo Swoole)

Puedes definir tablas en memoria accesibles desde todos los workers. Se configuran en tables de config/octane.php.
Accede a la tabla con Octane::table().
Los únicos tipos de columna soportados por las tablas de Swoole son string, int y float. Los datos se pierden al reiniciar el servidor.

Operación en producción

Configuración Nginx + Octane

En producción es habitual ejecutar Octane detrás de Nginx. Nginx sirve los archivos estáticos y termina SSL, mientras que las solicitudes dinámicas se pasan por proxy a Octane.

Ejecución permanente con Supervisor

En producción, usa Supervisor para mantener Octane siempre activo.

Habilitar HTTPS

Para generar enlaces HTTPS a través de Octane, configura en .env:

Integración con Laravel Cloud

Laravel Cloud ofrece soporte totalmente gestionado para Octane con FrankenPHP. No necesitas configurar Nginx ni Supervisor: puedes activarlo en solo dos pasos.
1

Instalación del paquete

Instala Octane. Ejecutar octane:install es opcional.
2

Activar Octane en Laravel Cloud

En la configuración del cluster de cómputo del entorno, activa “Use Octane as runtime” y guarda/despliega. Laravel Cloud construirá y arrancará automáticamente la aplicación con FrankenPHP + Octane.
Consulta la documentación de Laravel Cloud para más detalles.

Recargar workers tras el despliegue

Tras un despliegue, recarga los workers para cargar el nuevo código en memoria.
Última modificación el 13 de julio de 2026