Installer Ghost sans ghost-cli

Par Dryusdan le

Ghost ?

Hé, on se calme, j'ai même pas eu le temps de commencer à écrire qu'il y a déjà des questions è_é
Ghost est une plateforme de blogging, dédiée uniquement au blog et rien d'autre. Vous n'en ferez pas un site d'e-commerce comme peut le faire Wordpress (La différence entre CMS et plateforme de blogging).
L'outil est écrit en NodeJS et possède un design relativement épuré, que cela soit au niveau de l'administration du site ou de l'espace public. J'avoue qu'il manque un espace de commentaire mais facilement patchable en installant Isso.

Ghost c'est un peu mon coup de coeur, facile à utiliser, agréable, fluide (contrairement à WordPress), les thèmes facilement intégrable. Pendant une longue période il était également facile à installer... Puis l'équipe de développement à décidé de créer une ligne de commande « ghost-cli ». Autant vous dire que cela était une purge pour faire des updates automatique ou autre. Il fallait être présent sur l'ordi, avoir un utilisateur, des droits sudoers... Ce n'était plus gérable via des scripts de façon officielle. Mais ça se gère ! Et c'est le but de cet article, reprendre la main sur Ghost !

Tout d'abord il faut installer mysql, curl, unzip, nodejs, yarn et knex-migrator :

curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -  
curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list 
sudo apt-get update && sudo apt-get -y install nodejs yarn mysql curl unzip
npm i -g knex-migrator

Une fois cela fait, félicitation, vous avez téléchargé 30% de l'internet mondial, il vous reste maintenant 70%. Avec npm ça devrait aller vite :p

Bon, ne trainons pas, on a quand même 70% à télécharger. Mais avant, un petit peu de sécurité : On crée un utilisateur pour Ghost

useradd -d /var/www/ghost/ -m ghost
mkdir /var/www/ghost/www
Puis un pour MySQL
CREATE DATABASE ghost;
CREATE USER 'ghost'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON ghost . * TO 'ghost'@'localhost';

Une fois cela fait : télécharger Ghost

cd /tmp
curl -L https://ghost.org/zip/ghost-latest.zip -o ghost-latest.zip
Le dézipper et lui affecter les bons droits
unzip ghost-latest.zip -d ghost
mv ghost/* /var/www/ghost/www/
chown -R ghost: /var/www/ghost/www/
On édite le fichier /var/www/ghost/www/config.production.json
{
  "url": "https://www.blog.tld",
  "server": {
    "port": 2368,
    "host": "127.0.0.1"
  },
  "database": {
    "client": "mysql",
    "connection": {
      "host": "localhost",
      "user": "ghost",
      "password": "password",
      "database": "ghost"
    }
  },
  "privacy": {
  	"useTinfoil": true
  },
  "mail": {
    "transport": "Direct"
  },
  "logging": {
    "path": "/var/log/ghost/",
    "level": "debug",
    "transports": [
      "file"
    ]
  },
  "process": "systemd",
  "paths": {
    "contentPath": "/var/ghost/www/content"
  }
}
Puis on installe :
cd /var/www/ghost/www/
sudo -u ghost NODE_ENV=production npm i
sudo -u ghost NODE_ENV=production yarn install
sudo -u ghost NODE_ENV=production knex-migrator init
sudo -u ghost NODE_ENV=production knex-migrator migrate
IL ne reste plus qu'à faire le fichier d'init pour SystemD. Pour cela, créez un fichier `/etc/systemd/system/www_blob_tld.service` et tapez :
[Unit]
 Description=www.blog.tld (Ghost)
 After=network.target

[Service]
 Type=simple
 User=ghost
 WorkingDirectory=/var/www/ghost/www
 Environment="NODE_ENV=production"
 ExecStart=/usr/bin/node index.js
 TimeoutSec=15
 Restart=always

[Install]
 WantedBy=multi-user.target

Ensuite on recharge Systemd et on lance Ghost
systemctl daemon-reload
systemctl start www_blog_tld

L'installation est maintenant terminée. Vous n'avez plus qu'à aller sur l'url 127.0.0.1:2368 pour profiter de votre blog. Bien entendu vous pouvez utiliser un reverse proxy pour avoir une vraie URL ;)

Vous n'avez plus qu'à découvrir Ghost.

En tout cas, on passe à une autre étape du tutoriel : les mises à jour !

Sur le coup rien de bien compliqué (je vais même vous filer un script).

Déjà pour éviter les coupures trop longues on va déjà télécharger la dernière version de Ghost et la dézipper :

cd /tmp
curl -L https://ghost.org/zip/ghost-latest.zip -o ghost-latest.zip
unzip ghost-latest.zip -d ghost && cd ghost

Ensuite on copie les données importantes dans un endroit sûr, c'est à dire le

/content
et le
config.production.json

cp -R /var/www/ghost/www/content /var/tmp
cp /var/ghost/www/config.production.json /var/tmp

Ensuite on éteint le blog

systemctl stop www-dryusdan-fr

Les étapes de la migration sont identiques aux étapes d'installation. Donc on migre !

rm -rf /var/www/ghost/www/
cp -R /var/www/ghost/www/
cd /var/www/ghost/www/
rm -rf /var/www/ghost/www/content 
cp -R /var/tmp/content /var/www/ghost/www/
cp /var/tmp/config.production.json /var/www/ghost/www/
chown -R ghost: /var/www/ghost/www/
sudo -u ghost NODE_ENV=production npm i
sudo -u ghost NODE_ENV=production yarn install
sudo -u ghost NODE_ENV=production knex-migrator init
sudo -u ghost NODE_ENV=production knex-migrator migrate

Puis on fait du ménage et on relance le tout

rm -rf /var/tmp/content
rm -rf /var/tmp/config.production.json 
systemctl start ghost

Et voilà, vous avez un blog tout frais tout beau tout neuf, et avec le bon script de migration on a plus grand chose à faire :)

D'ailleurs, voici ce script :

#!/bin/sh

echo "**** Download and prepare ghost ****"
cd /tmp
curl -L https://ghost.org/zip/ghost-latest.zip -o ghost-latest.zip
unzip ghost-latest.zip -d ghost && cd ghost

cp -R /var/www/ghost/www/content /var/tmp/
cp /var/www/ghost/www/config.production.json /var/tmp/

echo "**** Shutdown ghost ****"
systemctl stop ghost

echo "**** MIGRATION !!!!! ****"
rm -rf /var/www/ghost/www/
cp -R /tmp/ghost/ /var/www/ghost/www/
cd /var/www/ghost/www/
rm -rf /var/www/ghost/www//content 
cp -R /var/tmp/content /var/www/ghost/www/
cp /var/tmp/config.production.json /var/www/ghost/www/
chown -R ghost: /var/www/ghost/www/
sudo -u ghost NODE_ENV=production npm i
sudo -u ghost NODE_ENV=production yarn install
sudo -u ghost NODE_ENV=production knex-migrator init
sudo -u /var/www/ghost/www/ NODE_ENV=production knex-migrator migrate

rm -rf /var/tmp/content
rm -rf /var/tmp/config.production.json 

echo "**** Starting ghost ****"
systemctl start ghost
echo "**** Ghost started****"


echo "**** Migration done ****"

Maintenant vous pouvez installer Ghost sans vous battre avec la CLI.

Article corrigé par Von
Photo by Lucas Ludwig on Unsplash