Upgrading your self hosted Ghost blog platform

I've been running Ghost for quite a while now and have found it to be a great platform for my occasional blogging. It now time to upgrade to the lastest available version as I have been running the initial version since release. Below are the steps required to complete this upgrade process on a Linux self hosted Ghost install (Debian).

Back up existing content

Our first step is to ensure that we back up all our existing content, which turns out to be a pretty simple task due to how Ghost stores content. You can also use a point and click backup via the ghost admin UI which is explained here but I prefer to do it at the command line and will script and automate it in a later post.

Before backing up you must stop our Ghost server in order to avoid issues whilst taking your back up.

I use the the Forever node package to run Ghost as a daemon, as explained here, so stopping Ghost is done via Forever:

# su ghost
# cd /var/www/ghost/blog.apericore/htdocs
# forever stop index.js

I've installed Ghost to /var/www/ghost/blog.apericore/htdocs so you can replace that with your own location.

Now that Ghost is stopped we can go ahead with the content backup which is a simple copy of the content directory under the root Ghost install directory above:

# sudo tar -cvpzf /var/backups/ghost-backup-20140711.tar.gz content/

Upgrade to latest version of Ghost

We now have a back up of our content so can continue with the upgrade confident that we can recover from any problems during the upgrade!

Grab the latest version of Ghost:

# mkdir /tmp/ghost
# cd /tmp/ghost
# wget https://ghost.org/zip/ghost-0.4.2.zip --no-check-certificate
# unzip ghost-0.4.2.zip

Upgrading the software now involves copying and replacing some files as explained in the Ghost upgrade documentation. Below are the commands I used (remember I am currently in the /tmp/ghost directory and my ghost installation root is /var/www/ghost/blog.apericore/htdocs):

# cp *.js *.json *.md LICENSE /var/www/ghost/blog.apericore/htdocs/
# rm -rf /var/www/ghost/blog.apericore/htdocs/core/
# cp -R core /var/www/ghost/blog.apericore/htdocs/core/
# cp -R content/themes/casper /var/www/ghost/blog.apericore/htdocs/content/themes/
# cd /var/www/ghost/blog.apericore/htdocs/
# su
# npm install —production

The latest version of Ghost is now installed and we can restart the service:

# su ghost # NODE_ENV=production forever start index.js

I'll follow up with a post about the new features and improvements.

* Update Jan 2017 - I've now moved to using Ghosts hosted platform rather than running it myself. So far its been excellent and well worth the fee.