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.
If it is your goal to create content and make money from it, host your website with Ghost. Visit ghost.org 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.
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.
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:
Make sure the IP address matches the one provided by the VPS. Ghost production likes to use the domain name and not IP address.
- 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: mydomain.com and have one A record. This will save you a lot of time. www is becoming a thing of the past anyway.
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.
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.