Ghost 1.x - Aktualisierung bei Uberspace
Von Frederik, veröffentlicht am 02.08.2017Mittlerweile habe ich einen neuen Beitrag für Ghost 2.x und Uberspace 7 geschrieben.
Nachdem ich jetzt seit gut drei vier Jahren diesen Blog mit Ghost in der Version 0.x als CMS betreibe, wurde vor ein paar Tagen das neue Major Release 1.0 einiger Zeit das neue Major Release 2.0 veröffentlicht.
Mein absolut empfehlenswerter Hoster Uberspace hat bereits im Wiki eine aktualisierte Anleitung zur Installation erstellt und der Nutzer Ben eine praktische Hilfe zur Migration erstellt.
Da Ghost allerdings in den letzten Tagen mehrfach aktualisiert wurde und bei Uberspace die ghost-cli nicht genutzt werden kann, habe ich ein Script entwickelt, mit dem man ganz einfach per Shell Ghost aktualisieren und bei Bedarf sichern kann:
#!/bin/bash
#set -v
GHOSTDIR=~/node_apps/ghost
PACKAGE_VERSION_OLD=$(sed -nE 's/^\s*"version": "(.*?)",$/\1/p' $GHOSTDIR/package.json)
CURRENT_GHOST=$(curl -s https://api.github.com/repos/TryGhost/Ghost/releases | grep tag_name | head -n 1 | cut -d '"' -f 4)
CURRENT_GHOST_DOWNLOAD=$(curl -s https://api.github.com/repos/TryGhost/Ghost/releases/latest | grep browser_download_url | cut -d '"' -f 4)
CURRENT_GHOST_FILE=$(echo $CURRENT_GHOST_DOWNLOAD | sed 's:.*/::')
echo "Installierte Version von Ghost: $PACKAGE_VERSION_OLD"
echo " Verfuegbare Version von Ghost: $CURRENT_GHOST"
cd $GHOSTDIR
if [[ $CURRENT_GHOST != $PACKAGE_VERSION_OLD ]]
then
read -r -p "Soll Ghost jetzt von Version $PACKAGE_VERSION_OLD auf $CURRENT_GHOST aktualisiert werden? [J/n] " response
if [[ $response =~ ^([jJ][aA]|[jJ]|"")$ ]]
then
read -r -p "Soll ein Backup der bisherigen Instanz erstellt werden? [J/n] " response
if [[ $response =~ ^([jJ][aA]|[jJ]|"")$ ]]
then
echo "Backup von bisheriger Version unter $GHOSTDIR-$(date +%F@%T) wird erstellt..."
cp -r $GHOSTDIR $GHOSTDIR-$(date +%F@%T)
fi
echo "Ghost $CURRENT_GHOST wird heruntergeladen und entpackt..."
curl -LOk $CURRENT_GHOST_DOWNLOAD
unzip $GHOSTDIR/$CURRENT_GHOST_FILE -d ghost-latest
cp $GHOSTDIR/core/server/config/env/config.production.json $GHOSTDIR/ghost-latest/core/server/config/env/config.production.json
rm $GHOSTDIR/$CURRENT_GHOST_FILE
rm -rf $GHOSTDIR/core
rm -rf $GHOSTDIR/content/themes/casper
rm $GHOSTDIR/index.js
rm $GHOSTDIR/*.md
rsync -a --remove-source-files $GHOSTDIR/ghost-latest/* $GHOSTDIR
rm -rf $GHOSTDIR/ghost-latest
read -r -p "Cache loeschen vor Ghost-Aktualisierung (nicht noetig ab nodejs-8)? [j/N] " response
if [[ $response =~ ^([jJ][aA]|[jJ])$ ]]
then
echo "Cache wird geloescht und Ghost danach aktualisiert..."
rm -rf $GHOSTDIR/node_modules && npm cache clean --force && npm install --python="/usr/local/bin/python2.7" --production
else
echo "Ghost wird jetzt aktualisiert..."
npm install --python="/usr/local/bin/python2.7" --production
fi
echo "Die Datenbank von Ghost wird auf die neue Version migriert..."
NODE_ENV=production knex-migrator migrate
svc -du ~/service/ghost
PACKAGE_VERSION=$(sed -nE 's/^\s*"version": "(.*?)",$/\1/p' $GHOSTDIR/package.json)
echo "Ghost wurde von Version $PACKAGE_VERSION_OLD auf Version $PACKAGE_VERSION aktualisiert und wird neu gestartet. Dies kann ein paar Sekunden dauern..."
echo "Bei Fehlern Logfile ueberpruefen: 'tail -F ~/service/ghost/log/main/current'"
else
echo "-> Ghost wird nicht aktualisiert"
fi
else
echo "-> Ghost ist bereits auf dem aktuellen Stand, keine Aktualisierung notwendig"
fi
Einzig und allein Zeile 3 sollte angepasst werden und Ghost bereits als Dienst ghost eingerichtet sein.
Bei Fragen einfach melden!