¿Cómo implementar Node.js con Heroku? Parte 1

Si sigues al pie de la letra este sencillo tutorial de dos partes, vas a poder realizar una aplicación utilizando Node.js con Heroku, en cuestión de minutos.

En este tutorial estamos asumiendo que posees una cuenta gratuita de Heroku, y que igualmente, tienes Node.js con npm instalados.

El tutorial asume que tienes una cuenta gratuita de Heroku, y que tienes Node.js y npm instalados localmente.

Preparar la aplicación

En este paso, vas a prepararar una aplicación de muestra que estará lista para ser implementada en Heroku. Si estás algo confundido, o confundida, quizá debas revisar nuestros primeros artículos introductorios:  Control del riesgo de seguridad Node.js de las dependencias npm, o Node Hero – Node.js Autenticación utilizando Passport.js

Primeros pasos

En el primer paso, vas a instalar una interfaz de líneas de comandos de Heroku (CLI). Normalmente utilizamos CLI para administrar y escalar las aplicaciones, y también para ejecutar la aplicación localmente. Tienes que descargar, instalar, y ejecutar el instalador para tu Sistema Operativo de uso diario.

Ya instalado instalado, puedes utilizar el comando heroku desde el comando shell. En Windows, debes iniciar el símbolo del sistema (cmd.exe) o Powershell para acceder al shell de comandos. Inicia sesión con la dirección de correo electrónico y la contraseña que utilizaste para crear tu cuenta de Heroku:

heroku login Enter your Heroku credentials. Email: ejemplodecorreo@usuario.com Password: *****

Se requiere una autenticación para permitir que funcionen tanto los comandos de heroku como los comandos de git. Antes de que continúes, fíjate de que tienes los requisitos previos a esto instalados correctamente. Escribe cada comando a continuación y cerciórate de que muestre la versión que tienes instalado. (Ten en cuenta que tus versiones podrían ser diferentes a las del ejemplo). Si no te devuelve ninguna versión, sino regresa a la introducción de este tutorial e instala los requisitos previos. Se requiere la siguiente configuración local para completar las «dependencias de la aplicación» y los pasos posteriores. Recuerda que este tutorial funcionará para cualquier versión de Node superior a la 8; ahora verifica que tengas los requisitos instalados:

Prueba la versión de Node

node --version v8.11.1

Ten en cuenta que npm es instalado con Node.js, así que verifica que esté instalado. Si no lo tienes, instala una versión más reciente de Node:

npm --version 5.6.0

Ahora comprueba que has instalado git. Si no estáinstálalo y prueba de nuevo.

git --version git version 2.15.1

Preparando tu aplicación

Ya por este paso, empezarás a preparar una aplicación de muestra que está lista para poder implementarse en Heroku. Para poder realizar tu propia copia de la aplicación que estamos desarrollando, ejecuta los siguientes comandos en su terminal de comandos o terminal local:

git clone https://github.com/heroku/node-js-getting-started.git cd node-js-getting-started

Ahora posees un repositorio de Git en funcionamiento que contiene una aplicación simple así como  también un archivo package.json, que es usado por el administrador de dependencias de Node.

Implementando tu aplicación

En este paso desplegarás la aplicación a Heroku. Cree una aplicación en Heroku, que prepara a Heroku para recibir su código fuente.


$ heroku create Creating sharp-rain-871... done, stack is cedar-14 http://sharp-rain-871.herokuapp.com/ | https://git.heroku.com/sharp-rain-871.git Git remote heroku added

Cuando creas una aplicación, herokutambién se crea un git remoto (llamado ) y se asocia con tu repositorio local de git. Heroku genera un nombre aleatorio (en este caso sharp-rain-871) para su aplicación, o puede pasar un parámetro para especificar su propio nombre de aplicación. Ahora despliega tu código:

$ git push heroku master Counting objects: 488, done. Delta compression using up to 8 threads. Compressing objects: 100% (367/367), done. Writing objects: 100% (488/488), 231.85 KiB | 115.92 MiB/s, done. Total 488 (delta 86), reused 488 (delta 86) remote: Compressing source files... done. remote: Building source: remote: remote: -----> Node.js app detected remote: remote: -----> Creating runtime environment remote: remote: NPM_CONFIG_LOGLEVEL=error remote: NODE_VERBOSE=false remote: NODE_ENV=production remote: NODE_MODULES_CACHE=true remote: remote: -----> Installing binaries remote: engines.node (package.json): 8.11.1 remote: engines.npm (package.json): unspecified (use default) remote: remote: Resolving node version 8.11.1... remote: Downloading and installing node 8.11.1... remote: Using default npm version: 5.6.0 .... remote: -----> Build succeeded! remote: -----> Discovering process types remote: Procfile declares types -> web remote: remote: -----> Compressing... remote: Done: 19M remote: -----> Launching... remote: Released v3 remote: http://sharp-rain-871.herokuapp.com deployed to Heroku remote: remote: Verifying deploy... done. To https://git.heroku.com/nameless-savannah-4829.git * [new branch] master -> master

La aplicación ahora está desplegada. Asegúrese de que al menos una instancia de la aplicación se esté ejecutando:

$ heroku ps:scale web=1

Ahora visita la aplicación en la URL generada por su nombre de aplicación. Como un atajo práctico, puede abrir el sitio web de la siguiente manera:

$ heroku open

Viendo los registros

Heroku trata los registros como flujos de eventos ordenados por tiempo agregados de los flujos de salida de todas sus aplicaciones y componentes Heroku, proporcionando un solo canal para todos los eventos. Ver información sobre su aplicación en ejecución usando uno de los comandos de registro , heroku logs –tail:

heroku logs --tail 2011-03-10T10:22:30-08:00 heroku[web.1]: State changed from created to starting 2011-03-10T10:22:32-08:00 heroku[web.1]: Running process with command: `node index.js` 2011-03-10T10:22:33-08:00 heroku[web.1]: Listening on 18320 2011-03-10T10:22:34-08:00 heroku[web.1]: State changed from starting to up

Visite su aplicación en el navegador nuevamente, y verá otro mensaje de registro generado. Presione Control+Cpara detener la transmisión de los registros.

Definiendo un Procfile

Use un Procfile , un archivo de texto en el directorio raíz de su aplicación, para declarar explícitamente qué comando debe ejecutarse para iniciar su aplicación. La aplicación Procfile de ejemplo que implementó se ve así: web: node index.js Esto declara un solo tipo de proceso weby el comando necesario para ejecutarlo. El nombre webes importante aquí. Declara que este tipo de proceso se adjuntará a la pila de enrutamiento HTTP de Heroku y recibirá tráfico web cuando se implemente. Procfiles puede contener tipos de proceso adicionales. Por ejemplo, puede declarar uno para un proceso de trabajo en segundo plano que procesa elementos fuera de una cola.

Escalando la aplicación

En este momento, su aplicación se está ejecutando en una única banda de banco de pruebas . Piense en un dinamómetro como un contenedor ligero que ejecuta el comando especificado en el archivo Procfile. Puedes verificar cuántos dynos se están ejecutando usando el comando ps:


$ heroku ps === web (Free): `node index.js` web.1: up 2014/04/25 16:26:38 (~ 1s ago)

De forma predeterminada, su aplicación se implementa en un dinamómetro gratuito. Los dinosaurios gratis dormirán después de media hora de inactividad (si no reciben ningún tráfico). Esto provoca un retraso de unos pocos segundos para la primera solicitud al despertar. Las solicitudes posteriores se realizarán normalmente. Las dinámicas gratuitas también consumen de una cuota mensual a nivel de cuenta de horas de dinamización gratuitas , siempre que la cuota no se agote, todas las aplicaciones gratuitas pueden continuar ejecutándose. Para evitar que Dyno duerma, puede actualizar a un hobby o un tipo de dino profesional como se describe en el artículo Tipos de Dyno . Por ejemplo, si migra su aplicación a un dinamómetro profesional, puede escalarla fácilmente ejecutando un comando que le diga a Heroku que ejecute un número específico de dinamizadores, cada uno ejecutando su tipo de proceso web. La escala de una aplicación en Heroku es equivalente a cambiar el número de dynos que se están ejecutando. Escala el número de dynos web a cero:

$ heroku ps:scale web=0

Acceda a la aplicación nuevamente presionando actualizar en la pestaña web, o heroku openpara abrirla en una pestaña web. Recibirá un mensaje de error porque ya no tiene ningún diagnóstico web disponible para atender las solicitudes. Escala de nuevo:

$ heroku ps:scale web=1

Para la prevención del abuso, escalar una aplicación no gratuita a más de un dinamo requiere la verificación de la cuenta . Para continuar con la leccion continúa hacia nuestra próxima entrada ➡ ¿Cómo implementar Node.js con Heroku o Docker? Parte 2