Ghost 1.x - Aktualisierung bei Uberspace

By Frederik, published at 02.08.2017

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!

Profilbild

Frederik

My name is Frederik Niedernolte, I am 36 years young and a native of Detmold in NRW.
I am a media and business psychologist (working as Service Manager User Research), trained IT specialist and hobby photographer.
In this blog I report about everything that moves me, interests me, fascinates me and present some photos of me.

Comments

Jetzt kommentieren ⬇️
Replies
  • Ich habe testweise eine Ghost Instanz auf einem neuen Uberspace, nach deren Anleitung im Wiki, angelegt. Das Skript hat es erfolgreich geschafft beim Update die Instanz komplett zu zerschießen. Mehr als ein “Service Temporarily Unavailable” blieb da nicht über. Zeile 3 war auf “GHOSTDIR=~/ghost” angepasst… Ebenso musste ich das “else” in Zeile 21 entfernen, da sonst das fi immer in einen Fehler lief. Sicher, dass das Skript problemlos funktionieren sollte?

    (11.08.2017 16:35)↩️ reply
    • Frederik 

      Ich habe mit dem Skript bereits mehrfach Ghost 1.x aktualisiert. Das “else” entferne ich mal aus dem obigen Snippet, danke dafür.
      “Service temporarily unavailable” ist bis zu einer Minute normal, da die Instanz komplett neugestartet wird. Ist denn ein Dienst mit dem Namen “ghost” bereits angelegt und kann erfolgreich per svc -du ~/service/ghost neugestartet werden?
      Was sagt das Log file (~/service/ghost/log/main/current)?

      (11.08.2017 22:35)↩️ reply
      • Hey, es war ein Update von 1.5.1, installiert nach Anweisung aus dem aktuellen uberspace wiki, auf 1.5.2. Allerdings fiel beim Update schon auf, dass das Datenbank Update nicht geglückt ist. Hier wurde die Config Datei mit den SQL Zugangsdaten nicht korrekt übernommen. Zwischenzeitlich kam auch eine Email, dass der Service nicht mehr korrekt funktioniert und der Dienst angehalten wurde…
        Der uberspace ist bereits gelöscht. Kann nachher aber gerne einen neuen anlegen und es reproduzieren. ;-)

        (11.08.2017 22:40)↩️ reply
  • Ich nehme alles zurück und behaupte das Gegenteil! Dein Script funktioniert, einwandfrei. Der Fehler liegt daran, dass im uberspace wiki aktuell nicht die config.production.json im ghost Verzeichnis angelegt wird, sondern man (wahnsinniger Weise) core/server/config/env/config.production.json bearbeitet. Ich habe dies, bei der Test Installation, blinder Weise, auch so getan. Und dies führte natürlich zu den Problemen, weil es auf einmal keine Config Datei mehr gibt… Mea Culpa…

    Ich schreibe uberspace gleich mal, dass die da das Wiki dringend korrigieren sollten. Einige Tage zuvor war die Angabe noch korrekt…

    (11.08.2017 10:05)↩️ reply
  • Es hat alles super geklappt, besten Dank für das Script!

    (30.09.2017 22:45)↩️ reply
  • Lothar 

    Nachdem ich das Script seit dem Wechsel auf Ghost 1.0 regelmäßig problemlos benutzen konnte (Danke!), gab es seit ein paar Versionen immer einen fatalen Fehler (im Log irgendwas für mich als node.js-Noob recht Unverständliches mit Permissions und/oder fehlender JS-Datei). Bin dann halt wieder auf die vorige Version zurück, es gab ja das automatische Backup (dito Danke).
    Jedenfalls: In dieser “puristischeren” Anleitung (https://dev.kampfq.eu/2017/… kommt ‘NODE_ENV=production knex-migrator migrate’ erst NACH ‘npm install —python=”/usr/local/bin/python2.7” —production’.
    Damit ging’s wieder wunderbar.

    BTW: Wann ist eigentlich “Cache loeschen vor Ghost-Aktualisierung” angeraten? (Wie gesagt, echt kein node.js-Experte…)

    (25.10.2017 10:15)↩️ reply
    • Frederik 

      Hallo Lothar, danke für Deinen Kommentar.
      Ich habe bisher keine Probleme mit dem oben veröffentlichten Script gehabt und die Reihenfolge nicht verändert.
      Nach der Einsicht in die Dokumentation ist es aber wohl in der Tat sinnvoll die Migration etwas nach hinten zu schieben, danke für den Hinweis!

      Cache löschen ist rein optional und nur selten nötig, um etwaige veraltete Module zu löschen und neu zu laden. Sollte dann auch so bei GitHub stehen.

      (25.10.2017 12:20)↩️ reply
  • Gute Arbeit! Mit dem Skript ist das Upgraden von Ghost unkompliziert und zuverlässig. Einziger Hinweis: Vielleicht die Statusmeldungen in englischer Sprache zu verfassen, damit auch nicht deutschsprachige Ghost-Benutzer auf Uberspace davon profitieren können. =)

    (09.11.2017 22:50)↩️ reply
    • Frederik 

      Danke sehr, freut mich.
      Da Uberspace selber bisher fast nur deutschsprachig auftritt, habe ich mich daran orientiert.
      Natürlich kann ich die Kommentare aber auch auf Englisch schreiben.

      (09.11.2017 23:50)↩️ reply
  • Habe dein Skript in der Vergangenheit schon mal benutzt, aber jetzt ist ja das 2.0 Upgrade, bzw. 2.x schon draußen. Kann ich da dein Skript drüber rennen lassen, ohne was kaputt zu schießen?
    Danke

    PS: Keine Ahnung warum als Absender google-9bb.. steht. Ich heiße jedenfalls Pawel. Danke dir

    (20.11.2018 22:55)↩️ reply
  • Manuel 

    Hi Frederik,
    besten Dank für dein Script! Ich benutze es schon eine ganze Weile und bin damit auch von Ghost 0.x auf 1.x gekommen.

    Heute wollte ich von 1.19 auf 2 wechseln, was mir aber nicht gelungen ist. Nachdem ich manuell auf 1.25.6 gewechselt bin, ist die Datenbankmigration zumindest wieder gelaufen, was aber blieb ist die Tatsache, dass sharp mit der dependency libvips auf Uberspace 6 nicht läuft. Hast du dieses Problem lösen können?

    Beste Grüße,
    Manuel

    (22.12.2018 09:50)↩️ reply
    • Hi Manuel, freut mich zu lesen.
      Ich habe auch das genannte Problem versucht zu lösen, allerdings erfolglos.
      Laut Uberspace Support ist das auch nur mit Uberspace 7 möglich.
      Trotzdem läuft Ghost 2.9 bei mir unter Uberspace 6, da libvips nur optional ist und nicht zwingend benötigt wird. Nur ein paar Bilderfähigkeiten werden dadurch nicht angeboten.

      (23.12.2018 09:55)↩️ reply
Your E-Mail address will be encrypted before saving the comment. It will only be used to display a gravatar. By submitting your data, you agree that all entered data may be saved and displayed as a comment.