I’ve been a big fan and user of WordPress for quite a few years now. I have a few personal websites that I self-host and they all use WordPress, installed on my own server. For this blog I didn’t want anything sophisticated – I just wanted to have something that I could host myself that allowed simple posts with some embedded photos / graphics. Good image support is important to me – the ability to easily resize and insert images, with good control of image position and text flow around the image. I had seen and tried Ghost before and decided to give it a try again for this blog.
I downloaded and installed v1.19.0 of Ghost. It was relatively easy to install. It comes with a good install script and configured Nginx and LetsEncrypt SSL correctly. The LetsEncrypt certificates were installed using a acme.sh script which I don’t really understand or use in the same way. All my other LetsEncrypt certificates were generated using the certbot-auto script. So I stripped out the certificates that had been installed by the Ghost install, and re-installed using the certbot-auto script so that the certificate configuration, location and renewal script would work the same way as my other existing certificates. This was just to keep consistency across all my websites. I’m sure that the standard LetsEncrypt SSL install would have worked fine.
The only problem I had was with the MySQL install. By default Ghost will use a file-based database called SQLite and I recommend that you use that. However, I optionally decided to use MySql for the install. The install script gives you that option but it didn’t work for me. I had to manually create the MySQL database and database user. But once I did that then I re-ran the install script and it continued the install.
How to manually create a MySql database and user:
$ mysql -u root -p
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5340 to server version: 3.23.54
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the buffer.
mysql> CREATE DATABASE databasename;
Query OK, 1 row affected (0.00 sec)
mysql> GRANT ALL PRIVILEGES ON databasename.* TO “username“@”localhost” IDENTIFIED BY “password“;
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)
I started using Ghost using the standard out of the box theme that comes with the install. Posts (or stories in Ghost terminology) are easy to create. It uses Markdown markup language which I hadn’t used much before, but it’s quick and easy to learn. The editor has a set of common formatting and styling buttons that you can apply to your post. This includes image uploading and insertion.For more sophisticated styling you can also use html.
Compared to WordPress it’s a lot simpler and more focused. You’d expect this. The project has aimed at keeping it simpler and it’s been around for a much shorter period than WordPress. However, for me, it lacked the ease of control that WordPress gives me. Yes, you can add your own CSS to do whatever you want, but I found fairly quickly that I was adding extra css for this and for that. In the end it came down to image handling – I wanted more control to easily resize and position images using the on-screen editing buttons. And this was missing for me.
As a simple blogging platform Ghost is great and if you have time to customise the CSS and themes to suit then you can get it to work exactly the way that you want. I was particularly impressed by the install scripting and even the uninstall “ghost uninstall” worked well.
I’m very used to WordPress, and like the control that it gives me out of the box. So swapping across to Ghost wasn’t going to be easy.
This blog now runs on WordPress 😉