Usted está aquí:Inicio/MG Developers/Artículos/IBM Bluemix - Introducción y Hola mundo! con Node.js y Cloud Foundry CLI

Publicaciones recientes

Por Qué Elegirnos

  • Más de 400 proyectos puestos en producción durante los últimos 15 años demuestran el compromiso con nuestros clientes, certifican nuestra metodología y reflejan la capacidad de nuestro equipo de profesionales.

  • En MicroGestion existe un compromiso genuino con la calidad, la formación continua de nuestros profesionales y la mejora continua de nuestros procesos son la evidencia de dicho compromiso.

  • Creemos que los siguientes rasgos son esenciales para el ejercicio de nuestra actividad:

    » Entusiasmo, como requisito para llevar a cabo un proceso creativo.
    » Proactividad, como engranaje de la dinámica de grupos.
    » Responsabilidad, como condición fundamental para asumir compromisos en cada nivel de la empresa.
    » Trabajo en grupo, como mecánica de trabajo elegida para lograr sinergia.

    Asimismo nuestra capacidad de ejecución se fundamenta en el respeto de los siguiente valores:

    » Flexibilidad, necesaria para buscar el mejor camino en cada proyecto.
    » Compromiso, para formar equipos con conocimiento de dominio y orientación al logro.
    » Solvencia, que nos permite diseñar la mejora alternativa tecnológicas para cada solución.

  • En MicroGestion las personas son el factor más importante para el éxito de los proyectos; la conformación y gestión del capital humano se lleva a cabo teniendo en cuenta los siguientes lineamientos:

    » Determinando el conjunto correcto de personas para cada proyecto.
    » Desarrollando un ambiente donde existan oportunidades de aprendizaje.
    » Propiciando la confianza y el respeto dentro del equipo.
    » Permitiendo el desacuerdo y previendo una manera de resolverlo.
    » Preguntando, no inquiriendo.
    » Reconociendo los logros.

13 Jul

IBM Bluemix - Introducción y Hola mundo! con Node.js y Cloud Foundry CLI

En esta publicación describiremos los pasos para realizar el despliegue de una aplicación Node.js en IBM Bluemix utilizado Cloud Foundry CLI, para quienes no estén familiarizados con IBM Bluemix haremos una breve introducción a los conceptos mas relevantes de su servicio Paas.

IBM Bluemix

IBM Bluemix es una plataforma en la nube basada en estándares abiertos para la construcción, ejecución y gestión de aplicaciones. Con IBM Bluemix los desarrolladores pueden despreocuparse de la infraestructura y enfocarse en la construcción de aplicaciones utilizando opciones flexibles de despliegue, herramientas centradas en DevOps, y un potente conjunto de APIs y servicios de IBM y de terceros.

IBM Bluemix ofrece tres opciones de cómputo para el despliegue de aplicaciones:

  1. Cloud Foundry
  2. IBM Containers (Docker)
  3. Virtual Machines (Open Stack)
IBM Bluemix

Cloud Foundry

Cloud Foundry

Estamos transitando la era de "la nube", en esta nueva era las plataformas para la ejecución de aplicaciones comienzan a ser entregadas como servicio, concepto que se conoce con el término plataforma como servicio o PaaS (del inglés Platform as a Service).

PaaS hace que sea mucho más fácil implementar, ejecutar y escalar las aplicaciones. Mientras algunas ofertas de PaaS se limitan a determinados lenguajes, marcos de trabajo, o restringiendo el despliegue a una sola nube, Cloud Foundry es el estándar abierto para PaaS que permite elegir entre múltiples proveedores de nube, marcos de trabajo y servicios para la construcción de aplicaciones.

Al ser un proyecto de código abierto, hay una gran comunidad contribuyendo y apoyando Cloud Foundry, entre ellas IBM. IBM Bluemix extiende Cloud Foundry con múltiples tiempos de ejecución (runtimes) y servicios administrados que junto a potentes herramientas empresariales de gestión y desarrollo (DevOps) permiten a los desarrolladores componer rápidamente sus aplicaciones sin preocuparse por la infraestructura subyacente.

El valor que ofrece IBM Bluemix frente a otros proveedores de PaaS es el tipo de servicios que ofrece camo parte de su catálogo, en el mismo podremos encontrar desde un motor de reglas hasta servicios de comprensión del lenguaje basados en tecnología IBM Watson.

En este artículo utilizaremos un tiempo de ejecución Node.js basado en Cloud Foundry para tener un primer contacto con el servicio PaaS de IBM Bluemix.

IBM Containers (Docker)

IBM Containers (Docker)

Una máquina virtual (VM) es una implementación a nivel de software de un entorno físico de hardware. Las máquinas virtuales se utilizan para ejecutar aplicaciones y sistemas operativos completos "dentro" de un hardware virtualizado que es proporcionado por un hipervisor. El hipervisor es el software que separa la máquina virtual del equipo físico y es responsable de asignar los recursos según sea necesario.

Cada contenedor es una plataforma de aplicaciones segura cuya ejecución se realiza de manera aislada como un proceso independiente en el sistema operativo del equipo que ejecuta el contenedor. Las aplicaciones incluidas en contenedores pueden ejecutarse en cualquier lugar: estaciones de trabajo de desarrollo corriendo Windows, servidores que ejecutan Ubuntu, o en las VMs de un centro de datos productivo corriendo Red Hat.

Docker es una tecnología de código abierto para la virtualización de contenedores combinada con un flujo de trabajo que facilita la contenerización de aplicaciones. Los contenedores de IBM (IBM Containers) permiten ejecutar contenedores Docker alojados en la nube de IBM Bluemix facilitando de esta forma la tarea de escalar las aplicaciones en respuesta a un cambio en la demanda.

Virtual Machines (Open Stack)

Virtual Machines (Open Stack)

Los contenedores (containers) son objetos virtuales de software que incluyen todos los elementos que una aplicación necesita para funcionar. Un contenedor se crea a partir de una imagen la cual alberga y soporta una determinada aplicación. Cada imagen incluye sólo la aplicación que soporta y sus dependencias.

OpenStack es un sistema operativo para la nube que controla grandes agrupaciones de recursos de computación, almacenamiento y redes dentro de un centro de datos, todo ello gestionado a través de un tablero que permiten a los administradores tener el control de toda la infraestructura mientras que delega la provisión de los recursos a los usuarios a través de una interface web.

IBM Bluemix proporciona la infraestructura de máquinas virtuales de IBM como una característica que aun se encuentra en su fase de pruebas (beta). Se puede utilizar esta infraestructura para crear máquinas virtuales que se ejecutan en nubes basadas en OpenStack, dentro o fuera de IBM Bluemix.

Obtener una cuenta de IBM Bluemix

Para comenzar a probar las capacidades PaaS de IBM Bluemix será necesario contar con una cuenta, la misma se puede crear accediendo a la página de IBM Bluemix y presionar REGISTRARSE.

Crear una cuenta de IBM Bluemix
Pantalla 1 - Crear una cuenta de IBM Bluemix

Si contamos con un IBM ID podremos utilizarlo para simplificar el proceso de registración, luego de completar los datos requeridos y completar el proceso tendremos que esperar el correo de aprobación de la cuenta para comenzar a utilizar IBM Bluemix.

Con la creación de la cuenta accedemos a un mes sin cargo para probar los servicios de IBM Bluemix dentro de ciertos límites de recursos y procesamiento, luego del mes podremos utilizar 500 MB de memoria mensuales sin cargo para aplicaciones y contenedores, ademas de poder utilizar varios servicios con planes gratuitos.

Panel de control y conceptos de Cloud Foundry

Una vez que la cuenta de usuario fue aprobada poderemos iniciar sesión en IBM Bluemix y acceder a la consola.

Consola de IBM Bluemix
Pantalla 2 - Consola de IBM Bluemix

Para comprender algunos de los aspectos de IBM Bluemix conviene repasar algunos conceptos de Cloud Foundry:

  1. Organización (ORG). Una organización es una cuenta de desarrollo que un individuo o múltiples colaboradores pueden poseer y utilizar. Todos los colaboradores acceder a una organización con sus cuentas de usuario. Los colaboradores dentro de una organización compartes recursos y la cuota asociada al plan de los mismos.
  2. Cuentas de usuario. Una cuenta de usuario representa una persona individual en el contexto de una instalación de Cloud Foundry. Un usuario puede tener diferentes roles en diferentes espacios dentro de una organización, gobernando el nivel y el tipo de acceso que tienen dentro de los espacio.
  3. Espacios. Toda aplicación y servicio tiene como alcance un espacio. Cada organización contiene al menos un espacio. Un espacio proporciona un conjunto de accesos de usuario a una ubicación compartida para el desarrollo, implementación y mantenimiento de aplicaciones. Los roles dentro de un espacio sólo aplican a ese espacio particular.
  4. Roles y Permisos. Un usuario puede tener uno o más roles. La combinación de estos roles define la totalidad de los permisos que un usuario tiene en la organización y dentro de los espacios específicos dentro de la misma.

Crear un nuevo espacio para realizar pruebas

Crearemos un espacio dentro de la organización que nos asignó IBM Bluemix destinado a pruebas de concepto de Node.js, para ello presionaremos la acción + Crear un espacio, especificaremos node.js poc como nombre del espacio y luego presionaremos CREAR.

Crear un nuevo espacio dentro de IBM Bluemix
Pantalla 3 - Crear un nuevo espacio dentro de IBM Bluemix

Finalizado el proceso de creación podremos visualizar el nuevo espacio en la consola de IBM Bluemix.

Visualización del nuevo espacio dentro de la consola
Pantalla 4 - Visualización del nuevo espacio dentro de la consola

Crear una aplicación Node.js

Es el momento de crear una aplicación para desplegarla en IBM Bluemix, no es el objetivo del artículo profundizar en el desarrollo de aplicaciones basadas en Node.js, por lo cual construiremos una aplicación muy simple que nos permita verificar el mecanismo de despliegue utilizando Cloud Foundry CLI.

Descargar e instalar IBM SDK for Node.js

Para el desarrollo y las pruebas de nuestra aplicación utilizaremos el IBM SDK for Node.js, podríamos utilizar el SDK estándar, sin embargo nos inclinamos por utilizar el SDK de IBM ya que permite monitorear las aplicaciones utilizando el software de monitoreo IBM Monitoring and Diagnostic Tools - Health Center.

Dentro de la página del IBM SDK for Node.js es posible descargar el software para varias plataformas, incluido Mainframe!!, en nuestro caso seleccionamos Windows como plataforma.

Acceso a página de descarga de IBM SDK for Node.js
Pantalla 5 - Acceso a página de descarga de IBM SDK for Node.js

Una vez que accedemos a la página de descarga tendremos que elegir la arquitectura de procesador, en nuestro caso descargamos la versión de 64 bits, una vez descargado, ejecutaremos el asistente que nos permitirá instalar el SDK en nuestro equipo local.

Inicio del asistente de instalación de IBM SDK for Node.js
Pantalla 6 - Inicio del asistente de instalación de IBM SDK for Node.js

Aplicación Hola mundo! en Node.js

El siguiente snipet contiene el código de nuestra aplicación Node.js, es muy simple, pero nos servirá para evaluar el mecanismo de despliegue de aplicaciones en IBM Bluemix utilizando Cloud Foundry CLI.

var http = require('http');
var port = 8080;
var host = 'localhost';

var server = http.createServer(handleRequest).listen(port, host);

console.log('Escuchando en el host: ' + host);
console.log('Escuchando en el puerto: ' + port);

function handleRequest(request, response) {
	//HTML - MAIN
	var pageMainTemplate = '<html>' +
	'<head>' +
	'<meta http-equiv="Content-Type" ' +
	'content="text/html; charset=UTF-8" />' +
	'</head>' +
	'<body>' +
	'<h1>MG Developers - Node.js - Hola mundo!</h2>' +
	'</div>' +
	'</body>' +
	'</html>';
		
	response.writeHead(200, {'Content-Type': 'text/html'});
	response.write(pageMainTemplate);
	response.end();
}

A continuación se muestra el comando ejecutado para probar la aplicación y el resultado obtenido al accederla desde un navegador de Internet.

C:\_workspaces\node.js\poc.001>node server.js
Escuchando en el host: localhost
Escuchando en el puerto: 8080
Acceso a la aplicación Node.js de prueba
Pantalla 7 - Acceso a la aplicación Node.js de prueba

Cambios a la aplicación para ser desplegada en IBM Bluemix

Cloud Foundry espera una archivo package.json comp parte de los archivos que componen una aplicación Node.js. En este archivo se pueden especificar varios valores de utilidad como la versión de Node.js que se desea utilizar, el nombre de la aplicación, la versión, el nombre del autor, las dependencias, etc. A continuación se muestra el contenido del archivo package.json que utilizaremos.

{
	"name": "mgdevelopers-nodejs-poc-01",
	"version": "0.0.1",
	"description": "MG Developers - Poc 01 - Node.js",
	"dependencies": {
	},
	"engines": {
		"node": "0.10.26"
	},
	"repository": {}
}

Es necesario utilizar la variable de entorno VCAP_APP_PORT y VCAP_APP_HOST para determinar en que dirección y en qué puerto la aplicación debe escuchar, es necesario tener en cuenta que estos valores dependen de la infraestructura subyacente. Será conveniente introducir los siguientes cambios en la aplicación para asignar a las variables host y port valores compatibles con nuestro entorno local y el de IBM Bluemix.

var http = require('http');
// Cambios en la inicialización de las variables
var port = (process.env.VCAP_APP_PORT || 8080);
var host = (process.env.VCAP_APP_HOST || 'localhost');
// Resto del código
// ....

Por último, para facilitar el depsliegue, el nombre del archivo de nuestra aplicación debe ser server.js, de esta forma se puede utilizar el comando de inicialización pre definido y no será necesario especificarlo al momento de hacer el despliegue.

Desplegar la aplicación utilizando Cloud Foundry CLI

Para realizar el despliegue de nuestra aplicación en IBM Bluemix utilizaremos la interface de línea de comando (CLI) de Cloud Foundry.

Descargar e instalar Cloud Foundry CLI

De la página de descarga de Cloud Foundry CLI seleccionaremos el instalador estable para el sistema operativo con el cual estemos trabajando, en nuestro caso Windows de 64 bits.

Descarga de Cloud Foundry CLI
Pantalla 8 - Descarga de Cloud Foundry CLI

Luego será necesario ejecutar el asistente que nos permitirá instalar la interfaz de línea de comando en nuestro equipo local.

Inicio del asistente de instalación de Cloud Foundry CLI
Pantalla 9 - Inicio del asistente de instalación de Cloud Foundry CLI

Iniciar sesión en IBM Bluemix en el espacio "node.js poc"

Antes de poder desplegar la aplicación será necesario ejecutar el siguiente comando para iniciar sesión, la url https://api.ng.bluemix.net es el API End Point de IBM Bluemix.

cf login -a https://api.ng.bluemix.net

Luego de ejecutar el comando nos serán solicitadas las las credenciales utilizadas para acceder a IBM Bluemix y luego el espacio que utilizaremos, en nuestro caso node.js poc.

C:\_jdevelopment\CloudFoundry>cf login -a https://api.ng.bluemix.net
API endpoint: https://api.ng.bluemix.net

Email> diego_mendoza
Password>
Authenticating...
OK

Targeted org diego_mendoza

Select a space (or press enter to skip):
1. dev
2. node.js poc

Space> 2
Targeted space node.js poc

API endpoint:   https://api.ng.bluemix.net (API version: 2.27.0)
User:           
 Esta dirección de correo electrónico está protegida contra spambots. Usted necesita tener Javascript activado para poder verla.
 
Org:            diego_mendoza
Space:          node.js poc

Desplegar la aplicación haciendo un push

Para desplegar el código será necesario estar ubicados en el directorio donde se encuentran los archivos server.js y package.json, y luego ejecutar el siguiente comando para desplegar el contenido del directorio en IBM Bluemix.

cf push mgdevelopers-nodejs-poc-01 -m 64M -n mgdevelopers-nodejs-poc-01 -c null 

Si todo funciona correctamente la ejecución debería arrojar un resultado similar al siguiente:

C:\_workspaces\node.js\poc.001>cf push mgdevelopers-nodejs-poc-01 -m 64M -n mgdevelopers-nodejs-poc-01 -c null
Creating app mgdevelopers-nodejs-poc-01 in org diego_mendoza / space node.js poc as diego_mendoza...
OK

Creating route mgdevelopers-nodejs-poc-01.mybluemix.net...
OK

Binding mgdevelopers-nodejs-poc-01.mybluemix.net to mgdevelopers-nodejs-poc-01...
OK

Uploading mgdevelopers-nodejs-poc-01...
Uploading app files from: C:\_workspaces\node.js\poc.001
Uploading 1.2K, 2 files
Done uploading
OK

Starting app mgdevelopers-nodejs-poc-01 in org diego_mendoza / space node.js poc as diego_mendoza...
-----> Downloaded app package (4.0K)

-----> IBM SDK for Node.js Buildpack v2.2-20150630-1721
       Based on Cloud Foundry Node.js Buildpack v64
-----> Reading application state
       package.json...
       build directory...
       cache directory...
       environment variables...
       Node engine range:   0.10.26
       Npm engine:          unspecified
       Start mechanism:     server.js
       node_modules source: package.json
       node_modules cached: false
       NPM_CONFIG_PRODUCTION=true
       NODE_MODULES_CACHE=true
-----> Installing binaries
       Installing IBM SDK for Node.js (0.10.26) from cache
       Using default npm version: 1.4.3
-----> Checking and configuring service extensions before installing dependencies
-----> Building dependencies
       Installing node modules
       npm WARN package.json mgdevelopers-nodejs-poc-01@0.0.1 No README data
-----> Checking startup method
       No Procfile; Adding 'web: node server.js' to new Procfile
-----> Checking and configuring service extensions after installing dependencies
-----> Installing App Management
-----> Building runtime environment
-----> Finalizing build
       Creating runtime environment
       Cleaning previous cache
       Caching results for future builds
-----> Build succeeded!
       mgdevelopers-nodejs-poc-01@0.0.1 /tmp/staged/app
       └── (empty)
-----> Uploading droplet (8.3M)

0 of 1 instances running, 1 starting
1 of 1 instances running

App started
OK

App mgdevelopers-nodejs-poc-01 was started using this command `./vendor/initial_startup.rb`

Showing health and status for app mgdevelopers-nodejs-poc-01 in org diego_mendoza / space node.js poc as diego_mendoza..
.
OK

requested state: started
instances: 1/1
usage: 64M x 1 instances
urls: mgdevelopers-nodejs-poc-01.mybluemix.net
last uploaded: Mon Jul 13 12:55:30 UTC 2015
stack: lucid64
buildpack: SDK for Node.js(TM) (ibm-node.js-0.10.26)

     state     since                    cpu    memory         disk          details
#0   running   2015-07-13 09:56:14 AM   0.0%   16.6M of 64M   30.8M of 1G

Visualización de la aplicación instalada en la consola de IBM Bluemix

Luego de instalar la aplicación podemos visualizar como han cambiado las cosas en la consola de IBM Bluemix.

Visualización de la consola de IBM Bluemix con la aplicación desplegada
Pantalla 10 - Visualización de la consola de IBM Bluemix con la aplicación desplegada

Si accedemos al panel de control de la aplicación tendremos una visión mas detallada de sus características, estado y funcionamiento, en este panel se pueden modificar parámetros como la cantidad de instancias asignadas, la memoria asignada, etc.

Panel de control de la aplicación Node.js
Pantalla 11 - Panel de control de la aplicación Node.js

Prueba de la aplicación desplegada en IBM Bluemix

Estamos en condiciones de acceder a la aplicación a través de la url: http://mgdevelopers-nodejs-poc-01.mybluemix.net/.

Acceso a la aplicación Node.js desplegada en IBM Bluemix
Pantalla 12 - Acceso a la aplicación Node.js desplegada en IBM Bluemix

Conclusiones

En este artículo introductorio se describieron los conceptos fundamentales necesarios para comenzar a utilizar el servicio PaaS de IBM Bluemix, conocer estos conceptos ayuda a comprender de que se trata esta "nube" y que servicios ofrece: Cloud Foundry, Docker y Openstack.

Desde el punto de vista práctico se tuvo un primer contacto con la consola y se pudo verificar la facilidad con la que es posible desplegar una aplicación en IBM Bluemix utilizado la interfaz de línea de comando de Cloud Foundry.

Referencias

Modificado por última vez en Lunes, 13 Julio 2015 14:18
Valora este artículo
(1 Voto)
Diego Mendoza

Diego Mendoza se desempeña como arquitecto de software en MicroGestion participando en el proceso de análisis y diseño de soluciones que tengan requerimientos de alta disponibilidad, integración de ambientes heterogéneos, orientación a servicios, gestión de procesos de negocio, etc.

Sitio Web: www.microgestion.com/index.php/mg-developers/blog/author/988-diegomendoza
Deja un comentario

Asegúrate de llenar la información requerida marcada con (*). No está permitido el Código HTML. Tu dirección de correo NO será publicada.

Comuníquese con nosotros telefónicamente +54 011 4382-0878 o vía correo electrónico Esta dirección de correo electrónico está protegida contra spambots. Usted necesita tener Javascript activado para poder verla.