Recommended server specs

I found a couple of previous discussions about this, here and here, but they’re both from 2018 and the software has changed a lot in the interim. Also, the posts in those topics talk about swap memory, but now that DigitalOcean has switched to SSD storage they advise against enabling swap.

So: what are the recommended server specifications for running Ghost in production? I’m running the DigitalOcean 1-click app on their $6 option (1vCPU, 1GB memory) but I’ve found I need to reboot the server before running ghost upgrade to avoid getting the “not enough free memory” error. I also quite frequently get a ‘server load greater than 1.0’ message when I ssh into the droplet, and most worryingly, the server crashed earlier today in the middle of writing a post.

If I’m upgrading my server, what should I be going for? Is 2GB memory and 1vCPU likely to be enough, or will I need more than that?

I’ve been running my on an isolated Linode ($5 option) with the 1GB mem/ 1 vCPU with no issues for years. I’ve never seen load when writing a post get bad enough for the server to crash.

The only thing is those bulky npm installs which eat a solid amount of resources but those are only during upgrades so not too bad.

Are you getting an insane amount of concurrent hits and/or hosting many many blogs at once? Not sure why you are experiencing such strange issues unless your physical host is bugged.

I’m only hosting one blog, with 400ish posts and around 1500 subscribers. I don’t know what level of server load to expect from that, although obviously when people are opening newsletters with links to hosted images there will be a reasonable amount.

In the meantime I’ve set up nginx to bypass ghost for non-resized images (as shown in the last location block in this post), upgraded to a 4GB, 2vCPU droplet and am hoping it doesn’t tank again when the next newsletter goes out.

In the meantime I’ve set up nginx to bypass ghost for non-resized images

Resized images can also be served directly from nginx, you’ll want to use the try_files directive with a fallback to your proxy.

http://nginx.org/en/docs/http/ngx_http_core_module.html#try_files
https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/#proxy-everything

1 Like

Great tip, thank you very much. I’ve set that up and configured Ghost to use a Unix socket, which should hopefully give a performance boost.