tl;dr - How did you configure this thing?

I've been kicking around the idea of a "professional" personal blog for some time. While I have other outlets for more questionable creative pursuits, I've never had a platform to talk about the things I do that actually pay the bills.

Of course, this led to an absurdly long period of evaluating technologies, reading support forums, and determining what it is I actually wanted to do here.

Eventually, I decided that I wanted something node.js based, purpose built for blogging, with the ability to serve up other pages - resume, project demos, fnords.

Why node.js? Because I don't like Ruby or PHP? Because I like working with JavaScript? Because all the cool kids are doing it? Why not?

So, I dug into the bookmarks, and saw Ghost. Perfect. Open source, largish community, lots of themes. Sign me up. Or rather download the code.

My only mental hurdle was the part about serving up other pages. My hosting provider for some of my other sites is a more standard shared hosting provider, with most management done through a cPanel interface. Other "one-click" ghost hosting providers had no real answer either. It took me an embarrasing amount of time to drop those dead ends and just go for a simple setup that I controlled end to end.

I found an inexpensive provider that allowed me to quickly setup up a simple stack with nginx proxying to Ghost. A few lines of configuration later and I had a directory to serve content out of that was outside of the Ghost system. It was a good reminder that when you find yourself spinning on a problem, remove all constraints and reduce it down to its simplest form.

For posterity, here's what I did to get up and running:

  • Created an account with Digital Ocean and created a droplet using the Ghost application template. There are some dead simple instructions you can follow.
  • Added the nginx configuration to serve up files outside of the Ghost world. I created a directory /var/www/vault, to hold the content, then edited /etc/nginx/sites-available/ghost. Above the location block, I added the following:
location ^~ /vault/ {  
    alias /var/www/vault/;
  • The last thing I wanted to do was to forward an existing link to my resume so above the code above I added
location = /resume.html {  
    return 301 /vault/resume/;

In the future, if I end up modifying the configuration I will document it here, but otherwise a fairly painless process once I got out of my own way.