Ghost is a little empty without Email

Ghost is the go-to platform for independent publishing. However, its SaaS model is pushing its reliance on Email which is hurting self hosting.

A person wearing a sheet that looks like a ghost standing in an empty street
Photo by Tandem X Visuals / Unsplash

Ghost is the go-to platform for independent publishing. Setting up a blog is straightforward, whether on your own hardware (like this site), using a prebuilt image on Digital Ocean, or hosting it on Ghost's own SaaS. However, many open-source projects that branch into a SaaS model to generate revenue often experience a gradual shift away from prioritizing self-hosting.

Ghost is a powerful app for professional publishers to create, share, and grow a business around their content. It comes with modern tools to build a website, publish content, send newsletters & offer paid subscriptions to members.

Ghost's reliance on email is a large issue for self-hosting. Newsletters may be trending, but email integration poses difficulties for those who self-host, with no work arounds. Sure mailgun is integrated and cheap for now, but an open platform shouldn't rely so heavily on a closed system. Several features are hampered or non-functional without email integration. A notable example is the new recommendations feature. Despite being able to add recommendations in the admin dashboard, the button to display them on the site is doesn't work without email integrated. The button to view them has shows no user-facing errors or log entries to diagnose the issue, without the smtp configured it just does nothing.

Having used Ghost since 2018, I can affirm it's one of the best options available and I appreciate their commitment to an open web. This issue may not be intentional, but it underscores the risks of depending on a project that also has a lucrative SaaS component. Email integration is convenient for Ghost to provide at scale, so the needs of self-hosters who don't use email might not be a priority.

Email Setup

Setting up email was far from straighforward. I host this blog with docker compose on a server that is hiding behind a cloudflare proxy. Cloudflare is something I want to get away from, but dns and ssl scare me.

Here is the relevant part of the docker-compose.yml for setting up SMTP. Bulk delivery is setup in the ghost admin dashboard but that is super straighforward.

mail__transport: SMTP
mail__options__port: 587   
mail__options__secureConnection: false
mail__options__auth__user: [email protected]
mail__options__auth__pass: a_super_duper_strong_password

Now you might notice that I use mail.notes for the subdomain instead of just notes like the websites URL. This is because the Cloudflare proxy blocks SMTP but not bulk sending. This means that sending a newletter worked, but sending singular emails, like magic login links, didn't work. Again Ghost didn't really give me any tools to help me diagnose this. Add email to the list of things that scare me. So to get around this I created a new (sub?)subdomain that doesn't have the proxy enabled.

I don't claim that this is the correct resolution, but if you are hitting the same issues I did then maybe this will help.