SlideShare a Scribd company logo
1 of 74
NodeConf EU Workshop
James M Snell <jasnell@us.ibm.com> <jasnell@gmail.com>
A Node.js Developer's Guide to
Bluemix
Getting Started
James M Snell
@jasnell on Github and Twitter
IBM Technical Lead for Node.js
TSC Member
3
http://bluemix.net/
Sign up for Free Trial Account:
http://ibm.co/1M05AMX
(go ahead, it only takes a couple minutes)
4
Node.js v0.12.7 or higher
Bluemix supports Node.js v0.12.7 by default
(If you want to use Node v4.0.0 locally, go for it.)
5
6
$ npm install –g bluemix-workshop
$ bluemix-workshop
(This is a nodeschool style workshopper that runs with a minimal UI.)
7
What is Bluemix?
The Five Minute or Less Introduction
Bluemix is IBM's Platform-as-a-
Service Offering.
It's built on top of Cloud Foundry.
It also uses Docker and OpenStack
(but we're not covering those today)
9
With Bluemix, you write
applications and deploy ("push")
them to the server.
Bluemix manages the details
– Provisioning VMs
– Setting up the Containers
– Routing,
– Load-Balancing,
– Scaling,
– Configuring Services, etc
10
11
12
13
Bluemix can run in a Shared or Dedicated Environment
14
Services Services Services Services
"Buildpack" – a collection of scripts
that prepare code for execution in
Bluemix.
…tells Bluemix how to set up the
VM, Container and Runtime for
your application to run.
For Node.js applications deployed
to Bluemix, the default Buildpack is
"sdk-for-nodejs"
15
Install the CLI
You will interact with Bluemix using
both the browser-based UI and the
Cloud Foundry cf command line
client.
17
Visit:
https://github.com/cloudfoundry/cli/releases
Once installed, cf will be added to your PATH. You may need
to restart your terminal session to pick up the change.
$ cf -version
Setting the API Endpoint
Once the cf command line tool is
installed, you have to tell it about
the Bluemix endpoint.
19
First, what region are you in?
US South (`us-south`):
https://api.ng.bluemix.net
Europe United Kingdom (`eu-gb`):
https://api.eu-gb.bluemix.net ✔
Once the cf command line tool is
installed, you have to tell it about
the Bluemix endpoint.
20
Second, set the API endpoint and Login
$ cf api https://api.eu-gb.bluemix.net
$ cf login
Enter your Bluemix User ID and Password to authenticate
A Simple App
22
$ mkdir helloworld && cd helloworld && npm init
…
name: (helloworld)
version: (1.0.0)
description:
entry point: (index.js)
test command:
git repository:
keywords:
author:
license: (ISC)
…
Is this ok? (yes)
Remember what you choose here
23
$ vi index.js
var http = require('http');
var server = http.createServer(function(req,res) {
res.writeHead(200,
{'Content-Type': 'text/plain'});
res.end('Hello World');
});
server.listen(8888, function() {
console.log('The server is running');
});
24
$ vi package.json
{
"name": "helloworld",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"start": "node index"
},
"author": "",
"license": "ISC"
}
Add this part!
25
$ npm start
> helloworld@1.0.0 start /Users/james/tmp/helloworld
> node index
The server is running
Adding Bluemix Support
27
$ vi index.js
var http = require('http');
var server = http.createServer(function(req,res) {
res.writeHead(200,
{'Content-Type': 'text/plain'});
res.end('Hello World');
});
server.listen(
process.env.VCAP_APP_PORT || 8888,
function() {
console.log('The server is running');
}
);
28
$ vi manifest.yml
---
applications:
- name: {yourappname}
mem: 128M
instances: 1
path: .
host: {yourappname}
Pick something unique for
the application name
http://{yourappname}.mybluemix.net
29
$ vi .cfignore
node_modules
$ ls –a
.cfignore
index.js
package.json
manifest.yml
This tells cf not to upload your
local node_modules, Bluemix will
install them for you.
30
$ cf push
31
http://{yourappname}.mybluemix.net
32
http://snellworkshop.mybluemix.net
Provisioning and Binding
Services
Services are additional managed
capabilities that can be added to an
application.
34
$ cf marketplace
$ cf marketplace –s rediscloud
$ cf create-service rediscloud 30mb myrediscloud
Creates an instance of the rediscloud
service within your account.
Services are additional managed
capabilities that can be added to an
application.
35
$ cf bind-service {yourappname} rediscloud
$ npm install --save redis
Attach the myrediscloud service instance to your application
Add the redis client module to your application.
36
$ vi index.js
var http = require('http');
var redis = require('redis');
var vcap_services = process.env.VCAP_SERVICES;
var rediscloud_service =
JSON.parse(vcap_services)["rediscloud"][0];
var credentials =
rediscloud_service.credentials;
var client = redis.createClient(
credentials.port,
credentials.hostname,
{no_ready_check: true});
client.auth(credentials.password);
client.on('connect', function() {
console.log('Connected to Redis');
});
var server = http.createServer(function(req,res) {
client.get('last-visit', function(err, reply) {
res.writeHead(200, {'Content-Type': 'text/plain'});
client.set('last-visit', new Date().toISOString());
res.write('Last Visit: ' + reply + 'n');
res.end('Hello World');
});
});
server.listen(process.env.VCAP_APP_PORT || 8888, function() {
console.log('The server is running');
});
37
$ vi index.js
var http = require('http');
var redis = require('redis');
var vcap_services = process.env.VCAP_SERVICES;
var rediscloud_service =
JSON.parse(vcap_services)["rediscloud"][0];
var credentials =
rediscloud_service.credentials;
var client = redis.createClient(
credentials.port,
credentials.hostname,
{no_ready_check: true});
client.auth(credentials.password);
client.on('connect', function() {
console.log('Connected to Redis');
});
var server = http.createServer(function(req,res) {
client.get('last-visit', function(err, reply) {
res.writeHead(200, {'Content-Type': 'text/plain'});
client.set('last-visit', new Date().toISOString());
res.write('Last Visit: ' + reply + 'n');
res.end('Hello World');
});
});
server.listen(process.env.VCAP_APP_PORT || 8888, function() {
console.log('The server is running');
});
38
$ vi index.js
var http = require('http');
var redis = require('redis');
var vcap_services = process.env.VCAP_SERVICES;
var rediscloud_service =
JSON.parse(vcap_services)["rediscloud"][0];
var credentials =
rediscloud_service.credentials;
var client = redis.createClient(
credentials.port,
credentials.hostname,
{no_ready_check: true});
client.auth(credentials.password);
client.on('connect', function() {
console.log('Connected to Redis');
});
var server = http.createServer(function(req,res) {
client.get('last-visit', function(err, reply) {
res.writeHead(200, {'Content-Type': 'text/plain'});
client.set('last-visit', new Date().toISOString());
res.write('Last Visit: ' + reply + 'n');
res.end('Hello World');
});
});
server.listen(process.env.VCAP_APP_PORT || 8888, function() {
console.log('The server is running');
});
39
$ vi index.js
var http = require('http');
var redis = require('redis');
var vcap_services = process.env.VCAP_SERVICES;
var rediscloud_service =
JSON.parse(vcap_services)["rediscloud"][0];
var credentials =
rediscloud_service.credentials;
var client = redis.createClient(
credentials.port,
credentials.hostname,
{no_ready_check: true});
client.auth(credentials.password);
client.on('connect', function() {
console.log('Connected to Redis');
});
var server = http.createServer(function(req,res) {
client.get('last-visit', function(err, reply) {
res.writeHead(200, {'Content-Type': 'text/plain'});
client.set('last-visit', new Date().toISOString());
res.write('Last Visit: ' + reply + 'n');
res.end('Hello World');
});
});
server.listen(process.env.VCAP_APP_PORT || 8888, function() {
console.log('The server is running');
});
40
$ vi index.js
var http = require('http');
var redis = require('redis');
var vcap_services = process.env.VCAP_SERVICES;
var rediscloud_service =
JSON.parse(vcap_services)["rediscloud"][0];
var credentials =
rediscloud_service.credentials;
var client = redis.createClient(
credentials.port,
credentials.hostname,
{no_ready_check: true});
client.auth(credentials.password);
client.on('connect', function() {
console.log('Connected to Redis');
});
var server = http.createServer(function(req,res) {
client.get('last-visit', function(err, reply) {
res.writeHead(200, {'Content-Type': 'text/plain'});
client.set('last-visit', new Date().toISOString());
res.write('Last Visit: ' + reply + 'n');
res.end('Hello World');
});
});
server.listen(process.env.VCAP_APP_PORT || 8888, function() {
console.log('The server is running');
});
41
$ cf push
The Bluemix Environment
Bluemix uses environment
variables to configure your
application
43
VCAP_APP_PORT - The TCP Port
VCAP_APP_HOST - The Hostname
VCAP_SERVICES - *JSON* File with
Service Details
VCAP_APPLICATION - *JSON* file with
Application details
Bluemix uses environment
variables to configure your
application
44
VCAP_SERVICES:
{
"rediscloud": {
"credentials": { ... },
"label": "rediscloud",
"name": "myrediscloud",
"plan": "30mb",
...
}
}
Bluemix uses environment
variables to configure your
application
45
VCAP_APPLICATION:
{
"application_name": "snellworkshop",
"application_urls": [
"snellworkshop.mybluemix.net"
],
...
}
Bluemix uses environment
variables to configure your
application
46
$ cf set-env {myappname} MYENVVAR value
$ cf env {myappname}
$ cf unset-env {myappname} MYENVVAR
Enabling Application
Management
The Application Management Tools
are additional utilities for debugging
and managing applications
48
$ cf set-env {yourappname} BLUEMIX_APP_MGMT_ENABLE
proxy+devconsole+shell+inspector+trace
$ cf restage {yourappname}
Enables:
• a terminal shell for command line
access to your application's container
• a node-inspector instance
• debug tracing using log4js, bunyan, etc
http://{yourappname}.mybluemix.net/bluemix-
debug/manage/
49
http://{yourappname}.mybluemix.net/bluemix-
debug/manage/
50
http://{yourappname}.mybluemix.net/bluemix-
debug/manage/
51
You can enable tracing using log4js
or bunyan
52
$ npm install --save log4js@0.6.22
$ vi index.js
...
var log4js = require('log4js');
log4js.loadAppender('console');
var logger = log4js.getLogger('app');
logger.setLevel('ERROR');
...
logger.info('running...');
...
Set the trace level from within the Bluemix
Dashboard…
53
54
Set the trace level from within the Bluemix
Dashboard…
Use cf logs to view the trace output
55
$ cf logs {yourappname}
$ cf logs --recent {yourappname}
Tails the logs to the console
Prints the most recent logs
Using an alternative buildpack
(or, how to use newer versions of Node.js)
The default Node.js Buildpack uses
Node.js v0.12.7, which is good.
But I want to use the new stuff.
57
The IBM Node.js Buildpack is based on the open source
Cloud Foundry Node.js Buildpack. Nearly all Cloud Foundry
Buildpacks can work on Bluemix out of the box.
58
The Heroku Node.js Buildpack:
https://github.com/heroku/heroku-buildpack-nodejs.git
Includes support for the latest Node.js/io.js Binaries
You specify the alternate buildpack in the
manifest.yml
59
$ vi manifest.yml
---
applications:
- name: {yourappname}
mem: 128M
instances: 1
path: .
host: {yourappname}
buildpack: https://github.com/heroku/heroku-buildpack-
nodejs.git
command: node app
And tell package.json which version of
the Node runtime to use
60
$ vi package.json
{
"name": "helloworld",
"version": "1.0.0",
"main": "./app.js",
"scripts": {
"start": "node app"
},
...,
"engines": {
"iojs" : "*"
}
}
61
$ cf push
User-Provided Services
Bluemix supports User-Provided
Services.
63
User Provided Services are essentially service configurations
you provide. They are kept separate from your application so
that they can be shared and managed just like the services
provided by Bluemix itself.
User Provided Services provide an excellent way of providing
runtime configuration setting to your applications.
For instance, suppose we need to
configure a secret for our
applications:
64
$ cf cups session-secret -p secret
secret> this is the secret
Creating user provided service session-secret in org jasnell / space
dev as jasnell...
$ cf bind-service {yourappname} session-secret
$ cf restage
65
User-Provide Service properties are included in
the VCAP_SERVICES environment variable, just
like any other service.
Using a Custom Domain Name
Bluemix supports Custom Domain
Names
67
By default, Bluemix will create a URL for your application
automatically.
This usually follows the pattern:
http://{yourappname}.mybluemix.net
But what if you want to use your own domain name?
A few command line calls is all you
need.
68
$ cf create-domain myorg example.org
$ cf map-route {yourappname} example.org --n foo
Then create a CNAME DNS record for your sub-domain:
foo.example.org CNAME {yourappname.mybluemix.net}
Once the DNS records propagate, your application will be available at:
http://foo.example.org
You can upload your SSL/TLS
certificates via the dashboard:
69
No-downtime deployment
Updating an application on Bluemix
will cause the application to restart,
forcing a small downtime period.
You can avoid it.
71
$ cf rename {yourappname} {youappname}-old
$ cf push
$ cf delete {yourappname}-old
Resources:
• Bluemix Documentation -
https://www.ng.bluemix.net/docs
• developerWorks -
http://www.ibm.com/developerworks/cloud/bluemix
/
Q&A
Thank you
James M Snell
jasnell@us.ibm.com
jasnell@gmail.com
twitter/github @jasnell

More Related Content

What's hot

Bluemix and DevOps workshop lab
Bluemix and DevOps workshop labBluemix and DevOps workshop lab
Bluemix and DevOps workshop labbenm4nn
 
Developing for Hybrid Cloud with Bluemix
Developing for Hybrid Cloud with BluemixDeveloping for Hybrid Cloud with Bluemix
Developing for Hybrid Cloud with BluemixRoberto Pozzi
 
100 blue mix days technical training
100 blue mix days technical training100 blue mix days technical training
100 blue mix days technical trainingAjit Yohannan
 
IBM Bluemix Workshop version 3
IBM Bluemix Workshop version 3IBM Bluemix Workshop version 3
IBM Bluemix Workshop version 3Nguyen Tai Dzung
 
IBM Softlayer Bluemix Marketplace
IBM Softlayer Bluemix MarketplaceIBM Softlayer Bluemix Marketplace
IBM Softlayer Bluemix MarketplaceSimon Baker
 
Hybrid Cloud with IBM Bluemix, Docker and Open Stack
Hybrid Cloud with IBM Bluemix, Docker and Open StackHybrid Cloud with IBM Bluemix, Docker and Open Stack
Hybrid Cloud with IBM Bluemix, Docker and Open Stackgjuljo
 
IBM BlueMix Architecture and Deep Dive (Powered by CloudFoundry)
IBM BlueMix Architecture and Deep Dive (Powered by CloudFoundry) IBM BlueMix Architecture and Deep Dive (Powered by CloudFoundry)
IBM BlueMix Architecture and Deep Dive (Powered by CloudFoundry) Animesh Singh
 
Automated Lifecycle Management - CloudFoundry on OpenStack
Automated Lifecycle Management - CloudFoundry on OpenStackAutomated Lifecycle Management - CloudFoundry on OpenStack
Automated Lifecycle Management - CloudFoundry on OpenStackAnimesh Singh
 
Bluemix the digital innovation platform
Bluemix   the digital innovation platformBluemix   the digital innovation platform
Bluemix the digital innovation platformJose Pena
 
An introduction to IBM BlueMix
An introduction to IBM BlueMixAn introduction to IBM BlueMix
An introduction to IBM BlueMixPer Henrik Lausten
 
ETS Summer School - Introduction to Bluemix (July 4th)
ETS Summer School - Introduction to Bluemix (July 4th)ETS Summer School - Introduction to Bluemix (July 4th)
ETS Summer School - Introduction to Bluemix (July 4th)Jean-Louis (JL) Marechaux
 
Hybrid Cloud: How to Get a Return from an Investment Made Three Decades Ago (...
Hybrid Cloud: How to Get a Return from an Investment Made Three Decades Ago (...Hybrid Cloud: How to Get a Return from an Investment Made Three Decades Ago (...
Hybrid Cloud: How to Get a Return from an Investment Made Three Decades Ago (...Michael Elder
 
IBM Bluemix Dedicated – GitHub Enterprise
IBM Bluemix Dedicated – GitHub EnterpriseIBM Bluemix Dedicated – GitHub Enterprise
IBM Bluemix Dedicated – GitHub EnterpriseIBM DevOps
 
Elevating your Continuous Delivery Strategy Above the Rolling Clouds
Elevating your Continuous Delivery Strategy Above the Rolling CloudsElevating your Continuous Delivery Strategy Above the Rolling Clouds
Elevating your Continuous Delivery Strategy Above the Rolling CloudsMichael Elder
 
Understanding Docker and IBM Bluemix Container Service
Understanding Docker and IBM Bluemix Container ServiceUnderstanding Docker and IBM Bluemix Container Service
Understanding Docker and IBM Bluemix Container ServiceAndrew Ferrier
 
Get over the Cloud with Bluemix
Get over the Cloud with BluemixGet over the Cloud with Bluemix
Get over the Cloud with BluemixCodemotion
 
Bluemix overview v1.4
Bluemix overview v1.4Bluemix overview v1.4
Bluemix overview v1.4Jose Pena
 
Turning up the HEAT with IBM MobileFirst for iOS Apps
Turning up the HEAT with IBM MobileFirst for iOS AppsTurning up the HEAT with IBM MobileFirst for iOS Apps
Turning up the HEAT with IBM MobileFirst for iOS AppsMichael Elder
 

What's hot (20)

Bluemix and DevOps workshop lab
Bluemix and DevOps workshop labBluemix and DevOps workshop lab
Bluemix and DevOps workshop lab
 
Developing for Hybrid Cloud with Bluemix
Developing for Hybrid Cloud with BluemixDeveloping for Hybrid Cloud with Bluemix
Developing for Hybrid Cloud with Bluemix
 
100 blue mix days technical training
100 blue mix days technical training100 blue mix days technical training
100 blue mix days technical training
 
IBM Bluemix Workshop version 3
IBM Bluemix Workshop version 3IBM Bluemix Workshop version 3
IBM Bluemix Workshop version 3
 
IBM Softlayer Bluemix Marketplace
IBM Softlayer Bluemix MarketplaceIBM Softlayer Bluemix Marketplace
IBM Softlayer Bluemix Marketplace
 
IBM Bluemix
IBM BluemixIBM Bluemix
IBM Bluemix
 
Hybrid Cloud with IBM Bluemix, Docker and Open Stack
Hybrid Cloud with IBM Bluemix, Docker and Open StackHybrid Cloud with IBM Bluemix, Docker and Open Stack
Hybrid Cloud with IBM Bluemix, Docker and Open Stack
 
IBM BlueMix Architecture and Deep Dive (Powered by CloudFoundry)
IBM BlueMix Architecture and Deep Dive (Powered by CloudFoundry) IBM BlueMix Architecture and Deep Dive (Powered by CloudFoundry)
IBM BlueMix Architecture and Deep Dive (Powered by CloudFoundry)
 
Automated Lifecycle Management - CloudFoundry on OpenStack
Automated Lifecycle Management - CloudFoundry on OpenStackAutomated Lifecycle Management - CloudFoundry on OpenStack
Automated Lifecycle Management - CloudFoundry on OpenStack
 
Bluemix the digital innovation platform
Bluemix   the digital innovation platformBluemix   the digital innovation platform
Bluemix the digital innovation platform
 
Blue mix
Blue mixBlue mix
Blue mix
 
An introduction to IBM BlueMix
An introduction to IBM BlueMixAn introduction to IBM BlueMix
An introduction to IBM BlueMix
 
ETS Summer School - Introduction to Bluemix (July 4th)
ETS Summer School - Introduction to Bluemix (July 4th)ETS Summer School - Introduction to Bluemix (July 4th)
ETS Summer School - Introduction to Bluemix (July 4th)
 
Hybrid Cloud: How to Get a Return from an Investment Made Three Decades Ago (...
Hybrid Cloud: How to Get a Return from an Investment Made Three Decades Ago (...Hybrid Cloud: How to Get a Return from an Investment Made Three Decades Ago (...
Hybrid Cloud: How to Get a Return from an Investment Made Three Decades Ago (...
 
IBM Bluemix Dedicated – GitHub Enterprise
IBM Bluemix Dedicated – GitHub EnterpriseIBM Bluemix Dedicated – GitHub Enterprise
IBM Bluemix Dedicated – GitHub Enterprise
 
Elevating your Continuous Delivery Strategy Above the Rolling Clouds
Elevating your Continuous Delivery Strategy Above the Rolling CloudsElevating your Continuous Delivery Strategy Above the Rolling Clouds
Elevating your Continuous Delivery Strategy Above the Rolling Clouds
 
Understanding Docker and IBM Bluemix Container Service
Understanding Docker and IBM Bluemix Container ServiceUnderstanding Docker and IBM Bluemix Container Service
Understanding Docker and IBM Bluemix Container Service
 
Get over the Cloud with Bluemix
Get over the Cloud with BluemixGet over the Cloud with Bluemix
Get over the Cloud with Bluemix
 
Bluemix overview v1.4
Bluemix overview v1.4Bluemix overview v1.4
Bluemix overview v1.4
 
Turning up the HEAT with IBM MobileFirst for iOS Apps
Turning up the HEAT with IBM MobileFirst for iOS AppsTurning up the HEAT with IBM MobileFirst for iOS Apps
Turning up the HEAT with IBM MobileFirst for iOS Apps
 

Viewers also liked

Give Your Java Apps “The Boot” With Spring Boot And Cloud Foundry
Give Your Java Apps “The Boot” With Spring Boot And Cloud FoundryGive Your Java Apps “The Boot” With Spring Boot And Cloud Foundry
Give Your Java Apps “The Boot” With Spring Boot And Cloud FoundryRyan Baxter
 
Building Highly Scalable Apps On Bluemix
Building Highly Scalable Apps On BluemixBuilding Highly Scalable Apps On Bluemix
Building Highly Scalable Apps On BluemixRyan Baxter
 
Bluemix - Deploying a Java Web Application
Bluemix - Deploying a Java Web ApplicationBluemix - Deploying a Java Web Application
Bluemix - Deploying a Java Web ApplicationCraig Trim
 
IBM Bluemix Introdution for Hackathons
IBM Bluemix Introdution for HackathonsIBM Bluemix Introdution for Hackathons
IBM Bluemix Introdution for Hackathonsgjuljo
 
Twitter analytics in Bluemix
Twitter analytics in BluemixTwitter analytics in Bluemix
Twitter analytics in BluemixWilfried Hoge
 
Think Small To Go Big - Introduction To Microservices
Think Small To Go Big - Introduction To MicroservicesThink Small To Go Big - Introduction To Microservices
Think Small To Go Big - Introduction To MicroservicesRyan Baxter
 
IAB3948 Wiring the internet of things with Node-RED
IAB3948 Wiring the internet of things with Node-REDIAB3948 Wiring the internet of things with Node-RED
IAB3948 Wiring the internet of things with Node-REDPeterNiblett
 
BigData processing in the cloud – Guest Lecture - University of Applied Scien...
BigData processing in the cloud – Guest Lecture - University of Applied Scien...BigData processing in the cloud – Guest Lecture - University of Applied Scien...
BigData processing in the cloud – Guest Lecture - University of Applied Scien...Romeo Kienzler
 
An Overview of IBM Streaming Analytics for Bluemix
An Overview of IBM Streaming Analytics for BluemixAn Overview of IBM Streaming Analytics for Bluemix
An Overview of IBM Streaming Analytics for Bluemixlisanl
 
Quickly build and deploy a scalable OpenStack Swift application using IBM Blu...
Quickly build and deploy a scalable OpenStack Swift application using IBM Blu...Quickly build and deploy a scalable OpenStack Swift application using IBM Blu...
Quickly build and deploy a scalable OpenStack Swift application using IBM Blu...Daniel Krook
 
デモで理解する!Bluemixモバイル・サービス
デモで理解する!Bluemixモバイル・サービスデモで理解する!Bluemixモバイル・サービス
デモで理解する!Bluemixモバイル・サービスIBMソリューション
 
Flow based programming an overview
Flow based programming   an overviewFlow based programming   an overview
Flow based programming an overviewSamuel Lampa
 
Using bluemix predictive analytics service in Node-RED
Using bluemix predictive analytics service in Node-REDUsing bluemix predictive analytics service in Node-RED
Using bluemix predictive analytics service in Node-REDLionel Mommeja
 
Deployment Automation for Hybrid Cloud and Multi-Platform Environments
Deployment Automation for Hybrid Cloud and Multi-Platform EnvironmentsDeployment Automation for Hybrid Cloud and Multi-Platform Environments
Deployment Automation for Hybrid Cloud and Multi-Platform EnvironmentsIBM UrbanCode Products
 
Big Data Analytics 3: Machine Learning to Engage the Customer, with Apache Sp...
Big Data Analytics 3: Machine Learning to Engage the Customer, with Apache Sp...Big Data Analytics 3: Machine Learning to Engage the Customer, with Apache Sp...
Big Data Analytics 3: Machine Learning to Engage the Customer, with Apache Sp...MongoDB
 
Migrating Java EE applications to IBM Bluemix Platform-as-a-Service
Migrating Java EE applications to IBM Bluemix Platform-as-a-ServiceMigrating Java EE applications to IBM Bluemix Platform-as-a-Service
Migrating Java EE applications to IBM Bluemix Platform-as-a-ServiceDavid Currie
 
Flow Base Programming with Node-RED and Functional Reactive Programming with ...
Flow Base Programming with Node-RED and Functional Reactive Programming with ...Flow Base Programming with Node-RED and Functional Reactive Programming with ...
Flow Base Programming with Node-RED and Functional Reactive Programming with ...Sven Beauprez
 

Viewers also liked (17)

Give Your Java Apps “The Boot” With Spring Boot And Cloud Foundry
Give Your Java Apps “The Boot” With Spring Boot And Cloud FoundryGive Your Java Apps “The Boot” With Spring Boot And Cloud Foundry
Give Your Java Apps “The Boot” With Spring Boot And Cloud Foundry
 
Building Highly Scalable Apps On Bluemix
Building Highly Scalable Apps On BluemixBuilding Highly Scalable Apps On Bluemix
Building Highly Scalable Apps On Bluemix
 
Bluemix - Deploying a Java Web Application
Bluemix - Deploying a Java Web ApplicationBluemix - Deploying a Java Web Application
Bluemix - Deploying a Java Web Application
 
IBM Bluemix Introdution for Hackathons
IBM Bluemix Introdution for HackathonsIBM Bluemix Introdution for Hackathons
IBM Bluemix Introdution for Hackathons
 
Twitter analytics in Bluemix
Twitter analytics in BluemixTwitter analytics in Bluemix
Twitter analytics in Bluemix
 
Think Small To Go Big - Introduction To Microservices
Think Small To Go Big - Introduction To MicroservicesThink Small To Go Big - Introduction To Microservices
Think Small To Go Big - Introduction To Microservices
 
IAB3948 Wiring the internet of things with Node-RED
IAB3948 Wiring the internet of things with Node-REDIAB3948 Wiring the internet of things with Node-RED
IAB3948 Wiring the internet of things with Node-RED
 
BigData processing in the cloud – Guest Lecture - University of Applied Scien...
BigData processing in the cloud – Guest Lecture - University of Applied Scien...BigData processing in the cloud – Guest Lecture - University of Applied Scien...
BigData processing in the cloud – Guest Lecture - University of Applied Scien...
 
An Overview of IBM Streaming Analytics for Bluemix
An Overview of IBM Streaming Analytics for BluemixAn Overview of IBM Streaming Analytics for Bluemix
An Overview of IBM Streaming Analytics for Bluemix
 
Quickly build and deploy a scalable OpenStack Swift application using IBM Blu...
Quickly build and deploy a scalable OpenStack Swift application using IBM Blu...Quickly build and deploy a scalable OpenStack Swift application using IBM Blu...
Quickly build and deploy a scalable OpenStack Swift application using IBM Blu...
 
デモで理解する!Bluemixモバイル・サービス
デモで理解する!Bluemixモバイル・サービスデモで理解する!Bluemixモバイル・サービス
デモで理解する!Bluemixモバイル・サービス
 
Flow based programming an overview
Flow based programming   an overviewFlow based programming   an overview
Flow based programming an overview
 
Using bluemix predictive analytics service in Node-RED
Using bluemix predictive analytics service in Node-REDUsing bluemix predictive analytics service in Node-RED
Using bluemix predictive analytics service in Node-RED
 
Deployment Automation for Hybrid Cloud and Multi-Platform Environments
Deployment Automation for Hybrid Cloud and Multi-Platform EnvironmentsDeployment Automation for Hybrid Cloud and Multi-Platform Environments
Deployment Automation for Hybrid Cloud and Multi-Platform Environments
 
Big Data Analytics 3: Machine Learning to Engage the Customer, with Apache Sp...
Big Data Analytics 3: Machine Learning to Engage the Customer, with Apache Sp...Big Data Analytics 3: Machine Learning to Engage the Customer, with Apache Sp...
Big Data Analytics 3: Machine Learning to Engage the Customer, with Apache Sp...
 
Migrating Java EE applications to IBM Bluemix Platform-as-a-Service
Migrating Java EE applications to IBM Bluemix Platform-as-a-ServiceMigrating Java EE applications to IBM Bluemix Platform-as-a-Service
Migrating Java EE applications to IBM Bluemix Platform-as-a-Service
 
Flow Base Programming with Node-RED and Functional Reactive Programming with ...
Flow Base Programming with Node-RED and Functional Reactive Programming with ...Flow Base Programming with Node-RED and Functional Reactive Programming with ...
Flow Base Programming with Node-RED and Functional Reactive Programming with ...
 

Similar to A Node.js Developer's Guide to Bluemix

Real World Lessons on the Pain Points of Node.JS Application
Real World Lessons on the Pain Points of Node.JS ApplicationReal World Lessons on the Pain Points of Node.JS Application
Real World Lessons on the Pain Points of Node.JS ApplicationBen Hall
 
Microservices blue-green-deployment-with-docker
Microservices blue-green-deployment-with-dockerMicroservices blue-green-deployment-with-docker
Microservices blue-green-deployment-with-dockerKidong Lee
 
Node js introduction
Node js introductionNode js introduction
Node js introductionAlex Su
 
Introduce about Nodejs - duyetdev.com
Introduce about Nodejs - duyetdev.comIntroduce about Nodejs - duyetdev.com
Introduce about Nodejs - duyetdev.comVan-Duyet Le
 
Building a Serverless company with Node.js, React and the Serverless Framewor...
Building a Serverless company with Node.js, React and the Serverless Framewor...Building a Serverless company with Node.js, React and the Serverless Framewor...
Building a Serverless company with Node.js, React and the Serverless Framewor...Luciano Mammino
 
Cloud Foundry Open Tour China
Cloud Foundry Open Tour ChinaCloud Foundry Open Tour China
Cloud Foundry Open Tour Chinamarklucovsky
 
Making a small QA system with Docker
Making a small QA system with DockerMaking a small QA system with Docker
Making a small QA system with DockerNaoki AINOYA
 
Building with Watson - Serverless Chatbots with PubNub and Conversation
Building with Watson - Serverless Chatbots with PubNub and ConversationBuilding with Watson - Serverless Chatbots with PubNub and Conversation
Building with Watson - Serverless Chatbots with PubNub and ConversationIBM Watson
 
Using a simple Ruby program to interface with quickly provisioned cloud appli...
Using a simple Ruby program to interface with quickly provisioned cloud appli...Using a simple Ruby program to interface with quickly provisioned cloud appli...
Using a simple Ruby program to interface with quickly provisioned cloud appli...Cloud Elements
 
Cutting through the fog of cloud
Cutting through the fog of cloudCutting through the fog of cloud
Cutting through the fog of cloudKyle Rames
 
Tech Talk: DevOps at LeanIX @ Startup Camp Berlin
Tech Talk: DevOps at LeanIX @ Startup Camp BerlinTech Talk: DevOps at LeanIX @ Startup Camp Berlin
Tech Talk: DevOps at LeanIX @ Startup Camp BerlinLeanIX GmbH
 
Go Mobile with Apache Cordova, Zagreb 2014
Go Mobile with Apache Cordova, Zagreb 2014Go Mobile with Apache Cordova, Zagreb 2014
Go Mobile with Apache Cordova, Zagreb 2014Christian Grobmeier
 
Camunda BPM 7.2: Tasklist and Javascript Forms SDK (English)
Camunda BPM 7.2: Tasklist and Javascript Forms SDK (English)Camunda BPM 7.2: Tasklist and Javascript Forms SDK (English)
Camunda BPM 7.2: Tasklist and Javascript Forms SDK (English)camunda services GmbH
 
Cloud Foundry Open Tour China (english)
Cloud Foundry Open Tour China (english)Cloud Foundry Open Tour China (english)
Cloud Foundry Open Tour China (english)marklucovsky
 
Javascript Everywhere From Nose To Tail
Javascript Everywhere From Nose To TailJavascript Everywhere From Nose To Tail
Javascript Everywhere From Nose To TailCliffano Subagio
 
Introduction To Managing VMware With PowerShell
Introduction To Managing VMware With PowerShellIntroduction To Managing VMware With PowerShell
Introduction To Managing VMware With PowerShellHal Rottenberg
 
Rails web api 开发
Rails web api 开发Rails web api 开发
Rails web api 开发shaokun
 

Similar to A Node.js Developer's Guide to Bluemix (20)

Real World Lessons on the Pain Points of Node.JS Application
Real World Lessons on the Pain Points of Node.JS ApplicationReal World Lessons on the Pain Points of Node.JS Application
Real World Lessons on the Pain Points of Node.JS Application
 
Microservices blue-green-deployment-with-docker
Microservices blue-green-deployment-with-dockerMicroservices blue-green-deployment-with-docker
Microservices blue-green-deployment-with-docker
 
Node js introduction
Node js introductionNode js introduction
Node js introduction
 
Introduce about Nodejs - duyetdev.com
Introduce about Nodejs - duyetdev.comIntroduce about Nodejs - duyetdev.com
Introduce about Nodejs - duyetdev.com
 
Building a Serverless company with Node.js, React and the Serverless Framewor...
Building a Serverless company with Node.js, React and the Serverless Framewor...Building a Serverless company with Node.js, React and the Serverless Framewor...
Building a Serverless company with Node.js, React and the Serverless Framewor...
 
Cloud Foundry Open Tour China
Cloud Foundry Open Tour ChinaCloud Foundry Open Tour China
Cloud Foundry Open Tour China
 
Making a small QA system with Docker
Making a small QA system with DockerMaking a small QA system with Docker
Making a small QA system with Docker
 
Building with Watson - Serverless Chatbots with PubNub and Conversation
Building with Watson - Serverless Chatbots with PubNub and ConversationBuilding with Watson - Serverless Chatbots with PubNub and Conversation
Building with Watson - Serverless Chatbots with PubNub and Conversation
 
AWS Serverless Workshop
AWS Serverless WorkshopAWS Serverless Workshop
AWS Serverless Workshop
 
Using a simple Ruby program to interface with quickly provisioned cloud appli...
Using a simple Ruby program to interface with quickly provisioned cloud appli...Using a simple Ruby program to interface with quickly provisioned cloud appli...
Using a simple Ruby program to interface with quickly provisioned cloud appli...
 
Cutting through the fog of cloud
Cutting through the fog of cloudCutting through the fog of cloud
Cutting through the fog of cloud
 
Tech Talk: DevOps at LeanIX @ Startup Camp Berlin
Tech Talk: DevOps at LeanIX @ Startup Camp BerlinTech Talk: DevOps at LeanIX @ Startup Camp Berlin
Tech Talk: DevOps at LeanIX @ Startup Camp Berlin
 
Go Mobile with Apache Cordova, Zagreb 2014
Go Mobile with Apache Cordova, Zagreb 2014Go Mobile with Apache Cordova, Zagreb 2014
Go Mobile with Apache Cordova, Zagreb 2014
 
Camunda BPM 7.2: Tasklist and Javascript Forms SDK (English)
Camunda BPM 7.2: Tasklist and Javascript Forms SDK (English)Camunda BPM 7.2: Tasklist and Javascript Forms SDK (English)
Camunda BPM 7.2: Tasklist and Javascript Forms SDK (English)
 
MesosCon - Be a microservices hero
MesosCon - Be a microservices heroMesosCon - Be a microservices hero
MesosCon - Be a microservices hero
 
Cloud Foundry Open Tour China (english)
Cloud Foundry Open Tour China (english)Cloud Foundry Open Tour China (english)
Cloud Foundry Open Tour China (english)
 
Javascript Everywhere From Nose To Tail
Javascript Everywhere From Nose To TailJavascript Everywhere From Nose To Tail
Javascript Everywhere From Nose To Tail
 
Introduction To Managing VMware With PowerShell
Introduction To Managing VMware With PowerShellIntroduction To Managing VMware With PowerShell
Introduction To Managing VMware With PowerShell
 
Serverless and React
Serverless and ReactServerless and React
Serverless and React
 
Rails web api 开发
Rails web api 开发Rails web api 开发
Rails web api 开发
 

More from ibmwebspheresoftware

A Taste of Monitoring and Post Mortem Debugging with Node
A Taste of Monitoring and Post Mortem Debugging with Node A Taste of Monitoring and Post Mortem Debugging with Node
A Taste of Monitoring and Post Mortem Debugging with Node ibmwebspheresoftware
 
Don't Miss a Thing at IBM InterConnect 2015
Don't Miss a Thing at IBM InterConnect 2015Don't Miss a Thing at IBM InterConnect 2015
Don't Miss a Thing at IBM InterConnect 2015ibmwebspheresoftware
 
IBM WebSphere Application Foundation Sessions at IBM InterConnect 2015
IBM WebSphere Application Foundation Sessions at IBM InterConnect 2015IBM WebSphere Application Foundation Sessions at IBM InterConnect 2015
IBM WebSphere Application Foundation Sessions at IBM InterConnect 2015ibmwebspheresoftware
 

More from ibmwebspheresoftware (6)

JavaOne 2015 Keynote Presentation
JavaOne 2015 Keynote PresentationJavaOne 2015 Keynote Presentation
JavaOne 2015 Keynote Presentation
 
NodeConf EU 2015 Keynote
NodeConf EU 2015 Keynote NodeConf EU 2015 Keynote
NodeConf EU 2015 Keynote
 
A Taste of Monitoring and Post Mortem Debugging with Node
A Taste of Monitoring and Post Mortem Debugging with Node A Taste of Monitoring and Post Mortem Debugging with Node
A Taste of Monitoring and Post Mortem Debugging with Node
 
Node on Guard!
Node on Guard! Node on Guard!
Node on Guard!
 
Don't Miss a Thing at IBM InterConnect 2015
Don't Miss a Thing at IBM InterConnect 2015Don't Miss a Thing at IBM InterConnect 2015
Don't Miss a Thing at IBM InterConnect 2015
 
IBM WebSphere Application Foundation Sessions at IBM InterConnect 2015
IBM WebSphere Application Foundation Sessions at IBM InterConnect 2015IBM WebSphere Application Foundation Sessions at IBM InterConnect 2015
IBM WebSphere Application Foundation Sessions at IBM InterConnect 2015
 

Recently uploaded

A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI AgeCprime
 
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...AliaaTarek5
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityIES VE
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfNeo4j
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfpanagenda
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rick Flair
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Strongerpanagenda
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demoHarshalMandlekar2
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsRavi Sanghani
 
Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfIngrid Airi González
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
Manual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditManual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditSkynet Technologies
 

Recently uploaded (20)

A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI Age
 
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a reality
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdf
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demo
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and Insights
 
Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdf
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
Manual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditManual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance Audit
 

A Node.js Developer's Guide to Bluemix

  • 1. NodeConf EU Workshop James M Snell <jasnell@us.ibm.com> <jasnell@gmail.com> A Node.js Developer's Guide to Bluemix
  • 3. James M Snell @jasnell on Github and Twitter IBM Technical Lead for Node.js TSC Member 3
  • 4. http://bluemix.net/ Sign up for Free Trial Account: http://ibm.co/1M05AMX (go ahead, it only takes a couple minutes) 4
  • 5. Node.js v0.12.7 or higher Bluemix supports Node.js v0.12.7 by default (If you want to use Node v4.0.0 locally, go for it.) 5
  • 6. 6 $ npm install –g bluemix-workshop $ bluemix-workshop (This is a nodeschool style workshopper that runs with a minimal UI.)
  • 7. 7
  • 8. What is Bluemix? The Five Minute or Less Introduction
  • 9. Bluemix is IBM's Platform-as-a- Service Offering. It's built on top of Cloud Foundry. It also uses Docker and OpenStack (but we're not covering those today) 9
  • 10. With Bluemix, you write applications and deploy ("push") them to the server. Bluemix manages the details – Provisioning VMs – Setting up the Containers – Routing, – Load-Balancing, – Scaling, – Configuring Services, etc 10
  • 11. 11
  • 12. 12
  • 13. 13 Bluemix can run in a Shared or Dedicated Environment
  • 15. "Buildpack" – a collection of scripts that prepare code for execution in Bluemix. …tells Bluemix how to set up the VM, Container and Runtime for your application to run. For Node.js applications deployed to Bluemix, the default Buildpack is "sdk-for-nodejs" 15
  • 17. You will interact with Bluemix using both the browser-based UI and the Cloud Foundry cf command line client. 17 Visit: https://github.com/cloudfoundry/cli/releases Once installed, cf will be added to your PATH. You may need to restart your terminal session to pick up the change. $ cf -version
  • 18. Setting the API Endpoint
  • 19. Once the cf command line tool is installed, you have to tell it about the Bluemix endpoint. 19 First, what region are you in? US South (`us-south`): https://api.ng.bluemix.net Europe United Kingdom (`eu-gb`): https://api.eu-gb.bluemix.net ✔
  • 20. Once the cf command line tool is installed, you have to tell it about the Bluemix endpoint. 20 Second, set the API endpoint and Login $ cf api https://api.eu-gb.bluemix.net $ cf login Enter your Bluemix User ID and Password to authenticate
  • 22. 22 $ mkdir helloworld && cd helloworld && npm init … name: (helloworld) version: (1.0.0) description: entry point: (index.js) test command: git repository: keywords: author: license: (ISC) … Is this ok? (yes) Remember what you choose here
  • 23. 23 $ vi index.js var http = require('http'); var server = http.createServer(function(req,res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World'); }); server.listen(8888, function() { console.log('The server is running'); });
  • 24. 24 $ vi package.json { "name": "helloworld", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "start": "node index" }, "author": "", "license": "ISC" } Add this part!
  • 25. 25 $ npm start > helloworld@1.0.0 start /Users/james/tmp/helloworld > node index The server is running
  • 27. 27 $ vi index.js var http = require('http'); var server = http.createServer(function(req,res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World'); }); server.listen( process.env.VCAP_APP_PORT || 8888, function() { console.log('The server is running'); } );
  • 28. 28 $ vi manifest.yml --- applications: - name: {yourappname} mem: 128M instances: 1 path: . host: {yourappname} Pick something unique for the application name http://{yourappname}.mybluemix.net
  • 29. 29 $ vi .cfignore node_modules $ ls –a .cfignore index.js package.json manifest.yml This tells cf not to upload your local node_modules, Bluemix will install them for you.
  • 34. Services are additional managed capabilities that can be added to an application. 34 $ cf marketplace $ cf marketplace –s rediscloud $ cf create-service rediscloud 30mb myrediscloud Creates an instance of the rediscloud service within your account.
  • 35. Services are additional managed capabilities that can be added to an application. 35 $ cf bind-service {yourappname} rediscloud $ npm install --save redis Attach the myrediscloud service instance to your application Add the redis client module to your application.
  • 36. 36 $ vi index.js var http = require('http'); var redis = require('redis'); var vcap_services = process.env.VCAP_SERVICES; var rediscloud_service = JSON.parse(vcap_services)["rediscloud"][0]; var credentials = rediscloud_service.credentials; var client = redis.createClient( credentials.port, credentials.hostname, {no_ready_check: true}); client.auth(credentials.password); client.on('connect', function() { console.log('Connected to Redis'); }); var server = http.createServer(function(req,res) { client.get('last-visit', function(err, reply) { res.writeHead(200, {'Content-Type': 'text/plain'}); client.set('last-visit', new Date().toISOString()); res.write('Last Visit: ' + reply + 'n'); res.end('Hello World'); }); }); server.listen(process.env.VCAP_APP_PORT || 8888, function() { console.log('The server is running'); });
  • 37. 37 $ vi index.js var http = require('http'); var redis = require('redis'); var vcap_services = process.env.VCAP_SERVICES; var rediscloud_service = JSON.parse(vcap_services)["rediscloud"][0]; var credentials = rediscloud_service.credentials; var client = redis.createClient( credentials.port, credentials.hostname, {no_ready_check: true}); client.auth(credentials.password); client.on('connect', function() { console.log('Connected to Redis'); }); var server = http.createServer(function(req,res) { client.get('last-visit', function(err, reply) { res.writeHead(200, {'Content-Type': 'text/plain'}); client.set('last-visit', new Date().toISOString()); res.write('Last Visit: ' + reply + 'n'); res.end('Hello World'); }); }); server.listen(process.env.VCAP_APP_PORT || 8888, function() { console.log('The server is running'); });
  • 38. 38 $ vi index.js var http = require('http'); var redis = require('redis'); var vcap_services = process.env.VCAP_SERVICES; var rediscloud_service = JSON.parse(vcap_services)["rediscloud"][0]; var credentials = rediscloud_service.credentials; var client = redis.createClient( credentials.port, credentials.hostname, {no_ready_check: true}); client.auth(credentials.password); client.on('connect', function() { console.log('Connected to Redis'); }); var server = http.createServer(function(req,res) { client.get('last-visit', function(err, reply) { res.writeHead(200, {'Content-Type': 'text/plain'}); client.set('last-visit', new Date().toISOString()); res.write('Last Visit: ' + reply + 'n'); res.end('Hello World'); }); }); server.listen(process.env.VCAP_APP_PORT || 8888, function() { console.log('The server is running'); });
  • 39. 39 $ vi index.js var http = require('http'); var redis = require('redis'); var vcap_services = process.env.VCAP_SERVICES; var rediscloud_service = JSON.parse(vcap_services)["rediscloud"][0]; var credentials = rediscloud_service.credentials; var client = redis.createClient( credentials.port, credentials.hostname, {no_ready_check: true}); client.auth(credentials.password); client.on('connect', function() { console.log('Connected to Redis'); }); var server = http.createServer(function(req,res) { client.get('last-visit', function(err, reply) { res.writeHead(200, {'Content-Type': 'text/plain'}); client.set('last-visit', new Date().toISOString()); res.write('Last Visit: ' + reply + 'n'); res.end('Hello World'); }); }); server.listen(process.env.VCAP_APP_PORT || 8888, function() { console.log('The server is running'); });
  • 40. 40 $ vi index.js var http = require('http'); var redis = require('redis'); var vcap_services = process.env.VCAP_SERVICES; var rediscloud_service = JSON.parse(vcap_services)["rediscloud"][0]; var credentials = rediscloud_service.credentials; var client = redis.createClient( credentials.port, credentials.hostname, {no_ready_check: true}); client.auth(credentials.password); client.on('connect', function() { console.log('Connected to Redis'); }); var server = http.createServer(function(req,res) { client.get('last-visit', function(err, reply) { res.writeHead(200, {'Content-Type': 'text/plain'}); client.set('last-visit', new Date().toISOString()); res.write('Last Visit: ' + reply + 'n'); res.end('Hello World'); }); }); server.listen(process.env.VCAP_APP_PORT || 8888, function() { console.log('The server is running'); });
  • 43. Bluemix uses environment variables to configure your application 43 VCAP_APP_PORT - The TCP Port VCAP_APP_HOST - The Hostname VCAP_SERVICES - *JSON* File with Service Details VCAP_APPLICATION - *JSON* file with Application details
  • 44. Bluemix uses environment variables to configure your application 44 VCAP_SERVICES: { "rediscloud": { "credentials": { ... }, "label": "rediscloud", "name": "myrediscloud", "plan": "30mb", ... } }
  • 45. Bluemix uses environment variables to configure your application 45 VCAP_APPLICATION: { "application_name": "snellworkshop", "application_urls": [ "snellworkshop.mybluemix.net" ], ... }
  • 46. Bluemix uses environment variables to configure your application 46 $ cf set-env {myappname} MYENVVAR value $ cf env {myappname} $ cf unset-env {myappname} MYENVVAR
  • 48. The Application Management Tools are additional utilities for debugging and managing applications 48 $ cf set-env {yourappname} BLUEMIX_APP_MGMT_ENABLE proxy+devconsole+shell+inspector+trace $ cf restage {yourappname} Enables: • a terminal shell for command line access to your application's container • a node-inspector instance • debug tracing using log4js, bunyan, etc
  • 52. You can enable tracing using log4js or bunyan 52 $ npm install --save log4js@0.6.22 $ vi index.js ... var log4js = require('log4js'); log4js.loadAppender('console'); var logger = log4js.getLogger('app'); logger.setLevel('ERROR'); ... logger.info('running...'); ...
  • 53. Set the trace level from within the Bluemix Dashboard… 53
  • 54. 54 Set the trace level from within the Bluemix Dashboard…
  • 55. Use cf logs to view the trace output 55 $ cf logs {yourappname} $ cf logs --recent {yourappname} Tails the logs to the console Prints the most recent logs
  • 56. Using an alternative buildpack (or, how to use newer versions of Node.js)
  • 57. The default Node.js Buildpack uses Node.js v0.12.7, which is good. But I want to use the new stuff. 57 The IBM Node.js Buildpack is based on the open source Cloud Foundry Node.js Buildpack. Nearly all Cloud Foundry Buildpacks can work on Bluemix out of the box.
  • 58. 58 The Heroku Node.js Buildpack: https://github.com/heroku/heroku-buildpack-nodejs.git Includes support for the latest Node.js/io.js Binaries
  • 59. You specify the alternate buildpack in the manifest.yml 59 $ vi manifest.yml --- applications: - name: {yourappname} mem: 128M instances: 1 path: . host: {yourappname} buildpack: https://github.com/heroku/heroku-buildpack- nodejs.git command: node app
  • 60. And tell package.json which version of the Node runtime to use 60 $ vi package.json { "name": "helloworld", "version": "1.0.0", "main": "./app.js", "scripts": { "start": "node app" }, ..., "engines": { "iojs" : "*" } }
  • 63. Bluemix supports User-Provided Services. 63 User Provided Services are essentially service configurations you provide. They are kept separate from your application so that they can be shared and managed just like the services provided by Bluemix itself. User Provided Services provide an excellent way of providing runtime configuration setting to your applications.
  • 64. For instance, suppose we need to configure a secret for our applications: 64 $ cf cups session-secret -p secret secret> this is the secret Creating user provided service session-secret in org jasnell / space dev as jasnell... $ cf bind-service {yourappname} session-secret $ cf restage
  • 65. 65 User-Provide Service properties are included in the VCAP_SERVICES environment variable, just like any other service.
  • 66. Using a Custom Domain Name
  • 67. Bluemix supports Custom Domain Names 67 By default, Bluemix will create a URL for your application automatically. This usually follows the pattern: http://{yourappname}.mybluemix.net But what if you want to use your own domain name?
  • 68. A few command line calls is all you need. 68 $ cf create-domain myorg example.org $ cf map-route {yourappname} example.org --n foo Then create a CNAME DNS record for your sub-domain: foo.example.org CNAME {yourappname.mybluemix.net} Once the DNS records propagate, your application will be available at: http://foo.example.org
  • 69. You can upload your SSL/TLS certificates via the dashboard: 69
  • 71. Updating an application on Bluemix will cause the application to restart, forcing a small downtime period. You can avoid it. 71 $ cf rename {yourappname} {youappname}-old $ cf push $ cf delete {yourappname}-old
  • 72. Resources: • Bluemix Documentation - https://www.ng.bluemix.net/docs • developerWorks - http://www.ibm.com/developerworks/cloud/bluemix /
  • 73. Q&A
  • 74. Thank you James M Snell jasnell@us.ibm.com jasnell@gmail.com twitter/github @jasnell