My post on a Cloud Foundry AMI was with a simple Ruby application. In a comment Andrew Spyker asked about a node.js application. I’ve done Javascript but not node.js, so thought I’d give it a try. I followed my earlier instructions to get the CF Micro instance started and then starting with the ‘Use the Server’ I did something different.
Using the webserver example here, I created two files in a new directory. The first file, example.js, contained the following:
var http = require('http'); var port = parseInt(process.env.PORT,10); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World\n'); }).listen(port, '0.0.0.0'); console.log('Server running at http://0.0.0.0:' + port.toString() + '/');
The second file, package.json, contained the following:
{ "name": "http-server", "version": "0.0.1", "author": "James Foster <github@jgfoster.net>", "description": "webserver demo from http://nodejs.org/", "dependencies" : [ ], "engines": { "node": ">=0.10" } }
(Bear in mind that this is my first node.js application, and I just spent a hour or so poking around on the web to get this far.)
From the command line I’m able to run it by entering the following:
export PORT=1337; node example.js
With this I can open a web browser on http://localhost:1337/ and see the greeting.
To push my trivial application to my EC2 instance, I did the following:
cf target http://api.<my-ip>.xip.io
cf login --password mySecret admin
# okay to ignore CFoundry::InvalidRelation error in next command
# (see https://github.com/cloudfoundry/cf/issues/9)
cf create-space development
cf target --space development
cf map-domain --space development <my-ip>.xip.io
cf push --command "node example.js"
The interaction included giving the application a name (“hello”), accepting the defaults, and saving the configuration:
Name> hello
Instances> 1
1: 128M 2: 256M 3: 512M 4: 1G Memory Limit> 256M
Creating hello... OK
1: hello 2: none Subdomain> hello
1: 54.200.62.218.xip.io 2: none Domain> 54.200.62.218.xip.io
Binding hello.54.200.62.218.xip.io to hello... OK
Create services for application?> n
Save configuration?> y
Saving to manifest.yml... OK Uploading hello... OK Preparing to start hello... OK -----> Downloaded app package (4.0K) -----> Resolving engine versions Using Node.js version: 0.10.17 Using npm version: 1.2.30 -----> Fetching Node.js binaries -----> Vendoring node into slug -----> Installing dependencies with npm npm WARN package.json http-server@0.0.1 No repository field. npm WARN package.json http-server@0.0.1 No readme data. npm WARN package.json http-server@0.0.1 No repository field. npm WARN package.json http-server@0.0.1 No readme data. Dependencies installed -----> Building runtime environment -----> Uploading droplet (15M) Checking status of app 'hello'... 0 of 1 instances running (1 starting) 0 of 1 instances running (1 starting) 1 of 1 instances running (1 running) Push successful! App 'hello' available at http://hello.54.200.62.218.xip.io
When I went to the URL provided, I saw the greeting.
Leave a comment
Comments feed for this article