Nachdem ich mit meinem Blog schon vor einer ganzen Weile von Uberspace 6 auf Uberspace 7 umgezogen bin, habe ich mittlerweile das Update-Skript für Uberspace 6, welches ich bereits vorgestellt hatte, so modifiziert, dass es auch für meine Uberspace 7-Instanz von Ghost funktioniert.

Alle im vorherigen Blogpost genannten Hinweise sind auch für diese Version des Skriptes gültig. Ich habe mich auch hier wieder an der Version von peleke.de orientiert und das Skript etwas verschönert sowie um eine Backup-Funktion ergänzt.

Ich gehe davon aus, dass ihr Ghost bereits auf einem Uberspace 7-Host mittels dieser Anleitung installiert habt. Wenn dem so ist, könnt ihr das folgende Skript in eurem Home-Verzeichnis abgelegen (zum Beispiel unter update-ghost.sh) und führt dieses bei Bedarf mittels sh update-ghost.sh aus.

Hier nun der Inhalt des Update-Skripts:

#!/bin/bash
#set -v
GHOSTDIR=~/ghost
PACKAGE_VERSION_OLD=$(sed -nE 's/^\s*"version": "(.*?)",$/\1/p' $GHOSTDIR/current/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 "👻 Verfügbare 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 Ghost-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 …"
		cd $GHOSTDIR/versions/
		curl -LOk $CURRENT_GHOST_DOWNLOAD
		unzip $GHOSTDIR/versions/$CURRENT_GHOST_FILE -d $CURRENT_GHOST
		rm $GHOSTDIR/versions/$CURRENT_GHOST_FILE
		echo "👻 Ghost wird jetzt aktualisiert …"
		cd $GHOSTDIR/versions/$CURRENT_GHOST
		npm install --production
		echo "👻 Die Datenbank von Ghost wird auf die neue Version migriert …"
		cd $GHOSTDIR
		NODE_ENV=production knex-migrator migrate --mgpath $GHOSTDIR/versions/$CURRENT_GHOST
		ln -sfn $GHOSTDIR/versions/$CURRENT_GHOST $GHOSTDIR/current
		PACKAGE_VERSION=$(sed -nE 's/^\s*"version": "(.*?)",$/\1/p' $GHOSTDIR/current/package.json)
		echo "✅ Ghost wurde erfolgreich von Version $PACKAGE_VERSION_OLD auf Version $PACKAGE_VERSION aktualisiert."
		echo "👻 Ghost wird jetzt neu gestartet. Dies kann kurz dauern …"
		supervisorctl restart ghost
		supervisorctl status
		echo "ℹ️ Falls Ghost nicht neu gestartet werden konnte, bitte Log überprüfen: supervisorctl tail ghost"
		echo "ℹ️ Zum Zurücksetzen auf Ghost $PACKAGE_VERSION_OLD folgenden Befehl ausführen: 'ln -sfn $GHOSTDIR/versions/$PACKAGE_VERSION_OLD $GHOSTDIR/current' und dann per 'supervisorctl restart ghost' neustarten"
	else
		echo "ℹ️ Ghost wurde nicht aktualisiert."
	fi
else
	echo "ℹ️  Ghost ist bereits auf dem aktuellen Stand, keine Aktualisierung notwendig."
fi 

Bei Fragen meldet euch (falls die Kommentarfunktion hier funktioniert) gern unterhalb dieses Posts oder auf Twitter.