C贸mo ejecutar tu aplicaci贸n Symfony con FrankenPHP 馃悩+馃

Rate this post

Durante mucho tiempo, el ecosistema de PHP ha estado pr谩cticamente limitado a la ejecuci贸n de las aplicaciones mediante CLI o a trav茅s de Apache o Nginx combinados con FCGI o PHP-FPM. Este enfoque responde perfectamente al modelo de PHP en el que entre distintas peticiones o ejecuciones no se comparte ning煤n recurso, b谩sicamente la aplicaci贸n se ejecuta desde 0 en cada invocaci贸n. Esto cambi贸 hace no mucho tiempo con la introducci贸n de servidores de aplicaciones y librer铆as que introducen nuevas formas de ejecutar nuestras aplicaciones como Sswoole, RoadRunner o bref.

Con estos cambios, junto con la adopci贸n del cloud por parte de la industria y en concreto del ecosistema de PHP, Symfony decidi贸 lanzar su componente symfony/runtime que permite abstraer la aplicaci贸n del entorno en el que se ejecuta de modo que facilita el uso de entornos o arquitecturas distintas a las propuestas inicialmente. Es precisamente gracias a esto que hoy podemos hablar de c贸mo hacer que nuestra aplicaci贸n Symfony funcione sobre un servidor de reciente creaci贸n llamado FrankenPHP, de una forma tan sencilla como la que veremos en este art铆culo.

驴Qu茅 es FrankenPHP?

Se define como un servidor de aplicaciones moderno para PHP construido sobre el servidor web Caddy, y es precisamente el hecho de estar construido utilizando Caddy que le proporciona soporte para funcionalidades muy recientes que todav铆a no est谩n extendidas en otros entornos.

Algunos de los puntos fuertes de FrankenPHP son los siguientes:

  • Est谩 desarrollado con el foco puesto en su uso dentro de contenedores.
  • Permite ejecutar la aplicaci贸n en worker mode mejorando de manera sustancial los tiempos de carga.
  • A帽ade soporte para flujos en tiempo real mediante Mercure, que est谩 integrado directamente.

Adem谩s gracias a Caddy tendremos algunas funcionalidades extra sin tener que realizar grandes esfuerzos de configuraci贸n:

  • HTTPS autom谩tico.
  • Soporte HTTP/2.
  • Soporte HTTP/3.
  • Soporte para respuestas HTTP 103 Early Hints que nos permiten optimizar la carga de nuestra aplicaci贸n.

Aunque para nosotros como desarrolladores lo mejor de todo es que es compatible con todas nuestras aplicaciones PHP ya que el servidor propiamente dicho integra el interprete de PHP, pero si queremos podemos ir un poco m谩s all谩 y configurar el worker mode. Esto nos da un extra de flexibilidad y nos permite hacer una mejora progresiva de nuestras aplicaciones.

驴C贸mo ejecutar WordPress sobre FrankenPHP?

Desde acceseo creemos que uno de los puntos m谩s importantes es el enfoque puesto en el uso de contenedores, llevamos apostando por esta tecnolog铆a a帽os y a cualquiera que haya trabajado con FPM sobre contenedores le ser谩 familiar la mara帽a de servicios, vol煤menes y puertos a configurar para que el contenedor de PHP-FPM funcione con Apache o Nginx. Pues bien, FrankenPHP propone una soluci贸n muy simple en la que con 1 servicio sin dependencias tendremos acceso a todo con las ventajas de Caddy.

En acceseo durante el desarrollo de las aplicaciones usamos nuestras propias im谩genes de httpd y php-fpm open source y configurado todo a trav茅s de docker compose. Por tanto partiremos de la base de estas im谩genes de php-fpm para los ejemplos en esta configuraci贸n.

Tomando el dockerfile correspondiente a PHP 8.2 vamos a aplicar los siguientes cambios:

diff-dockerfile-frankenphp

Simplemente modificamos la imagen que se usa como base por la de FrankenPHP y creamos con los permisos adecuados la carpeta /var/www/.local.

Una vez hecho esto hemos construido la imagen con el tag acceseo-local/php-fpm:8.2, ahora ya tenedremos todo listo para crear un archivo docker-compose.yml en el que configurar los servicios como el siguiente:

Puesto que nuestra imagen de php-fpm viene configurada con Xdebug, Composer y algunas extensiones m谩s mantenemos todo esto aunque estemos trabajando con FrankenPHP. Podemos seguir haciendo debug, gestionando paquetes o utilizando las extensiones como hemos venido haciendo hasta ahora pese a haber realizado el cambio a FrankenPHP.

Llegados a este punto podemos a帽adir los archivos de WordPress en la carpeta donde tenemos el archivo docker-compose.yml y al navegar a https://localhost deber铆amos ver el instalador de WordPress.

馃帀 Tenemos nuestra primera web funcionando sobre FrankenPHP! 馃

驴C贸mo ejecutar Symfony sobre FrankenPHP?

Con la configuraci贸n que hemos creado para WordPress (o cualquier otro proyecto PHP al uso) podemos ejecutar nuestra aplicaci贸n Syfmony, pero si queremos sacar todo el partido a FrankenPHP debemos configurar el worker mode que nos promete interesantes mejoras de rendimiento.

Para ello solo tendremos que instalar mediante composer el paquete runtime/frankenphp-symfony y a帽adir las siguientes variables de entorno al contenedor en la secci贸n environment del servicio en docker-compose.yml:

La primera indica a FrankenPHP c贸mo debe ejecutar la aplicaci贸n mientras que la segunda indica a la propia aplicaci贸n qu茅 runtime ejecutar.

Una vez realizados estos cambios tendremos que regenerar el contenedor para que aplique las nuevas variables de entorno y ahora s铆:

馃帀 Tenemos nuestra aplicaci贸n Symfony funcionando sobre FrankenPHP con worker mode! 馃

Conclusiones

Desde el equipo t茅cnico de acceseo creemos que es una tecnolog铆a que todav铆a no est谩 todo lo madura que necesitamos para que la DX sea la adecuada. Se puede utilizar y ofrece lo que promete pero no hay disponibles im谩genes oficiales con distintas versiones de PHP por ejemplo.

Es cierto que configurando el worker mode con un proyecto de demo con Symfony muy sencillo hemos pasado de respuestas de 250-350ms a 150-250ms por tanto s铆 podemos apreciar el impacto en el rendimiento que menciona su creador y sin duda la configuraci贸n para docker compose se simplifica mucho respecto a la combinaci贸n de httpd y php-from que nosotros utilizamos.

Nosotros vamos a seguir muy de cerca todas las novedades de este proyecto tan interesante y para los que quer谩is profundizar m谩s os dejamos algunos enlaces a continuaci贸n:

Comparte
驴Quieres m谩s informaci贸n?
Ponte en contacto con nosotros.
Christian C贸rdoba
Christian C贸rdoba
Chief Technology Officer (CTO) / Backend developer - Departamento de desarrollo

2 comentarios en 鈥C贸mo ejecutar tu aplicaci贸n Symfony con FrankenPHP 馃悩+馃

  1. FrankenPHP esta en fase alpha, y su velocidad es menor que con PHP-FPM.

    Benchmark:
    https://github.com/symfony/symfony-docs/issues/17428#issuecomment-1339243991

    Benchmark en modo Worker:
    https://github.com/symfony/symfony-docs/issues/17428#issuecomment-1340822231

    Ngx-php no es muy conocido, aunque es mucho m谩s veterano. Es PHP embedido en Nginx, y actualmente el SAPI m谩s r谩pido de PHP.
    https://github.com/rryqszq4/ngx-php

    Workerman es Node-js en PHP, y tambi茅n muy r谩pido y poco conocido.
    https://github.com/walkor/workerman

    Adapterman es un runtime que usa Workerman, y que funciona con casi cualquier framework. El php-runtime de symfony solamente funciona con el Http Kernel de Symfony.
    https://github.com/joanhey/AdapterMan

    Hay muchos buenos projectos, pero parece que solamente miramos los que tienen m谩s marketing, aunque sean inferiores.

    1. Hola Joan, gracias por el comentario! No conoc铆amos Ngx-php as铆 que le daremos un vistazo.

      Como dices muchas veces hay proyectos que no tienen la repercusi贸n que se merecen simplemente porque no llegan a tener tanta exposici贸n, y en el caso de FrankenPHP precisamente es un proyecto que va a tener mucha exposici贸n por los perfiles que hay involucrados as铆 que seguro que todos vamos a seguir viendo un mont贸n de publicaciones relacionadas.

      Saludos, Christian.

Enviar Comentario

Tu direcci贸n de correo electr贸nico no ser谩 publicada. Los campos obligatorios est谩n marcados con *

Este sitio usa Akismet para reducir el spam. Aprende c贸mo se procesan los datos de tus comentarios.

Art铆culos relacionados

Suscr铆bete a nuestra newsletter
para estar al d铆a en el mundo online
驴Tienes alguna incidencia?

Cu茅ntanos qu茅 ocurre
y nos pondremos con ello lo antes posible.

    Este sitio est谩 protegido por reCAPTCHA, y la Pol铆tica de privacidad y T茅rminos de servicio de Google.

    隆Cu茅ntanos tus ideas!
    +34 96 653 19 14
    info@acceseo.com

      Este sitio est谩 protegido por reCAPTCHA, y la Pol铆tica de privacidad y T茅rminos de servicio de Google.

      Te ayudamos a conseguir
      hasta 12.000 鈧 del bono Kit Digital
      Te ayudamos a conseguir
      hasta 12.000 鈧 del bono Kit Digital