I've just switched my blog over from WordPress to Ghost, a newer, more responsive, lighter platform. I've opted to start again from scratch rather than copy all the fragmented articles from when I first started blogging during my undergraduate years back in 2012.
The WordPress site wasn't as fast as I wanted it to be... site load times were averaging 750ms with Apache Bench. This was caused by a few factors, including the bloat of WordPress and the need to run an MySQL instance too. I had added a caching layer, but this didn't yield the improvements I wanted.
The new site running on Ghost is a lot more responsive. Median response times are down to 105ms. I've also ditched the MySQL back-end and opted for an sqlite database instead. This is handy as I only have one server running the site - if I need to scale up, I could sync this from a master.
To get Ghost running, I simply used a docker image that sits behind a reverse proxy running nginx. This allows me to serve other content from port 80 and force all traffic to use HTTPS. You can check out the reverse-proxy docker image I made here: https://github.com/j6mes/reverse-proxy
The site is just a simple docker-compose script which I can use to boot both services, setting the CERTS_DIR and CONTENT_DIR environment variables to mount the docker volume endpoints.
version: '3.1'
services:
ghost:
image: ghost
hostname: ghost
restart: always
environment:
url: https://jamesthorne.co.uk
volumes:
- $CONTENT_DIR:/var/lib/ghost/content
proxy:
image: j6mes/reverse-proxy
links:
- ghost
depends_on:
- ghost
ports:
- "80:80"
- "443:443"
restart: "always"
environment:
TARGET_URL: "ghost"
SERVER_NAME: "jamesthorne.co.uk"
TARGET_PORT: 2368
LISTEN_PORT: 80
LISTEN_PORT_SSL: 443
STATUS_IP: $STATUS_IP
volumes:
- $CERTS_DIR:/etc/nginx/certs
So this is all I needed to get the site up and running on my server, I guess now I need to start writing some higher quality blog posts.