Blog sobre desarrollo de software, SaaS, Startups y lo que pueda surgir. Experiencias vividas y por vivir. Lo escrito aquí es culpa de Ángel Romero
Bun trae cosas realmente interesantes respecto a Node, y Heroku es una plataforma muy conocida (aunque en cierto declive) que permite a los desarrolladores construir, entregar, supervisar y escalar aplicaciones rápidamente. Veamos como encajar las piezas
Aún no sabemos si bun ha venido para quedarse, pero si es claro que su irrupción (junto con la de Deno) ha revuelto las cosas en la comunidad de Node.js y la actividad en proyectos que en su día era la justa ha tornado en un sinfín de mejoras en cuanto a la experiencia de desarrollo y numerosas optimizaciones de rendimiento.
Es por ello que muchos desarrolladores de Node hemos trasteado un poco la nueva herramienta y en ocasiones deseamos desplegar nuestros proyectos en la nube. Y es aquí donde entra en escena Heroku, un viejo conocido.
Hace no mucho Heroku era 'cool', una herramienta que nos hacía ágiles y nos aportaba una experiencia de desarrollo realmente buena para la época. El downside de todo esto es que era cara, precio que tiempo atrás se pagaba con gusto (como todo buen hype). El tiempo ha pasado, Salesforce compró Heroku, el plan free fué eliminado de su plataforma y afloraron numerosas soluciones alternativas realmente interesantes (Digital Ocean, Fly.io, Scalingo, Coolify, ...). Ya no es trendy. Sin embargo, sigue siendo una solución perfectamente válida que puede sacarte de un apuro y es por ello que traigo este artículo para comentar como podemos desplegar nuestras aplicaciones de Bun en una plataforma ya conocida por muchos de nosotros: Heroku.
Este no es un tutorial de Bun de modo que vamos a ir al grano haciendo un servidor que nos de el clásico "Hola desde Heroku usando Bun". Para ello, lo primero que
tienes que hacer es instalar la ultima version de Bun de tu equipo (para el momento de la redacción de este artículo, 1.1.27
) siguiendo las instrucciones de
su web.
Hecho esto, vamos a crear una carpeta para el proyecto e inicializaremos un proyecto de bun en ella:
$ mkdir bun-heroku
$ cd bun-heroku
$ bun init
Eso creará un proyecto con un archivo index.ts
como punto de entrada con un log de "Hola mundo". Vamos a transformar esto es un pequeño servidor reemplazando
el código de ese archivo index.ts
por este:
import { serve } from "bun";
const port = process.env.PORT || 3000;
serve({
port,
fetch(request) {
return new Response("Hola desde Heroku usando Bun", {
headers: { "Content-Type": "text/plain" },
});
},
});
console.log(`Servidor corriendo en el puerto ${ port }`);
Este código es bastante sencillo, simplemente estamos creando un servidor que responde con un "Hola desde Heroku
usando Bun" a cualquier petición que reciba. El puerto por defecto es el 3000
pero si existe una variable de entorno
PORT
la usará en su lugar. Esto es muy importante porque Heroku pasará esta variable de entorno
y esperará un servidor funcionando en ese puerto y no en otro.
Podemos probar nuestra aplicación ejecutando un simple comando en el directorio de la aplicación y visitando en el navegador
localhost:3000
:
bun index.ts
Con esto nuestra aplicación de ejemplo queda lista y solo tenemos que desplegarla en Heroku.
Realmente no tiene mucho misterio, debes crear una aplicación nueva en Heroku y elegir el buildpack de Heroku para Bun en Settings -> Buildpacks -> Add buildpack del panel de tu aplicación en Heroku. Ahi debes añadir el siguiente buildpack:
https://github.com/jakeg/heroku-buildpack-bun
Hecho esto, solo queda elegir el repositorio donde tienes tu aplicación para desplegarla automáticamente en cada nuevo commit en la rama principal.
Por último, vas a necesitar añadir a tu proyecto un archivo llamado Procfile
a la raíz de tu aplicación. Esto no es una sorpresa,
todas las aplicaciones que funcionan en Heroku lo necesitan. En el, vamos a agregar esto:
web: bun --prod index.ts
Este archivo le dice a Heroku como arrancar nuestra aplicación. En este caso, le estamos diciendo que ejecute bun
en modo producción
y que le pase como argumento el archivo index.ts
que es el punto de entrada de nuestra aplicación. Si nuestro archivo se encuentra
en otro directorio o tiene otro nombre, tendremos que modificar este archivo y especificar la ruta del punto de entrada de nuestra aplicación. Volvemos a desplegar.
Y esto es todo, con esto tendremos nuestra aplicación de Bun funcionando en Heroku. Como curiosidad, este blog usa esta misma estrategia y me pareció interesante aportarlo como primer entrada. Hablaremos más adelante de Heroku, Bun, del desarrollo frontend y de por qué esta elección.