Updating Ghost on Digital Ocean/Ubuntu
Since I'm running a self-hosted version of Ghost I don't have the advantage of auto-updates (like I would if my site were hosted on Ghost.org). In general I like having more control over the install and I've learned a lot about Ghost and
nginx in the process but there are times I regret it.
This weekend was one of those times.
How it all started
Earlier in the week I was reading the Ghost Development Blog and realized my site was running Ghost 0.5.x, far behind the current 0.7.3 release. Included in the updates were many fixes, optimizations and a major UI upgrade.
Excited about the new version I decided to upgrade.
How to upgrade
Instead of walking you through every error and hiccup I encountered along the way I'm going to explain what eventually worked for me. The process below might help if you tried upgrading and are having any of the following issues:
502 Bad Gatewayerror after completing the upgraded
cannot run in wderror in
A few other specifics about my setup:
- I'm running Ghost with Nginx on Ubuntu (on Digital Ocean)
- My previous version was
0.5.x, and I upgraded to
Before starting you should definitely backup your site. There is at least one step where a typo could erase all your hard work. The easiest way to download a backup of your content is to login to the admin and go to Settings > Labs, then click the Export button. This will download a
json file of your posts, but not your assets.
For backing up assets and themes there are other options beyond the scope of this article.
Download and Upgrade
ssh into your server as root:
Before starting the upgrade you should stop the Ghost service:
service ghost stop
Now install the
apt-get install build-essential
Change the working directory to your web root. In my case
Get the latest Ghost release:
These next steps are critical and is what caused a good deal of issues for me. First we're going to remove the Ghost core files, then extract the files for the new release. The
-uo flag tells
unzip to extract newer versions of files and create new files where necessary. If you leave this out you'll be in a world of hurt.
rm -rf ghost/core
unzip -uo ghost-latest.zip -d ghost
Set the permissions on the files so the
ghost process has control:
chown -R ghost:ghost ghost/*
This next step might not be necessary in most cases, but it's something I did while trying to get things working. I cleaned my
npm cache, removed all
node_modules and reinstalled them.
npm cache clean
rm -rf node_modules
npm install --production
Go have a cold one, this could take a few minutes...
If during this process you see a
killed response in
npm you're probably running out of memory. On Digital Ocean you can increase your swap space following these instructions. After increasing the swap space rerun:
npm install --production
Now restart Ghost and Nginx:
service ghost start
service nginx restart
At this point you should be able be able to login to your site and see the updated admin to verify you're running the newest version.
Hopefully this saves others some headaches so you can continue to enjoy Ghost.