A couple of years ago, I started blogging (again). At first, having forgotten how I’d done this before, I went through a painful and confusing process of setting up on a hosting provider. Soon thereafter, tired of paying monthly fees and really hating the provider, I moved my blog over to Amazon Web Services. My blog has been based on AWS ever since, and I generally think most people like me – those with small-scale, personal blog projects – should do this too.
More people should blog. Yes, that includes you. I hold the opinion that the slow decline of blogging, in lieu of social media, is a net-negative for the internet. This is something of a grumpy-old-man opinion, but I’m sticking to it. Blogging is good for the internet. And if you write online, you should own your own platform. That means eschewing long-form Facebook posts and Medium in lieu of a site and domain that you own. This is 10x as true for people wishing to establish personal brands or platforms of their own. I run in a lot of creative writing communities online, in which this is a very overt goal many aspiring authors share.
For most of these people, I believe that AWS is one of their best options for setting up a blog and domain that they own. In this post, I’m going to break down a step-by-step guide to setting that up.
There are a bunch of reasons why I think AWS is a great option, but they mostly come down to price and reliability.
AWS is the webscale standard for cloud infrastructure. Other providers like Azure, GCP, DigitalOcean, etc. are certainly capable of hosting your blog too, but I haven’t done it there, so I’m not covering that. There’s a big difference between cloud infrastructure services like these and basic hosting providers like Squarespace and Wix. Providers like those are fine. They’re a little more expensive, but not by much – the difference is just a few dollars a month. Those companies are strongly oriented towards small ecommerce sites, which ain’t me.
There are also static page providers that are basically free – Github Pages is one good example. If you’re handy with Jekyll, you can hack together a kinda-sorta blog solution. But it’s not really a full-fledged content management system (CMS) like WordPress, which is what I or most bloggers want.
So what ARE the costs, you ask? All-in, my blog costs me about $11 bucks a month. When I’ve had huge surges of visitor traffic (on the order of tens of thousands/day) in the past, the cost went up about a dollar. There are even cheaper options, too (see below). Basic plans for Squarespace/Wix will generally cost you a few bucks more, but the cost difference isn’t big, as long as you don’t let them upsell you on a bunch of stuff you don’t need.
That said, AWS is certainly more reliable. It’s (probably) never going to go down. I also have more confidence in its security. Squarespace and Wix will very likely get bought/sold to another company one day and do not have the kind of security on their platforms that AWS does. This may or may not be a consideration for you when it comes to a personal blog, but one of the things that I think about is: which platform is likely to still be around in ten years? AWS definitely will be; the hosting providers, I kind of doubt it.
For the AWS-specific sections of this, I basically used the directions in these (1) two (2) AWS tutorials on the subject. I found those articles very useful, but not sufficient. The problem is that you need to connect multiple steps in your setup, which is what I’ll cover here.
I should mention that there’s also more than one way to do this! AWS now has a product called LightSail that is even lighter-weight and cheaper. If you want, you can just skip the AWS parts here and substitute in this WordPress on LightSail tutorial instead. Go bananas. I’m just going to cover what I do for now.
Step One: Buy a domain
Most non-dictionary name domains are cheap. Mine cost twelve bucks. You can, of course, buy a domain through Amazon (Route 53), but I just got mine from Google Domains. Getting that .me ending (they’re actually called Top-Level Domains, or TLDs, but endings works) made the process even easier. It doesn’t make any real difference.
You own a domain now! Really, you’re sort of renting it – you have to renew it each year – but what this means is that (except for unusual circumstances) no one can arbitrarily take it away from you. You own a little piece of the internet. Good on you.
You’re gonna fiddle with the domain settings here in a bit, but for now, don’t worry about it.
Step Two: Set up an EC2 instance
Non-tech people might get leery about this, but don’t worry – it’s actually really easy. What you’re literally doing here is setting up a tiny virtual server that will host your blog.
Go to the AWS console (aws.amazon.com). You might have to set up an account. Again, nothing fancy.
Then, you’re going to land in the Management Console. Open the Services tab above and find EC2 under Compute. Click on it.
Now, you’re about to launch an instance. But hang on! You can do something fun first.
Where do you want your new blog to be based? By default, it’ll be located in the AWS datacenter in Northern Virginia. But it’s just as simple to locate it in Ohio, Oregon, or somewhere overseas – Frankfurt, Mumbai, Tokyo, whatever. It doesn’t really matter, and it might take your blog a few milliseconds longer to load if it’s based on the other side of the world. But if you want to “put it” somewhere else, click up in the top-right where it says “N.Virginia” and choose a different location. Everything is the same.
From this point, follow Steps 1-3 of this tutorial. This is going to take you through some basic configuration of your EC2 instance and get WordPress set up.
Step Three: Get an IP address
Now, you need to get an IP address.
That “Public IP address” you got in step 2-h above will work for now, but it’ll be released if/when your instance is dormant for some period of time. Then no one will be able to find your blog! IP addresses are a finite resource, so you have to sign up for one.
But getting a permanent IP is easy. Step 1 in this tutorial shows you how. (Don’t go on to Step 2.) Once your new Elastic IP is set up and working, go on.
Step Four: Configure your domain
So here’s where we break away from the AWS tutorials. If you registered your domain with Google Domains, go back there and click on “Manage” to go to your domain overview menu.
On the lefthand menu bar, click on DNS. You’ll see a bunch of stuff about Name servers – don’t mess with that. Instead, scroll down until you see the section on Synthetic records.
You want your domain to work whether someone types in “ABCD.com” or “www.ABCD.com”. Most people don’t see a difference, but there actually is one – “www” is a subdomain. You can solve this with a CNAME record. What you need to do is enter this information in the Subdomain forward fields:
This will forward all traffic to www.yoursite.com to http://yoursite.com. (Obviously, substitute your site’s address for mine, unless you want to send all your visitors to my blog.)
Toggle “Forward path” and “Disable SSL” too. If you are accepting stuff like logins/passwords, or certainly ecommerce, then you’re definitely going to need an SSL certificate. But that’s not really necessary just for your blog. Then hit “Save.” That’s going to create a new CNAME record on your domain to send all your traffic to the right destination.
Next – your domain still isn’t hooked up to that WordPress instance you set up. We’re going to do that now.
Right after the Synthetic Records section is the Custom Resource Records section. Here, you’re going to go mostly with the defaults: “@” in the first field (“Name”), “A” for Type (type of record), 1H for the TTL (Time To Live), and in the “IPv4 Address” field, that’s where you copy in that neat Elastic IP you got back in Step Three. Then hit Add.
Boom! You just added what’s called an “A-level record” on your domain that sends all traffic to that IP address – which is WordPress running in your very own EC2 instance. Hottt.
(It might take a little while for that new A record to populate across the internet. As they say, give it a second – it’s going to space! If it isn’t working in an hour (your TTL!) or so, try inputting a shorter span, like “5m”.
Step Five: Annoying details
Of course, there are annoying details to deal with. This is the internet, after all!
First – you should change the administrator password in WordPress. This is just good practice. Make it a strong password. Randoms will try to hack/guess/compromise this.
Second – you need to choose a new WordPress theme for your site. There are literally thousands to choose from, and if you love designing stuff and fiddling with layouts, you’ll have a ball. Just google “wordpress themes” and prepare to be amazed. I hated this part and just picked the cleanest-looking theme I could find.
Third – when you log into your WordPress admin console (yoursite.com/admin), you’ll notice the little Bitnami banner icon in the bottom right-hand corner. I found that really annoying. Here’s how you remove it. You’ll need to use the command line to SSH into your EC2 instance, for which you’ll need to generate a key pair. That was covered in step 2-f here. Don’t worry – it’s not hard. (Just, again, annoying.)
And… that’s pretty much it!
What comes next?
Some optional, but popular, next steps are to set up stuff like Google Analytics, a Mailchimp signup (if you do newsletters) and experiment and then delete about 20 wordpress themes before you find one you like. Oh, and don’t forget to write something interesting, too. Those first two items can be accomplished through WordPress Plugins. Just set them up in WordPress and then connect them to accounts you’ll need to create on both services. Personally, I have found WordPress’s web analytics to be totally useless, so Google Analytics in particular is important.
The good news is that now that you’ve done all this stuff, you’re good to go. Your blog is pretty hands-off from here on out, with the obvious exception of content you get to add to it. Enjoy your little corner of the internet. I certainly do.