Installer Ghost avec Nginx proxy-cache et Let'sEncrypt
Cet article est ancien et il peut contenir des instructions qui ne sont plus d'actualité.
Si vous aussi, il vous arrive de vous plaindre à propos de WordPress, pourquoi ne pas essayer une autre solution pour votre blog ? C’est ce que j’ai fait pour mon blog anystack.xyz en passant de WordPress à Ghost. Après plusieurs mois d’utilisation, je suis plutôt satisfait de cette plateforme. Il manque effectivement quelques fonctionnalités et l’écosystème de plugins et de thèmes que l’on peut retrouver sur WordPress, mais sa simplicité d’utilisation et son orientation vers ce qui est vraiment important – le contenu – est plutôt agréable.
Je vais donc dans ce tutorial expliquer comment installer Ghost, puis mettre en place un reverse-proxy avec Nginx et Let’s Encrypt, en utilisant le module proxy-cache de Nginx pour rendre Ghost encore plus rapide.
1) Installer NodeJs v4 LTS
wget https://deb.nodesource.com/setup_4.x
chmod +x setup_4.x
./setup_4.x
apt-get install nodejs -y
2) Installer Ghost
mkdir /var/www/ghost
cd /var/www/ghost
curl -L https://ghost.org/zip/ghost-latest.zip -o ghost.zip
unzip ghost.zip
npm install --production
Lancer Ghost :
npm start --production
Votre instance Ghost est donc désormais lancée, et vous pouvez y accéder à l’adresse http://IP-De-Votre-Serveur:2368. Cependant, si vous fermez votre console SSH, l’instance Ghost s’arrêtera.
Pour lancer Ghost de façon définitive :
npm install forever -g
## démarrer ghost
NODE_ENV=production forever start index.js
## arrêter ghost
forever stop index.js
3) Configurer Nginx en tant que reverse-proxy
Nous allons donc passer à la partie configuration de Nginx. Si vous utilisez EasyEngine, vous pouvez créer votre sous domaine en une seule commande :
ee site create votredomaine.com --proxy=127.0.0.1:2368
Ensuite modifiez le fichier de configuration de votre domaine en suivant le modèle ci-dessous.
upstream ghost_upstream {
server 127.0.0.1:2368;
keepalive 64;
}
proxy_cache_path /var/run/cache levels=1:2 keys_zone=STATIC:75m inactive=24h max_size=512m;
server {
server_name votredomaine.com wwww.votredomaine.com;
add_header X-Cache $upstream_cache_status;
location / {
proxy_cache STATIC;
proxy_cache_valid 200 30m;
proxy_cache_valid 404 1m;
proxy_pass http://ghost_upstream;
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-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
expires 10m;
}
location /content/images {
alias /path/to/ghost/content/images;
access_log off;
expires max;
}
location /assets {
alias /path/to/ghost/content/themes/uno-master/assets;
access_log off;
expires max;
}
location /public {
alias /path/to/ghost/core/built/public;
access_log off;
expires max;
}
location /ghost/scripts {
alias /path/to/ghost/core/built/scripts;
access_log off;
expires max;
}
location ~ ^/(?:ghost|signout) {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://ghost_upstream;
add_header Cache-Control "no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0";
}
location /.well-known {
alias /var/www/html/.well-known;
}
}
Pour appliquer la configuration, on utilise la commande service nginx reload.
Cependant il faut également penser à éditer le fichier config.js, situé dans le dossier d’installation de Ghost, et y changer la variable url en la remplaçant par votre nom de domaine :
url: 'http://votredomaine.com'
4) Installer Let’s Encrypt
On peut désormais passer à l’installation de Let’s Encrypt si ce n’est pas déjà fait.
cd /opt
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
Il ne nous reste plus qu’à générer le certificat via la commande :
./letsencrypt-auto certonly --webroot -w /var/www/html -d votredomaine.com --email votreemail@votredomaine.com --text --agree-tos
Pour utiliser le certificat, ajouter les lignes suivantes après server_name dans votre configuration nginx :
listen 443 ssl http2;
ssl on;
ssl_certificate /etc/letsencrypt/live/votredomaine.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/votredomaine.com/privkey.pem;
```
Pour terminer, il ne vous reste plus qu’à modifier à nouveau l’url de votre blog dans le fichier config.js et à ajouter un block server pour faire la redirection http vers https :
server {
listen 80;
server_name votredomaine.com www.votredomaine.com;
return 301 https://votredomaine.com$request_uri;
}