Suggestions for self-hosting Ghost

After about two weeks of playing with Ghost on the local machine and getting it to work in production, and learning its tech stack, here are my suggestions.

  1. If it is your goal to create content and make money from it, host your website with Ghost. Visit and click on Pricing. It may not be worth your time to maintain and upgrade Ghost and its tech stack (linux, nginx, nodejs, mysql, ghost cli) over the years.

  2. Only self-host if it’s part of your job and you intend to install multiple instances of Ghost. Otherwise, save yourself the headache, host with Ghost, and worry about the content. I’ve looked at their plans–if your traffic increases you can scale up.

  3. Ghost likes a clean install of nginx, without any existing server block. Nearly every tutorial is based on a clean install of nginx with no existing server block.

Also, if you’ve just made any changes to DNS records, then wait a few hours for the propagation to take place. The recommended wait time is 24 hours.You can check after a few hours with:

$ nslookup
$ dig +trace

Make sure the IP address matches the one provided by the VPS. Ghost production likes to use the domain name and not IP address.

  1. Non-www and www. Just choose non-www for your website and forget the www. The www can be a pain: additional ssl certificate, redirection, duplication. Using non-www and www can create four sets for the site:

Just use one domain: and have one A record. This will save you a lot of time. www is becoming a thing of the past anyway.

  1. If you already have a SSL certificate, then click “NO” to SSL setup during the installation. Then after the installation, run: $ ghost setup ssl . There’s no need for small or medium business to pay for a SSL certificate, since Let’s Encrypt offers it for free and it’s much easier to install and configure, especially with Ghost.

  2. If you’re trying to get Mailgun or another mail service to work and have issues, check with your VPS provider. I use Linode and after two days of fiddling around with the mail setup, I found that Linode blocks SMTP ports by default and a ticket has to made to request to open ports 25, 465, 587.

I’ll be glad to hear anyone else’s suggestions.


I found that Linode blocks SMTP ports by default and a ticket has to made to request to open ports 25, 465, 587

Do you know if DigitalOcean has the same problem and if the solution can be similar?
I don’t need Mailgun at the moment, just the simple email loop.

Not that I experienced early on.

1 Like

Could you explain, or point me to the documentation for, the “simple email loop”?

Hi! Maybe I’m late but here’s the link