Explorando alternativas a Heroku para implementar aplicaciones Node.js

Nota del editor : este artículo fue actualizado por Emmanuel John el 18 de abril de 2024 para reflejar la información más actualizada de cada servicio de implementación y agregar más alternativas que ofrecen niveles gratuitos para implementar aplicaciones Node.js.

Durante años, la versión gratuita de Heroku fue el estándar para que muchos desarrolladores publicaran prototipos, proyectos de afición y portafolios. Desafortunadamente, tras el retiro de Heroku de su versión gratuita en 2022 , los desarrolladores tuvieron que buscar alternativas para alojar sus proyectos de bootcamp y portafolios, y muchos siguen buscando alternativas adecuadas.

En este artículo, revisaremos varias alternativas a Heroku para implementar aplicaciones . Desarrollaremos una aplicación Node.js sencilla y sin framework, y la implementaremos en ocho servicios diferentes que ofrecen niveles gratuitos. También exploraremos algunas alternativas a Heroku para la implementación estática y las funciones sin servidor.

¡Comencemos!

Usando Mountaineer para desarrollar una aplicación React con Python
Table
  1. Construyendo nuestra aplicación de prueba Node.js
    1. Implementación para renderizar
    2. Despliegue en el ferrocarril
    3. Implementación mediante Fly.io
    4. Desplegando en Koyeb
    5. Implementación en Back4App
    6. Implementación en cíclico
    7. Implementación en Porter
    8. Implementación en Adaptable
  2. Alternativas a Heroku para la implementación estática
    1. Despliegue estático en Render
    2. Implementación de un sitio estático en Netlify
    3. Implementación de un sitio estático en Vercel
    4. Implementación de un sitio estático en la plataforma de aplicaciones de Digital Ocean
    5. Implementación de sitios estáticos en GitHub Pages
  3. Funciones sin servidor
    1. Uso de funciones sin servidor en Netlify
    2. Uso de funciones sin servidor en Vercel
  4. Opciones de pago
  5. Conclusión
  6. Solo el monitor 200s falló y las solicitudes de red fueron lentas en producción

Construyendo nuestra aplicación de prueba Node.js

Construiremos un servidor Node.js básico, pero se aplicarán los mismos principios si utilizas cualquier framework Node.js popular , como Express, Koa, Fastify, NestJS, FoalTS u otros. Deberías tener Node.js instalado en tu equipo.

Abre tu editor en una carpeta vacía. Crea un nuevo proyecto de Node.js desde tu terminal usando el comando.npm init -y

Crea un archivo llamado . En , configuremos nuestro script de inicio con el siguiente comando:index.jstouch index.jspackage.json

  "scripts" : { "inicio" : "node index.js" },        

Dentro , ejecute el siguiente código para configurar un servidor Node.js básico “¡Hola, mundo!”:index.js

Cómo analizar los paquetes de aplicaciones de Next.js
// Importar la biblioteca http const http = require ( "http" ) // usar la variable env para definir el puerto tcp/ip con un valor predeterminado const PORT = process.env.PORT || 8080 // crear nuestro servidor de objetos const server = http.createServer () // Definimos una función que se ejecuta en respuesta a un evento de solicitud server.on ( " request"  , ( solicitud , respuesta ) = { // manejar la solicitud según el método y luego la URL Response.statusCode   = 200  Response.write   ( " Hello World "  ) Response.end ( )   } ) // hacer que el servidor comience a escuchar server.listen ( PORT , err =  { // comprobacion de errores err   ? console .error ( err ) : console .log ( ` escuchando en el puerto $ { PORT }`  ) } )           

Probémoslo localmente ejecutando node starty luego yendo a . Si ves “¡Hola, mundo!”, significa que funciona y puedes empezar a implementarlo.localhost:8080

Desde tu terminal, crea un repositorio Git llamado git init. Agrega todos tus archivos a la configuración de prueba con el comando y luego confirma con el siguiente comando:git add .

git commit - m "Primera confirmación"

A continuación, ve a GitHub, crea un nuevo repositorio y obtén la URL. Agrega tu repositorio de GitHub como remoto a tu repositorio local y asegúrate de usar la URL:

git remoto agregar origen https://github.com/username/reponame

Luego, envía tu código al control remoto:

Cómo integrar WunderGraph con su aplicación frontend
git push origen principal

Puedes confirmar si tu rama es la rama principal o maestra con el comando git branch.

Ahora que tenemos nuestro código de ejemplo en GitHub, podemos empezar a implementarlo. Como referencia, puedes consultar mi repositorio de este tutorial .

Implementación para renderizar

La versión gratuita de Render facilita las implementaciones estáticas para aplicaciones React, Vue y Angular, así como las implementaciones de servicios web para aplicaciones Node.js. Solo tienes que seguir estos pasos:

  • Inicie sesión en Render.com con su cuenta de GitHub
  • Haga clic en Nuevo Servicio web
  • Conecta el repositorio de GitHub que acabas de crear
  • En la siguiente pantalla, asigne un nombre a su proyecto, acepte todos los valores predeterminados y el nivel gratuito, y luego impleméntelo.

En la siguiente pantalla, esperamos a que se complete la implementación, lo cual puede tardar un poco. En la esquina superior izquierda, encontrará la URL para confirmar su finalización:

Desarrollo de aplicaciones multiplataforma con Bun v1.1

Una vez hecho esto, haz clic en la URL generada y verás nuestro mensaje “¡Hola a todos!”. Fue muy fácil, ¿verdad?

Render ofrece otros servicios que pueden resultarle útiles mientras crea su aplicación, como bases de datos y trabajos cron, que son scripts que se ejecutan según un cronograma establecido.

Despliegue en el ferrocarril

Al igual que Render, Railway es un servicio que permite implementar la aplicación y aprovisionar varios tipos de bases de datos, como Postgres, MySQL y MongoDB. Los pasos para implementar la aplicación Node.js en Railway son muy similares a los de Render:

  • Inicia sesión con tu cuenta de GitHub
  • Crea un nuevo proyecto y selecciona implementar desde GitHub
  • Seleccione su repositorio y luego seleccione implementar ahora

Debería completarse bastante rápido y verás la siguiente pantalla:

Por defecto, no tendrá un nombre de dominio de acceso público. Para generar uno, ve a la pestaña Configuración y haz clic en “Generar dominio” . Esto creará una URL que podrás usar para compartir tu proyecto. ¡Listo!

Implementación mediante Fly.io

Fly.io se centra principalmente en la implementación de contenedores Docker y, en los últimos años, ha simplificado considerablemente el proceso. Primero, regístrate con tu cuenta de GitHub. Adoptaremos un enfoque diferente al implementar con Fly.io:

  • Instale la herramienta de línea de comandos de Fly.io, FlyCtl
  • Inicie sesión con el comando flyctl auth login. Se le solicitará información de pago, pero no se le cobrará mientras permanezca en el plan gratuito.
  • Desde la terminal, implemente la aplicación conflyctl launch
  • Responda las indicaciones y acepte los valores predeterminados, luego espere a que finalice la implementación.

Puede que tarde un poco, pero una vez implementada, verás la aplicación en tu panel de Fly.io, así como la URL donde se encuentra.

Si necesita actualizar su aplicación en el futuro, simplemente ejecute el flyctl deploycomando desde el directorio donde se encuentra. Al ejecutarlo flyctl launch, se creó un archivo con todas las configuraciones de implementación para acelerar las actualizaciones, de modo que sepa qué implementación actualizar.fly.toml

Si no funciona, verifique que el puerto expuesto sea el mismo que está expuesto en su línea cuatro como puerto predeterminado.fly.tomlindex.js

Desplegando en Koyeb

Similar a Render, Koyeb es un servicio que crea, implementa, ejecuta y escala su aplicación sin necesidad de configuración y aprovisiona varios tipos de bases de datos, como Postgres, MySQL y MongoDB:

Los pasos para implementar nuestra aplicación Node.js en Koyeb serán muy similares a los de Render:

  • Crea una cuenta Koyeb si no tienes una
  • Inicia sesión con tu cuenta de GitHub
  • Haga clic en el botón Implementar en su panel de Koyeb
  • Elija Github como su método de implementación
  • Conecta el repositorio de GitHub que acabas de crear y luego haz clic en el botón Implementar

Se generará un registro de compilación y verá la siguiente pantalla:

Tras una compilación exitosa, Koyeb generará una URL de implementación para acceder a su aplicación NodeJs.



Implementación en Back4App

Back4App es una plataforma en la nube para crear, implementar y escalar aplicaciones:

Aumenta la productividad de los desarrolladores con su función Backend como servicio , elimina DevOps y no requiere una tarjeta de crédito para comenzar:

Los pasos para implementar nuestra aplicación Node.js en Back4App serán bastante diferentes en comparación con Render:

  • Crea una cuenta Back4App si no tienes una
  • Crear una nueva aplicación
  • Navega hasta para obtener las credenciales de tu aplicaciónApp settings Security and Keys
  • Agregue el APP_IDy JAVASCRIPT_KEYa su aplicación frontend
  • Implementa tu lógica CRUD
  • Acceda a su API de backend

Back4App implementa su backend de API de manera predeterminada sobre la marcha cuando se crea la aplicación backend en el panel:

Puede consultar la documentación oficial para obtener una guía detallada sobre cómo comenzar a utilizar Back4App.

Implementación en cíclico

Cyclic es una plataforma en la nube que se enfoca principalmente en implementar aplicaciones completamente en una infraestructura de nube sin servidor, e incluso con su nivel gratuito, puede acceder a funciones de base de datos y almacenamiento, y sus aplicaciones están listas a pedido, de inmediato y en todo momento, sin suspensión ni reciclaje.

Los pasos para implementar nuestra aplicación Node.js en Cyclic serán muy similares a los de Render:

  • Inicia sesión con tu cuenta de GitHub
  • Haga clic en Nueva aplicación para crear un nuevo proyecto.
  • Haga clic en la pestaña Vincular el suyo para implementar desde GitHub
  • Seleccione su repositorio y luego haga clic en el botón Conectar

Debería completarse bastante rápido y verás la siguiente pantalla:

También puede cambiar su subdominio dirigiéndose a la pestaña de entornos para crear un subdominio personalizado.

Implementación en Porter

Porter es una plataforma como servicio (PaaS) que crea, implementa, ejecuta y escala su aplicación con solo unos clics en el proveedor de nube de su elección, AWS, GCP o Azure. Ofrece un nivel gratuito y $5 en créditos gratis al registrarse:

Estos son los pasos para implementar nuestra aplicación Node.js en Porter:

  • Inicia sesión con tu cuenta de GitHub
  • Haga clic enCrear nuevas aplicaciones
  • Seleccione un repositorio de GitHub y una rama fuente
  • Seleccionar una ruta raíz
  • Especificar un método de compilación (paso opcional)
  • Agregar variables de entorno(paso opcional)
  • Agregar un trabajo previo a la implementación(paso opcional)
  • Configurar una canalización de CI/CD a través de Github Actions
  • Haga clic en el botón Implementar aplicación

Verá la siguiente pantalla una vez que la implementación sea exitosa:

Implementación en Adaptable

Adaptable es una plataforma como servicio (PaaS) que proporciona todos los beneficios de un sistema de implementación continua avanzado sin tener que lidiar con Kubernetes y Docker, lo que hace que la implementación sea muy fácil:

Adaptable supervisa tu rama de GitHub conectada y actualiza automáticamente tu implementación al realizar envíos. Admite escalado automático, sin servidor, bases de datos escalables, balanceo de carga, HTTPS totalmente administrado y mucho más.

Estos son los pasos para implementar nuestra aplicación Node.js en Adaptable:

  • Inicie sesión con su cuenta de GitHub o GitLab
  • Haga clic enConectar repositorio de GitHub
  • Haga clic enImplementar su propio repositorio
  • Haga clic en el botóninstalar
  • Selecciona un repositorio de GitHubyuna rama de origen . Adaptable desplegará tu repositorio cada vez que subas contenido a esta rama.
  • Elija una plantilla de implementación (es decir, una plantilla de aplicación Node.js)
  • Revise la configuración de la aplicación y modifíquela cuando sea necesario
  • Elige un nombre para tu aplicación Node.js en Adaptable
  • Haga clic enImplementar aplicación para iniciar el proceso de implementación.
  • Una vez completada la implementación, su aplicación se ejecutará enhttps://your-app-name.adaptable.app

Verá la siguiente pantalla una vez que la implementación sea exitosa:

Alternativas a Heroku para la implementación estática

No todas las aplicaciones requieren la implementación de un servidor. Por ejemplo, las aplicaciones frontend de React, Vue, SolidJS, Svelte y Angular pueden implementarse como aplicaciones estáticas.

Hay varias opciones para implementar estas aplicaciones estáticas de forma gratuita que solo requieren que conecte su repositorio de GitHub con su proyecto, incluidos Render, Railway, Fly.io, Netlify, GitHub Pages, Vercel, App by Digital Ocean, Surge.sh, Firebase y Azure Static Apps.

En lugar de ejecutar código de servidor de forma persistente en los servidores de los proveedores, solo se entregan los archivos HTML, CSS y JavaScript estáticos de tu proyecto. Por lo tanto, hay menos opciones gratuitas. Exploremos ahora algunas de las mejores alternativas a Heroku para la implementación estática.

Despliegue estático en Render

Para implementar un sitio estático en Render, vaya a su panel de control y agregue un nuevo sitio estático:

Desde aquí, solo tienes que conectar el repositorio con tu sitio web estático, especificar cualquier comando de compilación como npm run buildpara React y luego hacer clic en Implementar.

Implementación de un sitio estático en Netlify

Inicie sesión en Netlify y haga clic en Agregar nuevo sitio desde el panel de control:

Luego, seleccione un repositorio de GitHub:

Establezca su comando de compilación y directorio de publicación, que variarán según el marco de interfaz que utilice:

Por último, haz clic en Implementar sitio ¡y listo!

Implementación de un sitio estático en Vercel

Inicie sesión en Vercel . Desde el panel de control, haga clic en ” Agregar nuevo” y seleccione “Proyecto”.

Seleccione un repositorio de GitHub para implementar:

Configure su comando de compilación y el directorio de salida, luego haga clic enDesplegar:

Implementación de un sitio estático en la plataforma de aplicaciones de Digital Ocean

Dirígete a laAplicacionessección del panel de Digital Ocean, luego haga clic enCreary seleccioneAplicaciones:

Seleccione un repositorio de GitHub con su aplicación y pásele las configuraciones necesarias, como el directorio de origen:

En la siguiente página, configuraremos nuestra aplicación para que se implemente como un sitio estático:

Para implementar un servicio backend como Heroku, también puedes seleccionarServicio webPero esto no es gratuito en Digital Ocean. Después de convertirlo en un sitio estático, asegúrese de revisar el comando de compilación y el directorio de salida:

Hacer clic enRevisary luegoCrear recurso¡Y tu aplicación se implementará!

Implementación de sitios estáticos en GitHub Pages

En cualquier repositorio de GitHub que contenga un sitio estático, simplemente vaya alAjustessección y haga clic enPáginas:

A continuación, seleccione una rama para implementar y seleccioneAhorrar:

¡En unos minutos el sitio debería estar activo!

Funciones sin servidor

Las funciones sin servidor son otra opción para gestionar las interacciones de la base de datos backend y la entrega de API, que es para lo que normalmente implementaríamos aplicaciones de servidor.

En lugar de crear un servidor que funcione 24/7, puede crear funciones con la lógica deseada que se ejecuten bajo demanda en los servidores del proveedor. Todas las principales nubes, como AWS, Azure y Google, ofrecen funciones sin servidor como servicio, pero existen otros servicios que facilitan enormemente su uso.

Por lo general, estos servicios requieren que conectes un repositorio de GitHub con un archivo para cada función que quieras implementar, al que luego se le asigna una URL que puedes llamar desde tu aplicación frontend.

Uso de funciones sin servidor en Netlify

Para añadir funcionalidad de backend a tus aplicaciones estáticas implementadas en Netlify, simplemente crea una /netlify/functionscarpeta en tu repositorio. Puedes agregar todos los archivos JavaScript que quieras en esta carpeta.

Por ejemplo, imaginemos que creé un /netlify/functions/cheese.jsarchivo como el siguiente:

exportaciones . handler = async function ( evento , contexto ) { return { statusCode : 200 , cuerpo : JSON . stringify ({ cheese : "Gouda" }), }; } ;                      

Al implementar el código anterior en Netlify, se creará una ruta a la que se pueden realizar solicitudes en [nombre del proyecto] /.netlify/functions/cheese. Se puede usar cualquiera de las bibliotecas cargadas en [nombre del proyecto] package.json, por lo que la conexión a bases de datos y otras actividades típicas del backend son válidas.

Uso de funciones sin servidor en Vercel

Para utilizar funciones sin servidor con aplicaciones estáticas implementadas en Vercel, puedes usar funciones de Vercel, que tienen una sensación similar a ExpressJS cuando usas JavaScript.

Simplemente crea tus archivos JavaScript o TypeScript en una carpeta llamada /apidentro de tu proyecto. Por ejemplo, supongamos que creo un archivo llamado /api/cheese.jsque hace lo siguiente:

exportar controlador de función predeterminado ( req , res ) {   res.json ( { cheesy : "gouda" }) ; }     

Cuando implemento mi aplicación en Vercel, puedo realizar cualquier solicitud de API para /api/cheeseobtener la respuesta de esta función.

Opciones de pago

El objetivo principal de Heroku era implementar aplicaciones dinámicas de servidor. Además de las opciones gratuitas de Render, Railway y Fly.io, existen otras opciones de pago que funcionan de forma similar, conectando tu repositorio de GitHub y publicando tu aplicación:

  • Plataforma de aplicaciones de Digital Ocean: desde $5 al mes
  • AWS Amplify: el precio depende del costo de los recursos de AWS necesarios para ejecutar la aplicación

Conclusión

Sí, es un poco disruptivo haber perdido la versión gratuita de Heroku, pero la consiguiente fragmentación en diversos servicios como Render, Railway y Fly.io hará que la industria sea más resiliente. Al no depender los desarrolladores de un solo proveedor, la competencia por la cuota de mercado acelerará el impulso hacia la innovación.

Para resumir las alternativas a Heroku que cubrimos en este artículo:

Proveedor Implementación estática gratuita Implementación gratuita de servidores Funciones gratuitas sin servidor Punto de entrada de pago
Fly.io Precios medidos
Prestar Proyectos iniciales $7/mes
Ferrocarril Precios medidos
Heroku $5/mes
Netlify $19/mes
Páginas de GitHub Ninguno
Vercel $20/mes
Aplicación de Digital Ocean $5/mes habilitando servidor/estático
Firebase Precios medidos
Surge.sh $30/mes
Koyeb $79/mes
Back4app $15/mes
Cíclico $3/mes
Portero $10/mes
Adaptable $3/mes

Espero que hayas disfrutado de este artículo. Si tienes alguna pregunta, no olvides dejar un comentario y decirme qué servicio prefieres como alternativa a Heroku. ¡Que disfrutes programando!

Solo el monitor 200s falló y las solicitudes de red fueron lentas en producción

Implementar una aplicación web o un sitio web basado en Node es la parte fácil. Asegurarse de que la instancia de Node siga proporcionando recursos a la aplicación es la parte más difícil. Si le interesa garantizar que las solicitudes al backend o a servicios de terceros se ejecuten correctamente, pruebe LogRocket.

Si quieres conocer otros artículos parecidos a Explorando alternativas a Heroku para implementar aplicaciones Node.js puedes visitar la categoría Aplicaciones.

Entradas Relacionadas