Bonjour à tous,

Aujourd’hui, je vais vous montrer comment installer la plateforme de blogging ghost cms sous Debian 8.

En plus de cela, je vous montrerais comment automatiser le lancement de Ghost au démarrage, ajouter un Nginx en reverse proxy et automatiser le renouvellement de certificat Let’s Encrypt sur la bête, rien que ça 🙂

Mise à jour : 17/07/2016

J’ai abandonné le support de PM2 et j’ai décidé d’utiliser Forever à la place, plus fiable en production.

 

Préparation du système

Dans un premier temps, mettez à jour votre système et installez les dépendances nécessaires :

Renseignez toutes les sources nécessaires dans votre sources.list :

echo "#Stable
deb http://mirrors.kernel.org/debian/ jessie main contrib non-free
deb-src http://mirrors.kernel.org/debian/ jessie main contrib non-free
deb http://security.debian.org/ jessie/updates main contrib non-free
deb-src http://security.debian.org/ jessie/updates main contrib non-free
deb http://mirrors.kernel.org/debian/ jessie-updates main contrib non-free
deb-src http://mirrors.kernel.org/debian/ jessie-updates main contrib non-free
deb http://mirrors.kernel.org/debian/ jessie-backports main contrib non-free
deb-src http://mirrors.kernel.org/debian/ jessie-backports main contrib non-free


#Dotdeb - Nginx
deb http://packages.dotdeb.org jessie all
deb-src http://packages.dotdeb.org jessie all" > /etc/apt/sources.list

 

Téléchargez les clés nécessaires pour les dépôts et installez-les :

mkdir /tmp/keys/
cd /tmp/keys
wget https://www.dotdeb.org/dotdeb.gpg
apt-key add dotdeb.gpg

 

Maintenant, mettez votre système à jour :

wget -O- https://raw.githubusercontent.com/stylersnico/debian-scripts/master/upgrade-and-clean-system.sh | sh

 

Installation de Ghost cms

Installez Node.js avec les dépendances nécessaires :

wget -O- https://deb.nodesource.com/setup_4.x | bash
apt-get install nodejs unzip git sudo -y

 

Maintenant, téléchargez et installez la dernière version de Ghost sur votre serveur :

mkdir -p /var/www/ && cd /var/www/
wget https://ghost.org/zip/ghost-latest.zip && unzip ghost-latest.zip
npm install --production

 

Copiez la configuration par défaut et ajoutez votre nom de domaine dans la configuration de Ghost :

cp config.example.js config.js && nano config.js

 

Remplacez les lignes :

url: 'http://my-ghost-blog.com',

 

Par (Remplacez votre domaine puis précisez déjà le protocole en https) :

url: 'https://ghost.2605.abyssproject.xyz',

 

Maintenant, créez l’utilisateur pour Ghost :

adduser ghost

 

Et ajoutez-lui les droits sur le site :

chown -R ghost:ghost /var/www/

 

Ajoutez ensuite cet utilisateur dans le groupe des sudoers :

adduser ghost sudo

 

Automatiser le lancement de Ghost :

Maintenant, on va installer Forever qui nous permettra de gérer le serveur Ghost plus facilement et qui en plus nous permettra de le lancer automatiquement au démarrage.

Connectez-vous d’abord sur l’utilisateur Ghost :

su ghost

 

Maintenant, lancez les commandes suivantes pour installer forever :

cd /var/www/
sudo npm install -g forever

 

Ensuite, lancez votre blog ghost avec la commande suivante :

NODE_ENV=production forever start index.js

 

Pour finir, automatisez le lancement de Ghost au démarrage en ajoutant ceci dans votre crontab (crontab -e) :

@reboot NODE_ENV=production forever start /var/www/index.js

 

Mise en place du reverse proxy Nginx :

Installez nginx avec la commande suivante :

apt-get install nginx -y

 

Virez toutes les configurations par défaut possibles :

rm /etc/nginx/sites-available/default && rm /etc/nginx/sites-enabled/default && rm /etc/nginx/conf.d/default

 

Créez votre vhost pour Ghost :

nano /etc/nginx/sites-enabled/ghost.vhost

 

Et remplissez-le avec ceci (en modifiant le server_name pour mettre votre domaine) :

server {
        listen 80;
        server_name ghost.2605.abyssproject.xyz;

        location / {
            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;
        }

        #Dossier pour l'hébergement de fichiers types PDF|ZIP ...
        location /static/ {
                alias /var/www/static/;
        }

        #Renouvellement automatique pour le certificat Let's Encrypt
        location /.well-known/acme-challenge {
                alias /var/www/.well-known/acme-challenge/;
        }

}

 

Créez le dossier et redémarrez Nginx :

mkdir /var/www/static && service nginx restart

 

Mise en place du certificat Let’s Encrypt :

Maintenant, on va installer un certificat Let’s Encrypt qui marchera avec Nginx.

Lancez d’abord les commandes suivantes pour créer les paramètres DH et récupérer la configuration Nginx correcte :

cd /etc/ssl/certs && openssl dhparam -out dhparam.pem 4096
cd /etc/nginx/
rm nginx.conf
wget https://www.abyssproject.net/wp-content/uploads/2016/01/nginx.conf_.txt
mv nginx.conf_.txt nginx.conf
service nginx reload

 

Ensuite, installez Let’s Encrypt avec les commandes suivantes :

cd /etc
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
./letsencrypt-auto --help

 

Créez ensuite un fichier de configuration pour le renouvellement de votre certificat SSL, par exemple pour moi :

mkdir /etc/letsencrypt/configs && nano /etc/letsencrypt/configs/ghost.2605.abyssproject.xyz.conf

 

Ensuite, créez le fichier de configuration :

domains = ghost.2605.abyssproject.xyz
rsa-key-size = 4096
server = https://acme-v01.api.letsencrypt.org/directory
email = nicolas@abyssproject.net
text = True
authenticator = webroot
webroot-path = /var/www/

 

Et lancez les commandes suivantes pour créer le certificat en adaptant à votre configuration, il suffira de relancer ces commandes pour renouveler le certificat :

cd /etc/letsencrypt
./letsencrypt-auto --config /etc/letsencrypt/configs/ghost.2605.abyssproject.xyz.conf certonly

 

Vous devriez avoir un message similaire si la création de certificat réussie :

IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/ghost.2605.abyssproject.xyz/fullchain.pem.
Your cert will expire on 2016-08-24. To obtain a new version of the
certificate in the future, simply run Certbot again.
- If you like Certbot, please consider supporting our work by:

Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le

 

Editez votre vhost nginx pour rajouter les informations nécessaires :

server {
        listen 80;
        listen 443 ssl;

        ssl_protocols TLSV1 TLSv1.1 TLSv1.2;
        ssl_certificate /etc/letsencrypt/live/ghost.2605.abyssproject.xyz/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/ghost.2605.abyssproject.xyz/privkey.pem;

        server_name ghost.2605.abyssproject.xyz;

        location / {
            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;
        }

        location /static/ {
                alias /var/www/static/;
        }

        location /.well-known/acme-challenge {
                alias /var/www/.well-known/acme-challenge/;
        }

}

 

Et redémarrez votre serveur pour tester le bon fonctionnement du bordel 🙂

En cas d’erreur, relancez la commande suivante en root :

chown -R ghost:ghost /var/www/

 

Et la commande suivante avec l’utilisateur ghost :

forever restartall

 

Lancez la commande suivante pour voir l’état de l’instance ghost :

forever list

 

Et maintenant, accédez à l’installateur du blog ghost depuis l’url suivante :

https://ghost.2605.abyssproject.xyz/ghost/setup/one/

 

installation-ghost-02