Ghost 3 auf Uberspace 7 per Script aktualisieren

Von Frederik, veröffentlicht am 31.03.2019

Artikel ursprünglich für Ghost 2.x verfasst und jetzt auch erfolgreich mit Ghost 3.x getestet.

Vor zwei Jahren schrieb ich bereits einen Artikel dazu, wie man einfach per Skript die Blogging-Plattform Ghost von einer auf die nächste Version aktualisiert.

Mittlerweile gibt es statt Ghost 1.x / 2.x nun Version 3.x und Uberspace bietet auch eine komplett auf centOS 7 basierende neue Umgebung, "Uberspace 7".

Zeit also, um das Skript zu aktualisieren und somit für die Gegenwart und Zukunft fit zu machen, denn das Nutzen von ghost-cli zum Aktualisieren wird auch auf Uberspace 7 nicht unterstützt.

Zuerst folgt man dafür der Installationsanleitung aus dem UberLab 7.

Wenn dann alles läuft und der Zeitpunkt kommt, an dem man seine Ghost-Version aktualisieren möchte, kann man folgendes Skript dafür verwenden:

#!/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 " 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
		echo "Pruefe auf Aktualisierung von npm..."
		echo "Node.js version: $( node -v)" && echo "Bisherige npm version: $(npm -v)"
		npm install -g npm
		echo "Neue npm version: $(npm -v)"
		echo "Pruefe auf Aktualisierung von knex-migrator..."
		echo "Bisherige knex-migrator version: $(knex-migrator -v)"
		npm install -g knex-migrator
		echo "Neue knex-migrator version: $(knex-migrator -v)"
		echo "Pruefe auf Aktualisierung von yarn..."
		echo "Bisherige yarn version: $(yarn --version)"
		#curl --compressed -o- -L https://yarnpkg.com/install.sh | bash
		yarn set version latest
		echo "Neue yarn version: $(yarn --version)"
		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
		yarn 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 von Version $PACKAGE_VERSION_OLD auf Version $PACKAGE_VERSION aktualisiert und wird neu gestartet. Dies kann ein paar Sekunden dauern..."
		supervisorctl restart ghost
		supervisorctl status
		echo "Bei Fehlern Logfile ueberpruefen: 'supervisorctl tail ghost'"
		echo "Zum Zuruecksetzen auf Ghost $PACKAGE_VERSION_OLD folgenden Befehl ausfuehren: 'ln -sfn $GHOSTDIR/versions/$PACKAGE_VERSION_OLD $GHOSTDIR/current' und dann per 'supervisorctl restart ghost' neustarten"
	else
		echo "-> Ghost wird nicht aktualisiert"
	fi
else
	echo "-> Ghost ist bereits auf dem aktuellen Stand, keine Aktualisierung notwendig"
fi

Eventuell anpassen muss man dann nur noch die dritte Zeile zum Verzeichnis und das Skript per chmod +x ausführbar machen.

Falls etwas nicht geklappt haben sollte, kann man einfach per

ln -sfn $GHOSTDIR/versions/$PACKAGE_VERSION_OLD $GHOSTDIR/current

auf die vorherige Version zurücksetzen.

Ich hoffe, dass ich so einigen Leuten Zeit und Arbeit abnehmen kann und freue mich über Kommentare dazu.

Profilbild

Frederik

Mein Name ist Frederik Niedernolte, ich bin 37 Jahre jung und stamme gebürtig aus Detmold in NRW.
Ich bin Medien- und Wirtschaftspsychologe (tätig als Service Manager User Research), ausgebildeter Fachinformatiker und Hobbyfotograf.
In diesem Blog berichte ich über alles was mich bewegt, interessiert, fasziniert und präsentiere einige Fotos von mir.

Kommentare

Jetzt kommentieren ⬇️
Kommentare
  • Fabian Marcus  antwortete @ 07.09.2019 10:45

    Hat geklappt, vielen Dank!


    ↩️ antworten
  • Tmm antwortete @ 05.06.2020 10:50

    Vielen Dank für das Skript! Funktioniert super, aber wenn der letzte Release von einer älteren Version ist (2.x.x und nicht 3.x.x), wird versucht diese alte Version zu installieren. Gibt es da eine Möglichkeit das Skript entsprechend anzupassen, sodass nur nach neueren verfügbaren Versionen gesucht wird? :)


    ↩️ antworten
    • Frederik  antwortete @ 06.06.2020 10:50

      Hallo Tmm, danke für die Rückmeldung.
      Das geschilderte Problem hat zwei Gründe:
      Der erste liegt in meinem Script in der Zeile
      if [[ $CURRENT_GHOST != $PACKAGE_VERSION_OLD ]]
      Dort muss das “!=” durch ein “>” ausgetauscht werden (bereits hier auf der Seite vorgenommen).
      Der zweite Grund liegt an GitHub/dem Ghost-Team, da dort für die alte V2 ein Sicherheitsupdate eingespielt wurde und aufgrund des letzten Aktualisierungsdatums dies nun das letzte Release ist. Sobald ein neues 3.x Release veröffentlicht wird, sollte wieder alles funktionieren. Vielleicht finde ich aber auch vorher noch eine Möglichkeit im Script dies zu beheben.


      ↩️ antworten
      • Tmm antwortete @ 08.06.2020 10:55

        Vielen Dank für deine Antwort und vielen Dank für deine Mühen! :)
        Ja, dass ersetzen von “!=” durch “>” verhindert das “updaten” auf eine alte Version. Wenn sich da noch etwas automatisiertes findet, um immer das aktuellste Update aus der Release-Liste zu finden, wäre das natürlich super.


        ↩️ antworten
        • Frederik  antwortete @ 09.06.2020 10:55

          Sollte jetzt mit Release 3.19.0 wieder wie gehabt funktionieren. Vielleicht fällt mir für die Zukunft noch eine bessere Lösung ein.


          ↩️ antworten
Die eingegebene E-Mail-Adresse wird vor dem Speichern unwiderruflich verschlüsselt und dient nur zur Darstellung des Avatars. Mit dem Absenden stimmst du zu, dass die eingegebenen Daten gespeichert und in Form eines Kommentars dargestellt werden dürfen.