Installer Ghost cms et Nginx sur Debian 8

1/52/53/54/55/5 (6 votes, moyenne: 3,67 sur 5)
Loading...
I

Attention, cet article a plus d'une année d'ancienneté. Il est possible que les informations présentées ne soient plus à jour, spécialement dans le cadre d'un article technique.


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

 

 

A propos de l'auteur

Nicolas Simond

Ingénieur Systèmes et Réseaux et guitariste hard rock et metal à mes heures perdues.
Je suis le créateur et l'unique rédacteur d'Abyss Project, c'est ici que je note la plupart de mes procédures et quelques divagations.

Si vous l'article vous a aidé, pensez à me payer un café :)

Subscribe
Notify of
guest

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

14 Commentaires
Plus récents
Plus anciens Populaires
Inline Feedbacks
View all comments
filovitch
filovitch
7 années plus tôt

Merci pour le tuto. J’ai néanmoins quelques petites questions:
-Pourquoi ajouter l’utilisateur « ghost » au sudoers? Cela me parait être un risque de sécurité que l’on peut éviter.
-Pourquoi avoir changé de PM2 vers Forever? D’après mes tests PM2 est plus simple à mettre en place et la gestion du redémarrage au reboot de la machine me semble plus propre. Je n’ai par contre pas d’expérience de production

Habnai
Habnai
7 années plus tôt

Merci beaucoup pour tous votre tut je un question à propos d’installations d’un deuxièmes blog ghost avec la même configuration, je mettre mon première blog dans /var/www/dmain,comment pour la deuxième ? Merci

Seboss666
7 années plus tôt

J’ai suivi le tuto pour installer Ghost (comme on a pu le voir sur Twitter). Quelques petites remarques : -le @reboot fonctionne (log dans journalctl), il faut faire super attention au dossier dans lequel l’application est démarrée. -Les installations des logiciels, des warnings ont indiqué des dépendances non maintenues, c’est plutôt crade : >npm WARN deprecated minimatch@2.0.10: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue >npm WARN optional dep failed, continuing fsevents@1.0.14 Bon après c’est sur un premier jet, un dimanche après-midi, je sais pas si ça serait mieux avec un Node plus récent. Me… Voir plus »

Seboss666
Reply to  Nicolas Simond
7 années plus tôt

Ouais… 123 dépendances de base. Ça traduit bien tout ce que je pense des développeurs « modernes » et de leur feignantise. Je repense à ce qui s’est passé avec leftpad sur NPM justement : http://www.numerama.com/tech/154759-comment-une-marque-commerciale-et-11-lignes-de-code-retirees-ont-fait-trembler-internet.html

Bref, si tous les projets sont de la même trempe, bonjour les dégâts…

Damien
Damien
7 années plus tôt

Super comme tuto merci beaucoup!
j’ai du utiliser « wget –no-check-certificate » au lieu de « wget » et « –force-yes » sur la commande « apt-get install nginx -y » pour y arriver je sais pas pourquoi tu as une idée?
je suis sur un serveur dédié kimsufi et j’ai fait l’install sur une version fraiche de debian 8

Damien
Damien
Reply to  Nicolas Simond
7 années plus tôt

je vais vérifier
merci

Damien
Reply to  Damien
7 années plus tôt

ni l’un ni l’autre fallait juste apt-get install ca-certificates :°

Damien
Reply to  Nicolas Simond
7 années plus tôt

c’est à l’insu de mon plein gré: je me suis rendu compte de ma connerie après avoir appuyé sur « poster le commentaire » 😀