Desplegando Laravel en Fly.io

Fly.io nos permite desplegar web apps en 21 regiones en todo el mundo. Reduciendo la latencia entre usuario y app.

Hacer un despliegue de cualquier app desarrollada en Laravel es bastante sencillo.

<iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/wZKx5mc9fCw" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

Instalación y registro en Fly.io

Instalamos la línea de comandos flyctl con Homebrew. brew install flyctl. Regístrate a fly.io si aún no lo estás. flyctl auth signup.

Configurar Laravel para Fly.io

Comenzamos con un proyecto Laravel nuevo. laravel new hola-fly-laravel. Lanzamos flyctl launch que nos configura la App para Fly. Le asignamos un nombre. Elegimos una organización. Una región para desplegarla. La primera opción será la región más cercana que nos ha detectado.

El programa nos preguntará por nuestra APP_KEY. Podemos generar una si aún no la tenemos. Lanzamos php artisan key:generate --show en una nueva ventana de nuestro terminal. Cuando pregunte si queremos realizar un despliegue, respondemos no.

Abrimos nuestro proyecto con nuestro editor. Vemos que se han generado los archivos fly.toml, Dockerfile y la carpeta docker. Para configurar la URL de nuestra app, modificamos el archivo de configuración fly.toml. Fly nos genera una URL con base en el nombre de nuestra App. hola-fly-laravel.fly.dev.

[env]
  LOG_LEVEL = "info"
  APP_URL = "hola-fly-laravel.fly.dev"

Desplegando

Finalmente desplegaremos nuestra App. fly deploy. Voilà. Nuestra App Laravel está desplegada. Podemos abrirla en nuestro navegador con fly open.

PHP 8.1

El archivo Dockerfile nos ha desplegado PHP 8.0. Pero sería bueno tener PHP 8.1

Modificamos Dockerfile y reemplazamos toda coincidencia de php8 a php81. También eliminaremos php8-pecl-mcrypt. Una extensión obsoleta en PHP 8.1. Y añadimos un enlace simbólico para ejecutar php81 como php. ln -s /usr/bin/php81 /usr/bin/php. Realizamos los siguientes ajustes a los siguientes archivos.

  • docker/app.conf: cambiar la referencia de /var/run/php/php8-fpm.sock a /var/run/php/php81-fpm.sock.
  • docker/php-fpm.conf: cambiar la referencia de include=/etc/php8/php-fpm.d/*.conf a include=/etc/php81/php-fpm.d/*.conf
  • docker/server.conf: cambiar la referencia de /var/run/php/php8-fpm.sock a /var/run/php/php81-fpm.sock
  • docler/supervisor.conf: cambiar la referencia de command=php-fpm8 -R --nodaemonize a command=php-fpm81 -R --nodaemonize

Volvemos a hacer el despliegue. fly deploy. Nuestra App ahora corre sobre PHP 8.1

Scheduler

También podemos ejecutar tareas programadas. Modificamos docker/supervisor.conf y descomentamos la sección [program:laravel-schedule].

Gracias a Fly.io, tenemos Laravel desplegado en una región cercana a nosotros. Corriendo la última versión de PHP y ejecutando tareas programadas.