I’ve got a few node.js apps kicking around on my computer that I’ve been wanting to deploy for a while, but I’d never got around to it. Happily, I decided to try and deploy the asset-server.

Forever

Forever is a little tool by nodejitsu that starts node.js apps and makes sure they keep running, even if they crash. It’s pretty straightforward and seems to work reliably. It had a bunch of parameters for logging and restarting the server. I tried it out and it seems pretty good.

Git archive

I was looking for sam minnee article on deploying using git, but couldn’t find it, so instead I went for the easy answer:

git archive | gzip > bundle.tar.gz

AFAICT, this takes the current master branch and archives it up.

Bash magic!

So then I just needed a little bash scripts to create the bundle, scp it to my production server, untar it to /app/$ISODATE , symlink it in place, run npm install , then start and stop forever . This is the script I used:

#!/bin/sh git archive master | gzip > /tmp/asset-server.tar.gz scp /tmp/asset-server.tar.gz munich:~/builds/ RELEASE = ` date -u + "%Y-%m-%dT%H:%M:%SZ" ` ssh munich <<ENDS cd ~/apps/asset-server/current forever stop asset-server.js mkdir -p ~/apps/asset-server/$RELEASE cd ~/apps/asset-server/$RELEASE tar xvfz ~/builds/asset-server.tar.gz rm ~/apps/asset-server/current ln -s ~/apps/asset-server/$RELEASE ~/apps/asset-server/current mkdir -p ~/apps/asset-server/models mkdir -p ~/apps/asset-server/current/public ln -s ~/apps/asset-server/models ~/apps/asset-server/current/public/models cd ~/apps/asset-server/current npm install forever start -a -l asset-server.log asset-server.js ENDS echo " * Deploy complete"

It seems to work for now, it’s not ideal, but it’ll do.