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/
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
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
Bonjour,
Refaire la procédure avec un nouvel utilisateur et de nouveaux chemins.
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 »
Salut Seb, Pour le @reboot c’est crade j’en conviens, mais pas plus que tout le reste quand on met en parallèle 🙂 Si tu as une meilleur idée, je suis preneur. Pour les erreurs / warnings, tu ne peux rien y faire. La procédure utilise la version de NodeJS la plus récente et recommandé par Ghost (LTS 4.0). Les versions plus récentes de NodeJS ne sont pas supportées. Et les paquets NPM ne peuvent pas êtres mis à jour comme ça, je te conseille de prendre tes cachets pour le cœur, de te mettre à coter d’un défibrillateur et d’ouvrir… Voir plus »
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…
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
Hello,
Problème d’heure sur ton serveur ou de certificat surement ?
je vais vérifier
merci
ni l’un ni l’autre fallait juste apt-get install ca-certificates :°
Dans ce cas c’est bien un problème de certificats …
c’est à l’insu de mon plein gré: je me suis rendu compte de ma connerie après avoir appuyé sur « poster le commentaire » 😀
🙂
Hello,
Problème d’heure sur ton serveur surement ou les certificats pas à jour dans ton Debian.