Ghost from the Machine

My last post explored the possibilities a platform like Amazon Web Services (AWS) affords a group like the one I've worked at for almost nine years. That post was a bit vague about specifics, so I'm going to narrate the particulars of getting an instance of the blogging application Ghost up and running through AWS.

To start, if I were installing Ghost on a Linux box it would push me into command line territory, which is usually the point at which my "eyes glaze once and that is death - impossible to feign." Given that, I'm fairly confident most (but certainly not all) faculty, students, and staff will feel similarly. AWS provides a realtively easy way to install an application like Ghost, which has unique server dependencies, by tapping into Amazon's marketplace of Community Images. These are searchable, virtualized packages that take care of all the server settings for a given application, enabling you to get up and running quickly and easily. One of the providers of these community images, Bitnami,  defines itself as follows:

Bitnami is a library of popular server applications and development environments that can be installed with one click, either in your laptop, in a virtual machine or hosted in the cloud. We take care of compiling and configuring the applications and all of their dependencies (third-party libraries, language runtimes, databases) so they work out-of-the-box>

And if you're coming to AWS from a LAMP environment like me, Bitnami might be compared to script installers like Fantastico, Simple Scripts, or the venerable Installatron, but for the cloud. They provide machine images across a number of applications for a number of server setups. You can look at Bitnami's stacks to get a sense of this.

Bitnami Stacks

Using the free tier of services Amazon offers new customers for the first year, I took the opportunity to start experimenting with the space. The AWS dashboard lists a whole bunch of  options, some of which I have no idea about. Again, if you are coming from a LAMP environment, this could be likened to cPanel's dashboard.

AWS Dashboard

I have only explored EC2 and S3 so far, and for the sake of this post I'll focus on EC2 dashboard and how to fire up a micro instance of Ghost. In the EC2 Dasbhoard (featured below) you get an overview of what's happening with your instances. And to be clear, each instance represents a particular server  you have running at a given time. For example, I have one instance of a Linux environment that is running the blogging application Ghost. The volume provides storage for the data being written to that instance, and Key Pair is the authentication encryption AWS uses for access. I'll talk about Elastic IPs and Security Groups in a bit.

EC2 Dashboard

One of the links off the EC2 dashboard points to AMIs, the Amazon Machine Images which provides various instances you can fire up pretty quickly. Below is a screenshot of how you can search the public images for an instance of the forum application Discourse. As you can see, several of the top results are the Bitnami images of Discourse. Select the one you want and click "Launch."

AMI search results for Discourse forum application.

From there you choose an instance, is it going to be a micro instance (which is what I use because it's part of the free tier), general purpose for medium load, general purpose for large load, etc. This is where you decide on server spces, i.e., small, medium, or large. And you can seamlessly scale across the spectrum depending on your needs.

AMI Instance Type (free tier #4life)

When I chose the  instance, I inadvertenly skipped over the configuration, storage, tag instance, and security group settings because  I just hit the "Review and Launch" button, but each of those might be worth looking into if you want to assign an persistent IP, point to different storage spaces, tag an instance, or, most importantly in my case, create a new security rule so that your instance can access port 80 and be accessible on the web--an important detail for a blogging platform :)

Configure Security Group

After that, review your instance and launch.

Review and Launch

You should now have an instance that has all your details, including your IP address and your public DNS (the public DNS is where you can find your instance on the web).

Launch Instance

At this point I have Ghost up and running, and my public DNS address is the following: I discovered that to access the admin area for Ghost you need to add /ghost to the end of the URL. I also realized that Bitnami has a predefined username and password for accessing their AWS Images, you can find the specifics for Ghost  here. They also provide a username for SSH/SFTP that may come in useful.

Details for the Bitnami Machine Image for Ghost offered through AWS

At this point I have my Ghost blog set up, and you can find it at

the bavaghost up and running, notice the convoluted public URL

The last thing for the purposes of this post, I wanted to map the convoluted public URL provided by AWS for this instance ( onto something simple. So, I used one of my favotite top level domains,, to create an A Record through cPanel where I have that domain pointing. I navigated to the Simple DNS Editor and added along with the IP address provided for that AWS instance and the domain was almost instantaneously mapped for me.

Adding A Record using Simple DNS Editor in cPanel so isntance of Ghost has a clean URL

After starting and stopping my instance of Ghost a couple of times, I realized the value of an Elastic IP address. For $1 /month you can get a persistent IP to associate with the instance(s) you create. This is useful because whatever instnace I have associated with this elastic IP will continue to resolve to this domain. Whether it's the Ghost application, or some other instance I spin up.

So, if you go to, you will see the fruits of my experimentation with AWS over the last two days. I'll be writing more about figuring out Ghost and how to FTP into the virtual instance---there is so much more to learn! But for now, this is more than enough. Just spending the time writing this helps me find the vocabulary to try and explain it all. Far from perfect, I know, but light years ahead of where I was just two days ago. Blogging #4life!