/ Nginx

Ghost 1.0 - Installer Ghost avec ghost-cli et Nginx - Migrer depuis wordpress

Ghost à publié sa nouvelle release 1.0, qui introduit également l'outil ghost-cli permettant d'installer ghost, de le mettre à jour et d'intéragir plus facilement avec la plateforme.

Le thème de base "casper" a également été mis à jour, et je trouve le nouveau design absolument génial, bien que j'ai effectué certaines modifications dans les styles, notamment concernant la dimensions des images.

Je n'ai donc pas hésité trop longtemps, car je trouvais déjà que Ghost était une solution très intéressante pour écrire des articles, sans avoir pour autant à ajouter des dizaines de plugins comme sur wordpress.

Je vais donc expliquer dans cet article comment installer Ghost via l'outil ghost-cli, et comment réaliser la migration depuis WordPress.

Pour résumer les fonctionnalités principales de Ghost :

  • Articles en markdown
  • Organisation des articles par tags
  • Support natif des meta datas
  • Support natif de l'AMP
  • Application Desktop

De quoi avons nous besoin ?

  • Un VPS avec Ubuntu 16.04 LTS
  • Un serveur MySQL
  • NGINX
  • Node v6
  • Un utilisateur avec sudo

Installation des pré-requis

On commence par créer un utilisateur et lui donner les droits sudo, puis on se connecte via cet utilisateur. Cet utilisateur ne doit pas s'appeller ghost, car l'utilisateur ghost sera automatiquement ajouté par ghost-cli

adduser monghost
usermod -aG sudo monghost
su - monghost

On met à jour la liste des paquets et le serveur

sudo apt-get update
sudo apt-get upgrade

On installe la dernière release de nginx

wget -O - https://nginx.org/keys/nginx_signing.key | sudo apt-key add -
sudo echo "deb http://nginx.org/packages/ubuntu/ $(lsb_release -sc) nginx" > /etc/apt/sources.list.d/nginx.list
sudo apt update
sudo apt install nginx

On installe MariaDB 10.1

sudo apt-get install software-properties-common -y
sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
sudo add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://fr.mirror.babylon.network/mariadb/repo/10.1/ubuntu $(lsb_release -sc) main'

sudo apt-get update
sudo apt-get install mariadb-server

On installe nodejs v6 LTS

curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash 
sudo apt-get install -y nodejs

Installation de Ghost

On commence par installer ghost-cli

sudo npm i -g ghost-cli

Puis on créer le répertoire pour notre blog

sudo mkdir -p /var/www/ghost
sudo chown monghost:monghost /var/www/ghost
cd /var/www/ghost

Et on peut enfin lancer l'installation de Ghost, qui est totalement interactive et qui va :

  • Configurer la base de donnée
  • Installer la dernière version de Ghost
  • Configurer Ghost
  • Configurer Nginx et installer un certificat SSL avec Let's Encrypt
  • Déclarer Ghost en tant que service via systemd

Vous avez le choix pour chacune des étapes, de le faire via ghost-cli ou manuellement. Dans le cas de Nginx par exemple, si vous utiliser une configuration particulière, il sera préférable d'ajouter votre vhost manuellement.

On lance donc l'installation avec :

ghost install

configuration de nginx

Pour la configuration de Nginx, pour des performances optimales, j'utilise personnellement la fonction proxy-cache pour mettre en cache les pages du blog. Il est possible de modifier la durée du cache à la ligne :

proxy_cache_valid 200 10m;

Voilà le vhost complet :

proxy_cache_path /var/cache/nginx/static levels=1:2 keys_zone=STATIC:5m max_size=67108864;

server {
        listen 80;
        listen [::]:80;
        server_name votredomain.tld www.votredomain.tld;
        return 301 https://votredomain.tld$request_uri;
}
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    ssl on;
    server_name votredomain.tld www.votredomain.tld;
  
    root /var/www/votredomain.tld/system/nginx-root;

    ssl_certificate     /etc/letsencrypt/live/votredomain.tld/fullchain.pem;
    ssl_certificate_key     /etc/letsencrypt/live/votredomain.tld/privkey.pem;
    access_log /var/log/nginx/anystack-access.log;
    error_log /var/log/nginx/anystack-error.log;

  location / {
        proxy_cache STATIC;
        proxy_cache_valid 200 10m;
        proxy_cache_valid 404 1m;
        proxy_ignore_headers X-Accel-Expires Expires Cache-Control;
        proxy_ignore_headers Set-Cookie;
        proxy_hide_header Set-Cookie;
        proxy_hide_header X-powered-by;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $http_host;
        proxy_pass http://127.0.0.1:2368;
        expires 10m;
    }
    location ~ ^/(?:ghost|signout) {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_pass http://127.0.0.1:2368;
        add_header Cache-Control "no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0";
    }
    location /content/images {
        alias /path/to/ghost/content/images;
        access_log off;
        expires 30d;
    }
    location /assets {
        alias /path/to/ghost/content/themes/casper/assets;
        access_log off;
        expires 30d;
    }

    location ~ /.well-known {
        allow all;
    }

    client_max_body_size 50m;
}

Et pour installer le certificat SSL, j'utilise actuellement certbot que vous pouvez facilement installer sur Ubuntu 16.04 LTS :

sudo apt-get update && apt-get install software-properties-common
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update && apt-get install python-certbot-nginx 

Et pour générer un certificat SSL, j'utilise la fonctionnalités "pre-hook" et "post-hook" de certbot, pour arrêter nginx le temps d'utiliser le serveur de validation intégré à certbot :

certbot certonly --pre-hook "service nginx stop" \
--standalone --cert-name votredomain.tld \
-d votredomain.tld -d www.votredomain.tld \
-post-hook "service nginx start" -n \
--agree-tos -m you@votredomain.tld \
--rsa-key-size 4096

Mettre à jour Ghost

Là aussi, la nouvelle CLI de Ghost facilite vraiment le processus de mise à jour, puisqu'il suffit de se rendre dans le dossier de votre blog en tant que l'utilisateur définit pour utiliser la CLI puis d'utiliser ghost update

su - monghost
cd /var/www/ghost
ghost update

Migrer depuis WordPress

Pour migrer depuis WordPress, il faut tout d'abord extraire votre contenu au format .json en utilisant le plugin officiel publié par Ghost. Il est disponible dans l'annuaire de plugins WordPress

Après avoir extrait votre contenu, vous pourrez l'importer dans Ghost, il est restera cependant quelques tâches à réaliser manuellement :

  • Les images devront être importées manuellement ou hébergées sur un hébergeur externe
  • Les commentaires devront être importés sur une plateforme comme Disqus ou sur une solution self-hosted comme Isso
  • Les méta-data de vos articles devront être ajoutées manuellement, l'importateur Ghost ne traite que le contenu des articles et les tags

Je vais traiter dans un prochain article comment installer Isso pour héberger l'ensemble de vos commentaires et ne pas avoir à utiliser une solution comme disqus.

Ghost 1.0 - Installer Ghost avec ghost-cli et Nginx - Migrer depuis wordpress
Share this