I moved my blog from Wordpress to Ghost. It wasn’t as easy as I thought but was it worth it? I’ll let you decide!
I just spent an entire working week migrating moving my blog from Wordpress to Ghost - and it was an utter nightmare! So why did I bother? Well, firstly I didn’t expect it to be as difficult as it was. Secondly, I’d had enough of Wordpress. It was slow, and not an enjoyable writing experience for me. Will the migration be worth it? Too soon to say.
If you’re experiencing the same frustrations with Wordpress as me, or you’re considering Ghost to set up your blog, read this post and see if you think it’s worth the effort for you.
Let’s start with my Wordpress setup
I set up a blog with Wordpress in April 2020 shortly after the nation went into Lockdown from Coronavirus. I was working from home and no longer commuting 3.5hrs a day, so I figured a blog would be a good way of making use of that time I got back.
After some research, two names for setting up a blog kept cropping up: Wordpress and Bluehost. Wordpress would be the Content Management System (CMS) and Bluehost would host the website (i.e. keep the website and domain name live and running so people can access it). I found a discount through a website referral and jumped straight in with a new domain (www.hardeepnagra.com) and set up a site with said providers. It was a relatively cheap option, recommended, and I’d used Wordpress in the past so it’d feel familiar to me. Bluehost took care of all the set up too so I didn’t have to do anything other than start setting up how I wanted my site to function.
So what went wrong with Wordpress?
It was painfully slow, in every aspect. Loading the website page would take 8 seconds. In today’s age, that’s just unacceptable. Logging in to my dashboard was equally slow. Navigating different pages took forever to load. Everything just felt bogged down. I tried changing themes to the point where it had become so minimalistic that it just wasn’t visually pleasing. I deleted a bunch of plugins but that didn’t really improve matters.
The nail in the coffin for me was the block editor. Call me old fashioned, but I enjoy just being able to write, preferably in markdown, and not having to spend time with the formatting etc. I felt that the block editor created more work for me than not. I use the Ulysses app for my writing but have had issues with the formatting once I export it to Wordpress. I’m then left having to tweak it before I actually go live and publish the article. That makes one of the greatest features of Ulysses pointless - the ability to export and publish immediately and circumventing Wordpress in the process.
All of the above made managing a blog an unenjoyable process. As a result, I lost all motivation to write. So I began the search for a replacement setup. That’s when I came across Ghost.
Ghost is a CMS just like Wordpress but with blogging its main area of focus. It’s run by a non-profit organisation and is open source. You don’t need dozens of plugins or integrations - you just set it up, pick a theme if you want to, set up some pages, and start writing.
I came across it when Ali had tweeted that he was looking to change up his website. When I noticed how fast his website was, despite it having numerous pages and content, I was intrigued.
It ticks all the boxes for me:
- has beautiful themes that load ridiculously quick
- focuses on writing
- doesn’t require significant management once set up
- I can continue to use Ulysses as my main writing tool (it does use a block editor, but it feels less cumbersome than Wordpress)
The biggest downside seemed to be the cost. If you want to set up your blog via Ghost and have them manage everything from installation to daily backing up, it’ll cost you $29 a month for their basic package. This increases depending on the size of your site/business etc. For me personally, that’s a bit too high considering this is a passion project of mine and not something that delivers a side income.
After some Googling I discovered that there is a much cheaper way of using Ghost, which is to self-host and manage the site yourself. I have zero experience in web development but all the articles I had read about Ghost and DigitalOcean’s 1-click set up made it sound easy . Better still, it’d cost $5 per month, which was much more affordable for me than Ghost’s official option.
So I made the decision to go for it, and here’s what happened…
The 1-click setup that took many, many clicks
Step 1 - Purchase a domain
I followed a number of guides that all suggested Namecheap as the place to go for a domain name. I already have two domain names that are currently assigned to Wordpress - hardeepnagra.com and hardeepnagra.net. Rather than going through the pain of transferring these over, and thus having to wait for that to happen, I used this as an opportunity to purchase a domain name in line with my social media usernames - hardeepsnagra.com. It cost me around £8 and was ready to use immediately.
Step 2 - Set up the DigitalOcean 1-click droplet
I created a new account over at digitalocean.com and went to this page to start the setup process. Straight away I ran into a problem though. For authentication to access the droplet, it asks you to either create SSH keys or a one-time password. Not having an idea what SSH was, I opted for the latter. But for some reason, clicking the submit button to create the droplet just wouldn’t do anything. I refreshed the page, tried creating the droplet again, but nothing seemed to work. After around 5 attempts changing different variables each time, it only worked after selecting create SSH keys as the authentication method. I followed instructions to set up the SSH which indicated that all had gone to plan. So far so good.
The next step after creating the droplet was to add my domain and point the droplet to it by changing some of the DNS records over at Namecheap. The instructions were simple but for some reason I wasn’t able to get this part working. I just kept hitting an invalid URL wall every time I attempted to fix the issue. What wasn’t clear was that I needed to wait until the DNS had fully propagated (read as redirected). While every guide I read said it was usually done within minutes, I had to wait until the next morning before mine worked.
Step 3 - Set up Ghost Admin Panel
Once my DNS had fully propagated, I was able to install Ghost via the droplet and was taken to my admin page where I saw the default webpage for the first time. HOORAY!
Ghost Admin is straight-forward and a breath of fresh air compared to Wordpress. There’s minimal options which is better despite my love for tweaking the smallest of things. I set up various pages, was able to import my old articles from Wordpress, and then went on to setting up a new theme. I wanted something simple yet visually pleasing. After spending far too long browsing the various themes available, I settled on Joben by Bironthemes. It’s paid, but well worth it.
Step 4 - Set up an email service
Ghost recently launched its own member platform which allows the owner to build a customer base, issue newsletters, and offer tiered memberships. It’s a great way of earning income via your blog if you can get enough followers. They only have one partner that makes the handling of email simple - mailgun. They offer a free tier that supports 5000 emails a month (at the time of writing) so I signed up and set this up via the API in Ghost.
Remember that SSH key set up...
I created the above image on my iPad to use on my main blog page banner but after uploading it I was having issues with how it was resizing depending on window size and device. I reached out to the theme developer, Norbert, for help who was great at helping with the changes. But despite his instructions I wasn’t able to get things right, and had inadvertently created further issues along the way. To help fix the issue, I intended to give Norbert access to my site as an additional user. And this is where I ran into issues.
When trying to send the email to Norbert to give him access, I kept receiving an error stating that my email service provider settings were perhaps incorrect. After some Googling it seemed I had to access my config.production.json and add Mailgun’s SMTP details into it. Sounded simple enough.
I first tried accessing the Ghost CLI via my Mac Terminal (the commandline tool that helps you manage Ghost). The default username for Ghost is ‘Root’ and my password was one I created after first setting up SSH. The point of SSH is that it doesn’t require a password and is more secure. Except, I wasn’t able to login. I kept received an error about incorrect public keys in relation to the SSH. Not having a clue what this meant, I turned to my trusty friend Google for some answers.
The suggestion was to reset the password via DigitalOcean and to try and login again. That didn’t work. I tried logging in via the DigitalOcean console (basically the same as Terminal) but that didn’t work either. I tried re-creating the SSH key and that failed too. I was at this for two days straight, trying suggestions from a host of different forum posts from people who had experienced the same issue. After a few emails back and forth with DigitalOcean’s support team, I’d finally received instructions on how to reset my password via DigitalOcean’s recovery system. THIS was the only thing that worked.
I was able to login, amend the config with Mailgun’s SMTP details, and finally got Norbert set up as a user. He was able to fix my banner as well as the other issues I caused within the hour of being given access. And my site is now fully operational!
Was it all worth it?
The site is super fast, loading in less than a second vs. 8 seconds for my Wordpress site. It looks wonderful in my humble opinion. And I’m back to writing. So yes, despite the 1-click setup taking 5 days in total, I am happy with the outcome, and I learnt a few things along the way.