Ghost 4 (CMS) auf Uberspace aktualisieren
By Frederik, published at 19.03.2021Seit vielen Jahren setze ich hier im Blog auf Ghost als Blogging-Plattform und bin damit ziemlich zufrieden. Durch den modernen und minimalistischen Aufbau ist es schnell, unkompliziert und leicht anpassbar.
Da ich auch schon seit längerer Zeit auf Uberspace als Hoster vertraue, die eine Art semi-managed Server mit tollem Support und Preis-/Leistungsverhältnis anbieten, dafür aber keinen root-Zugriff ermöglichen, war es mir nie möglich Ghost auf die vorgesehene Art und Weise per Ghost-CLI zu aktualisieren.
Als Alternative gibt es für die erstmalige Installation diesen Guide im Uberlab und um Ghost regelmäßig zu aktualisieren habe ich ein Script geschrieben, was ich jetzt auch mit dem neuen Ghost 4 erfolgreich getestet habe (vorher Node.js auf Version 14 bringen mit uberspace tools version use node 14):
#!/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/latest | grep \"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)"
npm install -g yarn
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
dir=$(cd $GHOSTDIR/versions && ls -1rd */ | tail -n +4)
keep=$(cd $GHOSTDIR/versions && ls -1rd */ | head -3)
echo "Loesche alte Versionen" && echo $dir && echo "Behalte die letzten drei Versionen" && echo $keep
cd $GHOSTDIR/versions && ls -1rd */ | tail -n +4 | xargs rm -rf
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
Vor dem Update von Ghost 3.x auf 4.x sollte auf jeden Fall ein Backup erstellt und auf die letzte Version 3.42.5 (im Script folgende beiden Zeilen nutzen:)
CURRENT_GHOST=3.42.3
CURRENT_GHOST_DOWNLOAD=$"https://glare.now.sh/TryGhost/Ghost@3.x/Ghost"
aktualisiert werden.
Das Script beinhaltet ein automatisches Backup der letzten drei Versionen, auf die man einfach zurück wechseln kann.
Viel Erfolg beim Aktualisieren!