So, I Decided to Migrate My Blog from GitHub Pages to a Self-Hosted Ghost Server
I started my blogging journey with GitHub Pages. It was super intuitive and easy to set up—so much so that I managed to publish my first post within an hour of getting started. But as I began thinking about expanding my blog—adding images, videos, maybe even integrating a newsletter—I realized GitHub Pages might not be the best fit for a more media-rich blogging experience. Sure, it’s possible to do those things, but it requires a bit more work than I was comfortable with at the time.

With some experience in building cloud infrastructure and a passion for PC building, I thought: why not host my own blog server?
Discovering Ghost
After some research, I came across Ghost, a sleek and modern blogging platform. Its focus on publishing and minimalism really stood out to me. It looked cool, felt intuitive, and most importantly—it seemed fun to self-host.

Getting My Hands Dirty
I decided to deploy Ghost using Docker Compose. Here's a quick rundown of what I did:
- Set up Ghost with Docker Compose
Super handy for managing containers, easy to configure, and great for running as a service. - Bought a domain and set it up on Cloudflare
I chose Cloudflare because it is reliable and packed with useful features.
But of course, things didn’t go as smoothly as I hoped.
The Painful Part
Let’s just say... I spent a week on trial and error. One of the biggest hurdles? Mailing configuration. I wanted to enable Ghost’s membership and newsletter features from the start. While I could’ve ignored them temporarily, I have this itch to fix things before moving on. I JUST WANT IT TO WORK! lol.

But after wrestling with DNS records, Cloudflare tunnel, SMTP configs, and Docker networking—I finally got everything up and running.
What’s Next?
Well, you’re reading this post now, so it means the blog is alive! In future post, I’ll walk through the exact steps I took to set everything up—from Docker Compose files to DNS setup and email configuration. Hopefully, it’ll help anyone trying to do the same (and maybe save you a few days of trial and error).
Stay tuned!