How I run my WordPress site for (almost) free
I received an email last month telling me my hosting subscription is due to expire and I’ll need to renew it. Of course, my hosting provider also told me they’ll be nice and auto-renew my subscription, so I don’t lose my websites.
Even though it was a nice thing to do from their part, I disagreed. And I started looking for options.
When I started blogging last year, there were more than 400 million blogs online. Since I have an eye for these things, I could tell the blogging market is underserved and it’s the right moment to start blogging.
My early blogging days
Blogging is a complex endeavour, so if I was going to spend time (or lose it) writing, I wanted to make sure that at least the same amount of time will be spent (or lost) by other people reading what I write. Selfish, I know.
I read for a few days everything I could find about blogging. How to structure articles, how to promote them, all about SEO and all sorts of other tips and tricks. It turns out most of the blogs out there are writing about blogging, so there was plenty of information available. I skipped the thousands of paid courses that promised me they’ll make me a blogging expert and decided I’m ready to step out into the world and try it on my own.
After buying a domain with a silly name, as all normal names are somehow already taken, I started looking for a hosting provider.
Since, at the time, Siteground was offering free hosting for people that bring other people to their hosting platform, everybody was talking in flattering terms about them. Cheap hosting, glowing reviews. I knew most of the glowing reviews were caused by the affiliate links, but I figured some of the good things told about Siteground must have been true.
So, I created my Siteground account advertised as a 4 USD per month service.
To be fair, I’ve been relatively happy with Siteground’s service for the most part. I don’t run a high-profile website with high demands, and whenever I had an issue, their support was prompt and fixed it in minutes. Those guys are worth their weight in gold.
It took me a while to get used to the user interface from the 90s, but hey, retro is cool.
The advertised price is not the price you pay
What I didn’t really like was that the prices were not those advertised. The price shown was 4 USD per month, but the one paid was 56 EUR for a 1-year subscription. It included my country’s 19% VAT, but still, it was a bit more than advertised.
I also upgraded my service from the 3.95 Started Pack to the 5.95 Grow Big option. Again, this did cost a bit more than advertised, as I paid 32 EUR more for the upgrade. In return, I could host as many websites as I wanted, I had some extra caching options and could do backups whenever I wanted.
Anyway, it was still cheap, at around 8 EUR per month, so I wasn’t really upset about this. I could play around with more than one website and find out what I like more to write about.
Renewal fees leave you in tears
All was well and a year passed and my subscription approach renewal. The email I received saying my subscription is due to renewal also contained the cost for my 2nd-year subscription: 262 EUR. If I’d downgrade my subscription from Grow Big to Starter Pack, it would only cost me 142 EUR.
I could have delayed these costs if I paid last year for a 2-year subscription, but why would I do that with an untried hosting provider? I first had to see if I like it before I put more money into it.
Having to pay 140/260 EUR for my website hosting made me realize this could be a great opportunity. Meaning, I can invest time into searching for alternatives, and maybe save 100-200 EUR from this.
In a way, I would pay myself 100 EUR to find a cheaper/better option to Siteground.
I practised this way of thinking a lot in the past year. Whenever I booked a cheap flight with the worst seats, I was thinking that I actually paid myself 100 EUR to travel less comfortably for a few hours. Whenever I climbed up a mountain instead of taking the gondola like all tourists, I would think I paid myself 20 EUR to walk for half an hour. You get the idea.
Since I’m a cloud web developer, most of the solutions I thought about involved some cloud hosting. That’s how the Maslow’s hammer works: if the only tool you have is a hammer, it’s tempting to treat everything as if it were a nail.
Using a cloud solution has its advantages:
- Most cloud providers have data centres all over the world, so I can publish my website anywhere I want. I can even geo-replicate it and keep different copies in Europe, the US, Asia so the response times are fast
- I’m already familiar with them
- Many have free options that would fit perfectly a small website
So, I’ve started to do some test with Microsoft Azure, Google Cloud and Amazon AWS. These are the options I tried:
- 1-year of free services from Microsoft Azure
- Use one of my developer subscriptions I have on Microsoft Azure (for unlimited time)
- 1-year free credit from Google Cloud
- Cheap 3.5 USD option from Amazon AWS
Option 1. 12 months of free services from Microsoft Azure
This is a free Azure account anybody can create, and Microsoft will never charge you a dime.
It gives me 200 USD of credit in the first month to play around with, but this is irrelevant, as I don’t want to do a setup of my website every month.
What I’m interested about is the 12 months of free services, containing among other things, a free Linux virtual machine (with 1.75 GB RAM, 1 core processor and 10 GB storage).
I’m not really into PHP, Apache or WordPress installations but it doesn’t matter, because the web is full of tutorials made by people that already did this.
So, I’ve set up WordPress following this tutorial. Then I changed my domain settings to point to my Linux IP address. I needed to run my website on HTTPS, so I created a certificate with Let’s encrypt. Again, I used a tutorial on the web.
The only problem with this solution was that there was just too much manual work for a small website. It was interesting to do the setup one time, but I don’t want to repeat this next year.
So, I deleted everything and switched to option 2.
Option 2. Use one of my Microsoft Azure subscriptions
I have a few Azure subscriptions with free monthly credits ranging from 45 EUR to 140 EUR I can use for anything I want. I don’t pay money for them and were included with some tools my previous employers bought for me in the past 5 years. I don’t have those tools anymore, but I still have the cloud subscriptions. For some reason, Microsoft didn’t end the cloud subscriptions when the software licenses expired, and I don’t complain about it.
Anyway, I usually use my Azure credit on work-related projects. However, I could spare some of my credits and install WordPress and my small website on it.
Since now I’m in money and Azure has many options, I can install an existing image of WordPress with just a few clicks. A decent application service that can run my WordPress installation would cost 37 EUR per month, but I don’t care. It’s free money. And it takes me 3 minutes to have my website up and running, pointing to some old domain I have.
I still want to use HTTPS, but I’m not in the mood of scripting with Let’s encrypt, so I decide to buy a certificate.
Microsoft Azure already has an option for me. It only costs 59 EUR (paid in 4 tranches) to buy a certificate valid for 1 year. It’s a lot, but it’s still free money, so I don’t care, and I buy it.
This option was the easiest to set up – in less than 10 minutes. And the most expensive one.
You’d think if you pay so much money on a thing it will be super-fast, but it isn’t. My website needed sometimes almost 10 seconds to load a page.
This was because I needed to optimize it a bit. So, I did set up a caching plugin (free). I added Azure CDN (content delivery network) for a few cents a month to cache my pages and the website finally started to move a little better.
The first request, before the page was cached, was still slow as death, but I also had a solution for that. The WordPress version I’ve setup used an in-app slow version of the MySQL database. I did install Azure MySQL separately and pointed my website to it. It only added another 42 EUR per month to the total cost. Still free money.
By this point, I was using almost 100 EUR monthly of my Azure credit, but at least I got a decently responsive and fast version of a WordPress website. So, I needed 100 EUR on Azure to run a website that on other platforms costs 3.95 USD per month.
While this option was the easiest to set up and the easiest to maintain, it was by far the most expensive. I could think of many other better ways to use my Azure credits, so I deleted everything and moved to the next solution.
Option 3. Google Cloud
When you create a new account on Google Cloud you receive 300 USD credit that you can use in the first year however you want.
Google also has a ready-made WordPress image you can use. I clicked a few links, selected the cheapest virtual machine available, for 27 USD per month, and 5 minutes later I had a WordPress instance running.
With my 300 USD credit, I could run my website for free for 11 months. The virtual machine created had 10 GB SSD storage, 3.75 GB ram and 1 virtual processor. Not bad.
I still needed to do some settings before I had my website up and running. Set a static IP for my virtual machine, point my domain to it, use again let’s encrypt to create an SSL certificate.
The website ran decently fast, and I was pretty happy with it.
The only problem was the 27 USD cost per month. Even if for now it was free, in 11 months I’d need to:
- Either create a new google cloud account with another 300 USD free credit
- Find another hosting solution
While this has been fun, I could find better uses for my 300 USD credit, so I deleted everything and moved to option 4.
Option 4. Amazon Lightsail
I had to try Amazon AWS cloud as well. And I was not disappointed.
Amazon also has a ready-made WordPress image I could just click and install, named Amazon Lightsail. The price starts at 3.5 USD (for real), paid monthly. It gives me a virtual machine with 512 MB RAM, 1 virtual processor and 20 GB SSD storage.
I needed to do some work before I had a running website, but their wiki is full of tutorials. I had to create a DNS entry so my domain points to the right IP address, and I used this tutorial. Then again I had to use let’s encrypt to create a free SSL certificate, and I used this tutorial to do it.
While I ended up spending money on this option, it’s the one I like the most. It can be a long-term solution and it’s cheap enough that I don’t feel bad paying for it. It will end up costing me 42 EUR per year, a lot less than the 140 EUR Siteground was asking from me.
While I had to do some scripting here as well, all of it was copy+paste from their tutorials. It took me less than 30 minutes to do the entire setup and have a fully functioning website.
Now I also have nice graphs and stats about resource usage, I can do one-click backups, and more importantly, I get a decent user interface to work with, not the ugly cPanel hosting providers had in the last 15-20 years.
The nice thing about Amazon Lightsail is that it really does cost 3.5 USD per month. And they don’t even advertise it too much.
I can always upgrade my subscription to a higher tier if I need more resources, and the price is still decent.
The only thing I was missing from Siteground was a domain email address. Luckily, I found Zoho, and they offer 1 free email account, just enough for what I need.
For the extra caching of pages, I could still use Cloudflare, the CDN provider Siteground is relatively integrated with. Or, if I really want to get technical again, I could set up a proper CDN like Amazon Cloudfront or Azure CDN, for a decent price.
If you have a blog you care about, I don’t advise you to try this. I’m a professional and know what I’m doing 🙂
I don’t have anything against Siteground and I was relatively happy with their service. Since I like to debug my own problems, I’m ok with not using their support and fix them by myself, if this means I can save some money.
I played around, had some fun, and managed to save around 100 EUR. Siteground, farewell!