Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Bash script to upgrade your Ghost blog installation to the latest version
#!/bin/bash
# Make sure only root can run our script
if [[ ${EUID} -ne 0 ]]; then
echo "This script must be run as root" 1>&2
exit 1
fi
if [[ $# -eq 0 ]]; then
echo "Usage:"
echo " $0 <systemd|sysv>"
echo -e "\n systemd : use systemd/systemctl to stop/start services"
echo " sysv : use /etc/init.d syvs init system to stop/start services"
fi
GHOST_PARENT=/var/www
OLD_PWD=$(pwd)
case "$1" in
systemd)
INIT_START="sudo systemctl start ghost.service"
INIT_STOP ="sudo systemctl stop ghost.service"
;;
sysv)
INIT_START="sudo service ghost start"
INIT_STOP ="sudo service ghost stop"
;;
esac
cd ${GHOST_PARENT}
# Get current Ghost version
OLD_VERSION=$(node -pe "JSON.parse(require('fs').readFileSync('/dev/stdin').toString()).version" < ghost/package.json)
echo "Upgrading Ghost"
rm -fr ghost-latest
echo -n "Fetching ... "
curl -LOk https://ghost.org/zip/ghost-latest.zip > upgrade.log 2>&1 || exit
echo "Unzipping ..."
unzip ghost-latest.zip -d ghost-latest >> upgrade.log 2>&1 || exit
# Get new Ghost version
NEW_VERSION=$(node -pe "JSON.parse(require('fs').readFileSync('/dev/stdin').toString()).version" < ghost-latest/package.json)
echo "Upgrading from ${OLD_VERSION} to ${NEW_VERSION}. Please wait ..."
# Stop Ghost
${INIT_STOP}
# Backup the current version core files
mv -v ghost/core ghost-${OLD_VERSION}-core || exit
# Update with new files
cp -v ghost-latest/{*.js,*.json,*.md,LICENSE} ghost/ || exit
cp -R -v ghost-latest/core ghost/ || exit
cp -R -v ghost-latest/content/themes/casper ghost/content/themes || exit
cd ghost
# Update nodejs modules as required
npm install --production
# Fix permissions
chown -R ghost:www-data ./*
# Restart Ghost
${INIT_START}
cd ${OLD_PWD}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.