I've tried many different CMS systems in the past, WordPress, Drupal, Joomla. They all didn't look very modern and aren't optimized for speed, SEO and reliability. Oftentimes, these will even require plugins to be fully optimized.
Other options are often quite expensive while not providing the best of functionalities. In this article we'll take a look at Ghost CMS and how to easily set it up on AWS.
Ghost CMS is a blogging platform which allows writers to write posts in a clean, distraction-free interface. Have a look at how it looks like in the below screenshot.
It is very simple, yet efficient. Ghost features automatic Google AMP integration, which can give a nice boost to your website in terms of SEO. Furthermore, it is also very optimized in terms of speed! Let's take a look at the PageSpeed Insights for this website running Ghost. Ghost is obviously very optimized right out of the box.
A 92% score on Google's PageSpeed insights. If you are not familiar with this, it is a really amazing score and not easy to get at all. A lot of famous websites have a much lower page speed score.
Even better, this is while being hosted on an AWS T2 Nano EC2 instance! If you are not familiar with it, this is one of the cheapest, least powerful servers you can get from Amazon, and costs around 36EUR per year. All in all, very affordable, while having a quality software which optimizes your blog in the best ways possible for you to get more readers.
Convinced? Let's Set It Up!
Not only is this a very powerful blogging software, it is affordable, and also very easy to set up using AWS! First of all, you'll need an AWS account.
Note, in this section we will setup servers, which you will incur charges for on your AWS account. EC2 instances, load balancers and Route53 zones are not free.
Ghost is offered by Bitnami on the AWS Marketplace. That means, we can have a one-click setup of Ghost onto your AWS account. The marketplace item for Ghost can be found here. Follow the link and click Continue To Subscribe to set it up. Subscribe and then continue to Configure this software.
Leave all the settings to default. Make sure the region is set correctly. Every region has a different pricing on AWS. Choose a region nearby the center of your expected user-base. If you are expecting a lot of readers in Europe, eu-west- can be a good option. I personally like eu-west-1, also known as the Ireland region, since most of the AWS services are available there. Some other regions may be restricted in terms of services.
Do note, it says t3.small. A t3.small instance is expensive and too big just for starting up a new Ghost blog. After setting it up, let's reduce it to a T2 Nano instance, which is much cheaper but provides a great performance if you are just starting. Once you notice you have a lot of readers, and your blog starts growing, you might consider choosing a more powerful service at that time. Until that time, while the blog runs fast and smooth, there is no need to go above a T2.Nano.
A T3 or T4 Nano is actually preferred, since these are more recent versions, however, at the time of writing this article, the Ghost instance is not compatible with the T3.Nano option. This is most likely due to a configuration set by Bitnami in the marketplace.
Press on Continue Launch and leave all the settings blank or default. You will not need to change any of these, unless you know what you are doing and want to.
Finding Your Website URL
The first time launching, it will take some time for your server to initialize, so please be patient. Let's already take a look at what your website URL will be.
In AWS, browse to your EC2 instances, and find the Ghost instance.
The publicly accessible URL to your Ghost blog will be available in the Public IPv4 DNS field. On this URL, you will find your blog. To log in, visit your-ghost-blog/ghost/. There are different ways to find out the first admin username and password after installation.
Finding the Administrator Credentials
The easiest way I found to find the admin credentials, is to SSH onto the EC2 instance. For this, go back to the EC2 instances list in AWS. Select your instance and press the Actions -> Connect button. Click the SSH Client tab and follow the instructions. The username you need to use to connect to the EC2 instance through SSH is bitnami. Use it along with the private SSH key provided by AWS.
Once connected to your instance, enter the following command to find out the administrator credentials.
$ sudo cat /home/bitnami/bitnami_credentials Welcome to the Bitnami Ghost Stack ****************************************************************************** The default username and password is 'firstname.lastname@example.org' and '-redacted-'. ****************************************************************************** You can also use this password to access the databases and any other component the stack includes. Please refer to https://docs.bitnami.com/ for more details.
Reducing the Instance Size
We are now running a t3.small instance, which is quite expensive and over-powered for what we need. Let's reduce it to a t3 or t2 nano instance instead. Head over to your EC2 dashboard in AWS and select your instance again. Select Instance State -> Stop Instance.
Next, select your instance again, and press on Actions -> Instance Settings -> Change Instance Type.
You will find a list of instance types. Search for a t2, t3 or t4 nano. The higher the version the better, but it needs to be supported by the Ghost image provided by Bitnami. At the time of writing this article, this is only possible with a t2 nano.
Once complete, restart your instance in the same way you have stopped it. You will find your Ghost website to still be really fast, especially if you are just starting out.
Setting Up DNS Using Route53
We now have gotten the EC2 instance setup with Ghost, and you are able to login as an administrator. Great! Next we'll have to setup the DNS, so that you can use your own domain name instead of the very long public DNS from AWS. First of all, you should already own a domain name.
There are different ways to go about doing this. Do you have your own SSL certificate? Then you will have to manually configure this SSL certificate, into the EC2 instance by setting it up with a shell session on the machine.
Do you want to use the built-in Amazon SSL? Then you will be forced to set up a pricey load balancer. The load balancer starts at around 15 USD per month, even if it's only for setting up a certificate. It's a pity, but this is currently how Amazon works. The good news is, the load balancer can be re-used for up to 5 applications. Let's set up the load balancer.
Load Balancer Setup
Find the load balancers section of EC2, create a new load balancer. Select HTTP/HTTPS application load balancer. Make sure you setup a listener for HTTPS, like in the screenshot below.
Leave the accelerator unchecked, and select at least 2 availability zones of your choice, continue and create the load balancer.
Certificate Manager Setup
Next up, we need to create a free amazon SSL certificate for your domain. Go to Certificate Manager in AWS, also called ACM. Select Request a Certificate -> Request a Public Certificate -> Fill in your domain name.
Amazon will then request you to validate your domain name using DNS or other methods. Follow the instructions provided by Amazon to verify your domain. The easiest is to add a DNS entry on your domain name which let's Amazon know you are the owner of the domain. Leave this DNS entry, even after validation, do not remove it.
Setup the DNS in Route53
Finally, make sure your domain name is setup as a hosted zone in AWS. If not, select Create Hosted Zone, fill in your domain name and setup the DNS of your domain to point towards the 4-5 name servers AWS will give you.
Once complete, click on your hosted zone, select Create Record, and fill it in as shown in the screenshot. Make sure alias is checked, select Alias to an Application Load Balancer. Select the region of your EC2 instance and finally the name of your EC2 instance.
Create the record. You are now good to go! Visit your website at the chosen domain name, Ghost should appear. If not, try in incognito mode, or wait a bit longer until all the DNS changes have been propagated.
Ghost is a very modern Blogging/CMS platform with great optimizations for the web. Setting it up on AWS can be very affordable, while providing a great experience to both the authors and the readers.
Please note, I am in no way affiliated with Ghost, I am simply a big fan of their open-source product.