Script di aggiornamento per Ghost su CentOS

Ghost è una piattaforma di blogging che mi ha preso veramente molto. Potete trovare tutto quello che penso su questo prodotto cercando il tag Ghost.

Personalmente utilizzo un'installazione self-hosted di Ghost sotto VPS DigitalOcean ed ovviamente le operazioni di manutenzione e aggiornamento sono delegate all'utente. L'operazione di aggiornamento di Ghost non è complicata, e porta via in generale 10-15 minuti per ogni nuova release. Da bravo sistemista però bisogna cercare di automatizzare il più possibile tutte le operazioni ripetitive.

Uno dei primi problemi da risolvere in un'installazione self-hosted di Ghost è il problema dell'autostart. Quale metodo utilizzare per far in modo che node avvii l'applicazione. Ce ne sono tanti, io personalmente ho preferito utilizzare uno startup scrip. Lo ho trovato cercando su Google "startup script for ghost". Non sarà una soluzione molto elegante ma funziona!
Lo script va inserito nella cartella /etc/init:

#/etc/init/ghost.conf
description "blog.virho.it"
author      "Andrea Giacomin"

start on runlevel [2345]
stop on shutdown
respawn

script
 export HOME="/root"
 echo $$ > /var/run/ghost.pid
 cd 
 exec /usr/bin/node /usr/bin/npm start --production >> /dev/null 2>&1 #for logging var/log/testjs.log 2>&1
end script

pre-start script
 # Date format same as (new Date()).toISOString() for consistency
 #echo "[`date -u +%Y-%m-%dT%T.%3NZ`] (sys) Starting" >> /var/log/testjs.log
end script

pre-stop script
 rm /var/run/ghost.pid
 #echo "[`date -u +%Y-%m-%dT%T.%3NZ`] (sys) Stopping" >> /var/log/testjs.log
end script

NOTA: bisogna editare il parametro !

Possiamo usare i comandi initctl start/stop ghost per avviare il servizio o meno. Se qualcuno ha uno script più decente lo posti tranquillamente, almeno togliamo questo obbrobrio!

Per lo script di aggiornamento sono partito come base da quello sviluppato da Andy Boutte e David Balderston per l'installazione one-click di Ghost su DigitalOcean. Lo ho adattato e ampliato a seconda delle mie esigenze! Nel mio caso l'OS è CentOs 6.5 e il webserver nginx.

Come dipendenze sono necessari git e wget! Nella parte iniziale dello script ci sono alcune variabili che vanno completate in modo da poterlo eseguire nel modo corretto. Prima di effettuare l'upgrade lo script esegue un backup completo della cartella di Ghost.

#!/bin/bash
###
#
#	Written by Andy Boutte and David Balderston of howtoinstallghost.com and allaboutghost.com
#	updateghost_digitalocean.sh will update your current Digital Ocean Ghost install to the latest version without you losing any content
#
#	modified by Andrea Giacomin of badalis.it
#
#	This script update a self-hosted installation of Ghost on CentOS. The manual procedure can be found here: http://docs.ghost.org/installation/upgrading/
#	Run this script as root. Example:	
#			sudo bash ghost-update-script.sh
#
#	The init script is available here: http://www.badalis.it/2014/04/05/script-di-aggiornamento-per-ghost-su-centos/
#
###

###
#	START EDIT
#	Edit this according your needs
###

GIT_INSTALLED=1	## 0 = git NOT installed 1 = git installed
GHOST_DIR="/var/www/blog"
GHOST_BK_DIR="/home/ciccio.pasticcio/blog.virho.it-bk-$(date +"%Y%m%d")"
GHOST_STARTUP_SCRIPT_NAME="ghost"
GHOST_DOWNLOAD_URL="https://ghost.org/zip/ghost-latest.zip"
GHOST_DIR_OWNER="nginx"

###
#	STOP EDIT
###

if [[ `whoami` != root ]]; then
    echo "This script must be run as root"
    exit 1
fi

## install git and wget if not present
if [ $GIT_INSTALLED == "0"]; then
	yum update
	yum install -y git wget
echo "###### Git Installed ######"
fi

## make temp dir and download ghost
cd $GHOST_DIR
mkdir temp
cd temp
wget $GHOST_DOWNLOAD_URL
unzip *.zip
cd ..

# stopping ghost
initctl stop $GHOST_STARTUP_SCRIPT_NAME

# backup ghost db
# cp content/data/ghost.db content/data/ghost_backup.db
test -d "$GHOST_BK_DIR" || mkdir -p "$GHOST_BK_DIR" && cp -r $GHOST_DIR/. $GHOST_BK_DIR
echo "###### Data Backed Up ######"

# copy the new files over
yes | cp temp/*.md temp/*.js temp/*.json .
rm -R core
yes | cp -R temp/core .
yes | cp -R temp/content/themes/casper content/themes
npm install --production
echo "###### NPM Installed ######"

# delete temp folder
rm -R temp

# chande folder ownership
chown -R $GHOST_DIR_OWNER:$GHOST_DIR_OWNER $GHOST_DIR

# starting ghost
initctl start $GHOST_STARTUP_SCRIPT_NAME
echo "###### Ghost Started ######"

Per i più "fannulloni" =) o meno esperti Ghost mette a disposizione un piano di hosting a partire da 5$ al mese. In questo caso tutte le operazioni di manutenzione e aggiornamento sono delegate al team Ghost!

Recentemente ho convinto mio cugino ad aprire un blog, e più precisamente, ad usare come piattaforma Ghost. Lui ha scelto il piano di hosting più economico, ed ecco il risultato!