Ghost Tips: My Experiences Running a Self-Hosted Newsletter
When I started , I had two primary motivations. First, I wanted to help out people who had a lot to contribute to the community but didn’t have time to keep up with the firehose of (very useful!) information in the community Discord, for example plugin developers. Second, I wanted to check out , which I heard about during a . I was never going to join Substack (I like controlling my own “branding” too much), but it seemed like a nice alternative to MailerLite, which was what I had settled on for my (which has since been rebranded to The Iceberg) but caps out at 1k subscribers for the free tier.
A bunch of people told me Ghost was great, super easy, so nice–but those people were using the managed hosting option, and at $9/mo for up to 1k members, it would be significantly more expensive than Mailerlite. Some other folks said they self-hosted it and it was great, but these are also the same people who think nothing of using git or or any other command line interface tool that I had never heard of six months ago. Self-hosting, though, would be cheaper than any other option if I ever had more than 1k subscribers, and for the Roundup that seemed likely.
I like saving money, though, and I figured if I ran into too much trouble somebody would help me, so I dove in. Here’s a compilation of what I learned, compiled for your reading pleasure and in hopes that it helps someone else out who has been thinking about trying out Ghost.
Step 1: Finding a Host
I spent a hilarious amount of time reaching out to various webhosts to do price comparisons and most regular web hosts don’t really do server hosting too. So the first thing to realize when deciding to go with Ghost is that you aren’t going to be able to use a normal webhost like GoDaddy or whatever, you need someone that will let you have a whole server thing.
Not many services have a one-click-install for Ghost, and of the ones that do, I prefer DigitalOcean. Most people I know use it, and it’s reasonably priced, and they have a nice little referral program that lets you have plenty of seed money to mess around with. will give you a $100 credit that you have 60 days to spend, which is more than enough time to figure out whether you like it.
Step 2: Setting Up
The big thing I didn’t know when I was setting up my ghost installation on DigitalOcean was that a digital ocean droplet is an entire server, not just a widget or app or program or whatever like I was used to from places like SiteGround, so I accidentally paid for two droplets (one for my wordpress site, one for my ghost blog) which
is totally unnecessary (less work but more money). At $6/mo (of free money) this isn’t a crisis, but nonetheless, I felt kind of silly (which in retrospect I shouldn’t have: you can’t use the one-click installer, you have to use a docker image, which I don’t know how to do).
I followed that, shockingly, was actually pretty good. The most fraught part is waiting for the DNS stuff to take effect, but that’s true whenever you’re doing anything with domain names, and since Digital Ocean doesn’t handle domain names for you, you’ll need to purchase one elsewhere and point it to your new server. I recommend mostly because it’s no frills, their customer service people are very patient, and they don’t try to sell you any unnecessary crap.
There were two main things that I don’t think that guide called enough attention to, though, probably because they assumed it was obvious. The number of times I have tried to follow a technical guide on the internet and run into trouble because of something that would have been obvious to a professional programmer but was very much not obvious to me (sudo bash commands are only for Linux, but sudo bash commands are being provided in Windows installation directions, wut? whyyyyy). Anyway:
In order to (resources & ) so that your ghost blog actually functions as a newsletter and not just a blog, you need root access to the
config.production.json (or, I don’t know, maybe you don’t, but this was the method I found and I needed help from my husband for this part) which is fine and dandy and you can do that through the , but you can also use a program called WinSCP to access the file system.
PS: For the command line tool, when you’re reloading your ghost installation (which you have to do a terrifying number of times, messing with live servers is terrifying, it’s my least favorite part of Ghost), you have to navigate to
var/www/ghost before you reload.
Also, if you run into trouble not being able to change the reply-to email address for your newsletter, double-check your .mx records and check the mailgun logs to see if your email is being suppressed.
Reaction to Setting Up
So, for context, I am a neophyte developer with one hacked together Obsidian theme and one plugin that a lot of people helped me with under my belt. I’ve technically got a ghost installation running on my local machine (more on that in a moment) and that’s a “developers-only” tool, so, sure, fine, we can call me a developer in the technical sense. But my day job is middle school teacher and my hobby is writing fiction; I’m not even an experienced hobbyist.
Rolling my own ghost blog was not easy, at least partially because it’s impossible to test most of the complicated parts on a development machine because it’s the mail settings that are tricky. Self-hosting WordPress is a breeze by comparison. I’m pretty sure that publishing a website using a static site generator like Hugo using git would have been easier. Digging through the mailgun documentation, figuring out the ghost CLI stuff, etc took me like three days of constant poking, and I never would have succeeded without my husband’s intervention at critical moments. If you’re a non-technical user just trying to run a newsletter that doesn’t make money, and you aren’t worried about customization, use Substack. If you object to Substack’s business model or ethics, check out . If you really, really want your newsletter emails to come from your own custom domain on the cheap, while also being able to control what it looks like, and want them to be available through RSS on the web, and it matters to you a lot that you can do paid subscriptions? Ghost is the best way to go.
But! It’s not easy. If I knew then what I knew now, I probably would have just gone with managed hosting via Midnight — it’s slightly more expensive than Ghost official managed hosting for the lower tiers but way cheaper for more subscribers and for tech support. Update: I wound up in a position where it actually makes sense to me to migrate to Ghost (Pro), since it’s roughly the same price as the Midnight price would be for me, and I prefer to have direct access to the development team for feature requests and stuff.
Though it often gets billed as a WordPress replacement, I think those claims are a little overblown. Ghost’s “managed hosting” is cheaper than WordPress’ technically, but only if you count “managed hosting” to mean literally hosted by WordPress.org. Hosts like Siteground will manage your WordPress installation for way cheaper (and still super easy) than $10/mo, and actually using “self-hosted” WordPress is so much easier than doing updates and such with self-hosted Ghost that anyone seriously evaluating whether to use WordPress or Ghost should not use Ghost’s evaluation chart.
When comparing self-hosted Ghost to self-hosted WordPress, WordPress comes out on top for blogging, in my opinion. There are way more free themes, the plugins are actually easy to use, there are more plugins and the plugins actually help you with SEO (the Yoast free tier is great) etc, and the search actually works out of the box. You don’t have to fight with APIs or read obscure documentation to do every little thing, and when you search for stuff online the answers you get are usually pretty straightforward.
But even aside from the technical difficulty stuff, the Ghost UI is lacking in some fairly shocking ways. The WordPress sidebar where I can set metadata like tags and schedule a post is always open. Ghost prefers to give me a “clean” writing interface (which, grr no, let me see the raw html please). Sure, okay fine, I guess some people write directly into their browser when they’re composing (I write all my newsletters in Obsidian, personally). But when I toggle open the sidebar in Ghost to assign tags and metadata I then can’t seem to scroll up or down on the post, which means I can’t skim my post to remind myself what my tags should be without toggling closed the sidebar, scrolling, re-opening the sidebar, navigating to the section I want… you get the idea. So what ends up happening is that I have my notetaking app where I wrote the newsletter open in one window, and then scroll it while assigning tags – which, by the way, I seem unable to navigate to the beginning of the list to insert tags there instead of at the end, which would be fine except a lot of themes seem to use the first tag to indicate category. Having to delete all of the tags I’ve assigned (I wasn’t able to copy them) and then re-type everything just because I wanted to insert one at the beginning isn’t fun. Update: They fixed this, and added an update that lets you edit some of the newsletter styling which was one of my other gripes. Honestly they’ve made a lot of changes in the last few months that have improved Ghost from where it was when I started using it.
But there have been some little things where I get frustrated at all the hype. I know it’s FOSS software and I can just submit a pull request or “fix it myself,” so I’m not trying to complain at the developers (don’t look a gift horse in the mouth! Ghost is a nonprofit company and deserves a lot of love), I just find it frustrating how it gets shilled as this amazing perfect modern thing. I think the company’s been around for almost a decade, but at one point when I was typing into the editor, my usual “undo” hotkey worked fine but “redo” didn’t, and boy howdy was that distracting.
Also: the WordPress dashboard is customizable and useful. I can get a nice overview of recent comments, draft right into an empty textbox, click to open my recent drafts, etc. Ghost currently gives me a chart of member signups and membership information, and a bunch of marketing articles that I can’t get rid of. It’s basically one big advertisement for the “correct” way to run a newsletter, with helpful examples that feel like product placements for things I don’t want. It also insists on telling me whether someone signed up or unsubscribed and what my growth is looking like. It’s depressing, honestly, even though I get that most people would find these things useful. I’m a weird edge case because I just want to write, not be beat over the head with metrics. You can dig into the code to get rid of it, but you would have to fix it every time you update, which is very annoying. I would much prefer to have a little “x” to clear the nagging lessons on branding that I don’t want to read.
A lot of people really do seem to love it, and with reason: it’s very good at being the thing it’s very good at.
It’s harder to use than than Substack or Buttondown and costs more–so why am I using it?
It lets me control everything, and that matters to me a lot. I wanted a custom domain and to edit the theme and an easy way for people to help me pay for the costs of running it.
Self-hosted ghost is pretty good at its one specific niche: being a highly customizable cheap newsletter solution for technically skilled users who want to own their own data, have paid memberships, a bunch of API options (do not make the mistake of confusing the “integrations” with plugins), and a clean interface that doesn’t let you get “bloated” but also isn’t going to hold your hand for things like keyword density or version control or anything really.
It’s not horrible or anything, I just feel like it’s a bit overhyped (and am moderately salty at all the people who call WordPress sites antiquated and imply that everyone should be using Ghost, etc.). I would not embark upon this path unless you are a developer, are very close with someone with a lot of development experience who will hold your hand.
Step 3: Local Development
If you’re planning to roll a self-hosted option on your local computer just to try it out (or, you know, play around with editing themes somewhere other than your live server environment that has to be restarted every time you want to look at your updated CSS), beware that the developer version is pretty limited. You can’t experiment with what the newsletters will look like because you need to be hooked up to mailgun before they’ll even let you preview a newsletter, for example. Also: the documentation currently says that it will work with NodeJS version 14.x.x but this is outdated: you actually need 14.17 – 14.15 didn’t work when I tried to do this, and I spent a fair amount of time banging my head against Google search results trying to figure out how to get npm to let me upgrade NodeJS before
I my husband realized that NodeJS can be upgraded on Windows with a one-click-install GUI option.
Anyway. It’s been a wild ride and I’m not sorry I did it, but a couple of people have asked me how using Ghost has been going for me and which guides I used to get it started, and I don’t want to give a false impression that it’s easy for nontechnical users to self-host just because my reputation in the Obsidian community is more on the academic side than the programmer side of things.