Ghost Tips: My Experiences Running a Self-Hosted Newsletter

When I started the Obsidian Roundup, 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 Ghost, which I heard about during a period of controversy surrounding Substack. 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 Monday Morning Research Roundup (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 pandoc 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. This link 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 this step by step guide 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 set up mailgun (resources here & here) 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 ghost command line tool, 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 Buttondown. 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. 

The VS

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 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.

The Good

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.


Eleanor teaches Ancient Civilizations and spends the bits of time left over writing stories that bring history -- and magic -- to life. She enjoys rock climbing, bullet journaling, & gardening focused on plants you can actually eat.

You may also like...

9 Responses

  1. T.A.V says:

    Thank you so much Eleanor. This paints a very clear picture of what to expect.

    I took a step of upgrading from traditional hosting (siteground) to cloudway using Digital Ocean server last week. Your post inspired me to jump in, learn more technical stuff and go directly to Digital Ocean.

    I already a couple dozen websites (mine and my friends’) on wordpress, have invested in a lot of premium resources over the last decade and I’m very familiar with it, so I’ll stick with it for a little more. Ghost doesn’t seem like it’s worth the time for me atm.

    Now that you’re familiar with having your own server and subscribing to a mail service. You can also use a service like Mautic to send newsletters and not have to use ghost for that. I’ve heard this way is the cheapest and gives you most control. You’ll love it.

    • Eleanor says:

      I actually just moved this blog from Siteground to Digital Ocean this week. Getting the database migrated was a little tricky (plugins don’t get exported on a normal export and I had customized too many things I didn’t feel like doing over, lol) but I could have done it the manual way if I didn’t have my husband for help.

      I’ll check out Mautic, thanks for the tip!

  2. Sean Manning says:

    Is Ghost an email list tool or a web newsletter tool?

    The web interface for WordPress is making it harder and harder to work with the actual HTML too. I compose on my laptop so problems in the browser can’t delete a whole post, and now copying and pasting can cause problems. Is it easier if you have it installed?

    I was not impressed with Hugo’s accessibility. The documentation seem to assume that you are already very familiar with a family of newer tools like the Ruby programming language and git. I was looking for a way to wrap formatted text in ‘boilerplate’ headers and footers, and add links to the next and previous posts, from the archive and home page to the latest post, and so on. Right now, a shell script + pandoc are that way.

    • Eleanor says:

      I haven’t used Hugo to publish anything online, just on a local machine, but while I agree that git is pretty complicated (and know nothing of Ruby), Github Desktop is a decent GUI for the basics with Git so I imagine the initial setup is about roughly the same level of difficulty for a quasi-technical user (like you or I). The documentation for self-hosted Ghost definitely calls itself “for developers” and they aren’t kidding.

      I’m not sure what you mean by “email list tool” vs “web newsletter tool” but once you get ghost running on your server, there’s a GUI interface for writing a newsletter that will also post to the website so it can be picked up with RSS. It feels less like an email list and more like a “membership” where users can choose to enable email notifications of new posts, just with nicer formatting than WordPress subscriptions. It uses blocks like the new Gutenburg editor in WordPress, except a little worse in some ways and better in others. You can paste in raw markdown if you want and it will work, for example.

      There ARE ways to get related / next / previous posts with Ghost, but they aren’t obvious or easy, since there aren’t a ton of theme options and a lot of the recommended ones aren’t updated for Ghost 4.0 (even if you pay!) so to get any sort of customization on that end you’re going to need to edit the raw template files and probably mess around with css at a minimum.

      • Sean Manning says:

        Until last year, standard marketing advice was to create a mailing list and send out a newsletter or a small discount every so often to subscribers. People often use special tools that provide a “unsubscribe” link, the ability to sign up without work by the list owner, etc.

        The difference with Substack seems to be that it also creates a (sometimes password-protected) website for the newsletter, so you can view the newsletter as text in your email client or on a website with archives, comments forms, and so on. So “newsletter” can be email, or these blog-like things … I feel like it is a slightly confusing word! It sounds like Ghost is a substack-like tool.

        • Eleanor says:

          Yeah, Ghost is basically substack with a different pricing model and better / more customization options. I think it bills itself as a “WordPress alternative” mostly because that’s what it started out as ten years ago, but they’ve pivoted into the newsletter space with the success of substack and that’s … a much better niche for them, I think.

      • Sean Manning says:

        Actually, the Classical Association of Canada switched to the “web newsletter” model before Substack got its big lump of other people’s money! They just sent out a link to the webpage for each new newsletter, probably using a standard mailing list tool + a website builder

  3. This is a great write up, Eleanor! I’ve been curious about Ghost since the Substack controversy; I’ve was thinking about a newsletter for my blog, but haven’t been sure how it proceed or even if it’s something I need. I’m definitely a non-technical user, and having it all set out like that is realy helpful. Thanks for writing it!

Let me know what you think!