Over a million developers have joined DZone.

How to Deploy node.js Apps to AWS from Mac OS X(I)

DZone's Guide to

How to Deploy node.js Apps to AWS from Mac OS X(I)

· Cloud Zone
Free Resource

MongoDB Atlas is a database as a service that makes it easy to deploy, manage, and scale MongoDB. So you can focus on innovation, not operations. Brought to you in partnership with MongoDB.

After developing my first node.js app I decided to look where to host it. It had to be cheap and fast to deploy.

My first attempt was to deploy to heroku. It’s very very easy (if you’ve used git before… it could be the easiest thing you’ve ever done), but I think (and I tell that I only think because I didn’t finish deploying on it) is a little expensive. Every module you use have to be in its starter mode, or you have to pay for it.

So, after watching how many projects have successfully gone up with amazon web services, I decided to deploy on it. Maybe I’m wrong, but i think that for a small app, AWS could be cheaper than heroku (I’ll tell you after some months =) ).

Why am I writing this article? Maybe there’re some articles that refers to this… but I wanted to keep track of what I did in case I need it again.

First thing we have to do is to sign in AWS if you’ve not done before, and after that you must enter the AWS Management console and select EC2 (Virtuals servers in the cloud). You can click on the image to see it better.

After that you’ll be on the home page where you can do all the options available from EC2 like creating instances or key pairs

Now, we can launch our server instance to deploy our apps following the wizard. It’s very easy and on multiple AWS versions it’ll change, so I’m not uploading this images… but if you want to know I installed an Ubuntu 12.04 server.

After creating the server, you’ll have a key pair to connect via ssh (or however you want, but this is the way I’m doing here).

Once you have your keys, you can copy them into your .ssh folder: ~/.ssh, and give them the permissions to use it (i’m using a key pair called ubuntu.pem):

$ chmod 600 ubuntu.pem

To make the ssh connection you just have take the address to your server and connect typing your password. You can take the address from this page clicking on your instance (it’s the amazonaws’ string):

Now type the following, and you’ll be connected:

$ ssh -i .ssh/Ubuntu1204.pem root@address.amazonaws.com

After connecting to our AWS instance, we need to install git & node:

$ sudo apt-get update $ sudo apt-get install git-core curl build-essential $ sudo apt-get install openssl libssl-dev $ git clone https://github.com/joyent/node.git && cd node $ ./configure $ make $ sudo make install $ echo 'export NODE_PATH=/path_to/node' >> ~/.bashrc $ echo 'export PATH=$PATH:/path_to/node' >> ~/.bashrc $ source ~/.bashrc $ node -v

When all of this finish, we’ll get our node.js version and It’ll be installed (this will install last node version). To install another version, for example, 0.6.19, you need to checkout another branch before configuring:

$ git checkout v0.6.8

After this, you can run your own node js on amazon web services! but, for all node.js must be missing something: npm. This package manager makes all easier, and perhaps, you may have it on AWS too. So, to install it just do the following:

$ git clone http://github.com/isaacs/npm.git && cd npm/
$ make install

As always, you can install Express like this:

$ npm install -g express
Hope this helped!
In the next article I’ll show you how to use git to push your code to your AWS Server.

MongoDB Atlas is the best way to run MongoDB on AWS — highly secure by default, highly available, and fully elastic. Get started free. Brought to you in partnership with MongoDB.


Published at DZone with permission of Javier Manzano, DZone MVB. See the original article here.

Opinions expressed by DZone contributors are their own.


Dev Resources & Solutions Straight to Your Inbox

Thanks for subscribing!

Awesome! Check your inbox to verify your email so you can start receiving the latest in tech news and resources.


{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}