Installer Ghost sur un vps (pm2 + apache2)

Certains d’entre vous on probablement entendu parler de Ghost. Cette nouvelle plateforme de Blog a pu voir le jour grâce a un financement participatif à hauteur de £196,362 (environ 234 176 €) !

Ghost tourne sous Node.js, étant assez fanatique de cette programmation en Javascript only, je me suis empressé de la tester, et je vais vous montrer comment l’installer sur un VPS de chez OVH assez simplement.

Je tourne sous Debian Wheezy, et j’admet que vous ayez un poste sous une distribution linux ainsi qu’un accès SSH (et pourquoi pas un nom de domaine).

# Rappel à exécuter sur une nouvelle instance :

#mettre à jour les paquets
apt-get update 
#installer les mises à jour majeures
apt-get upgrade 

# Installation de Node.js

Afin de faire tourner Ghost, il est déjà nécessaire d’avoir node.js. Il existe beaucoup de façon différentes de l’installer mais je choisi de le faire via le github car :

Il est possible que vous ayez à installer les paquets suivant pour compiler node :

apt-get install build-essential openssl libssl-dev

# Ready, set, Go !

# Commençons par installer git :
apt-get install git-core

# Puis on clone le repo de node.js :
git clone https://github.com/joyent/node.git

# On se place dans le repertoire
cd node
 
# 'git tag' pour voir les versions disponibles, à ce jour la stable est celle-ci :
git checkout v0.10.22
 
# On précise le chemin de la librairie ssl  (debian) :
./configure --openssl-libpath=/usr/lib/ssl

# puis on compile
make
make install

Tadam ! Node.js est installé, pour vérifier :

node -v # devrait dire 0.10.22
npm -v # ça s'affiche ? cool.

Vous pouvez même supprimer le répertoire node :

cd ..
rm -r node

# Installation du fantôme

Pour Ghost, nous n’allons pas le chercher sur github, car son installation via le git est plus compliquée. Il faudrait compiler les sources CSS et Javascript par exemple.

Allons au plus simple : Téléchargez Ghost Cliquez sur le gros bouton Download

Puis téléversez ça sur votre VPS, par exemple dans /var/www/ghost.

Pour installer ses dépendances :

cd /var/www/ghost
npm install --production

Sans --production npm va installer pleins de paquets qui ne vous serons pas utiles mais qui servent au développement de la plateforme.

# Est-ce que cela fonctionne ?

Cette étape est facultative

Ouvrez le config.js à la racine du répertoire.

Juste pour tester, parce que finalement c’est le but, on va éditer la partie development et remplacer le host:127.0.0.1 par l’ip de votre VPS ce qui donne :

//on ne touche pas au reste de la config pour l'instant
server: {
            // Host to be passed to node's `net.Server#listen()`
            host: 'IP_SERVEUR', //votre IP VPS
            // Port to be passed to node's `net.Server#listen()`, for iisnode set this to `process.env.PORT`
            port: '3002' // j'ai changé le port, le leur était trop long \o/
        }

Testez avec la commande : npm start et navigez sur votre IP_SERVEUR:3002 pour voir la magie à l’oeuvre !

CTRL+C pour quitter.

Remettez 127.0.0.1 dans la section d’avant !

# Apache 2

C’est bien beau tout ça, mais ce n’est pas très sûr niveau sécurité et si on veut ajouter un nom de domaine ou d’autres sites sur le même VPS on est pas dans la mouise…

C’est là qu’interviens le serveur web Apache (ou Nginx) fera l’affaire.

# Pourquoi apache ?

J’avais déjà quelques sites actifs sur ce VPS, avec apache comme serveur web et de passer sous Nginx demandais trop de changements pour un déploiement rapide. Je donnerai à la fin de ce billet, un exemple pour faire tourner Node.js via nginx.

# Installation et configuration

apt-get install apache2

Jusque là ça va.

On va ajouter un VirtualHost pour notre nouveau blog :

nano /etc/apache2/sites-available/ghost

Voici un exemple de config pour mon blog :

<VirtualHost *:80>
    ServerAdmin infos@soyuka.me
    ServerName soyuka.me
    ServerAlias www.soyuka.me

    ErrorLog /var/log/node/soyuka.me

    DocumentRoot /var/www/ghost

    <Proxy *>
            Order deny,allow
            Allow from all
    </Proxy>
    ProxyRequests off
	
    #ici c'est le proxy vers l'instance de node.js
    <Location />
            ProxyPass http://localhost:3002/
            ProxyPassReverse http://localhost:3002/
    </Location>

</VirtualHost>

Exécutez a2ensite ghost pour l’activer.

Avant de redémarrer apache, nous allons encore ajouter une directive pour que les fichiers de Ghost ne soient pas accessibles par apache2. En effet, dans la configuration mail de ghost, ils nous demandent de mettre le mot de passe de l’adresse mail utilisée en clair. Donc ce fichier config.js ne doit pas être accessible via IP_SERVEUR/ghost/config.js.

Editez /etc/apache2/sites-enabled/000-default et ajoutez-y :

<Directory /var/www/ghost>
	#vous pouvez ajouter un index.html par exemple à la racine du ghost
    Options -Indexes 
	Order deny,allow
	Deny from all
</Directory>

Ouf, apache est configuré, on le relance !

service apache2 restart

# Le nom de domaine

Une façon simple et rapide d’y lier votre nom de domaine est d’ajouter une règle A qui pointe directement sur l’ip de votre serveur.

# Configurer ghost

Editez le config.js et entrez les informations suivante dans la section production :

# PM2

Bon c’est bien beau tout ça, mais si vous avez testé Ghost plus tôt, vous avez remarqué que le processus de node.js se quitte lorsque l’on ferme le terminal.

Il faut donc le faire tourner à l’infini et pour ce faire j’ai nommé : PM2.

# Installation

npm install -g pm2 # -g pour global

# Configuration

# on passe l'environnement en production
export NODE_ENV=production
# et on démarre la machine :
pm2 start index.js --name ghost

PM2 permet d’avoir un œil sur node.js, pour les diverses commandes, je vous invite à lire le Readme.md.

Et voilà le travail, le blog est maintenant accessible sur votre nom de domaine :).

Enjoy ghost !

Example de Proxy sous Nginx