Base de connaissances
Ghost
Introduction
Ghost est une plateforme de blogging open-source ultra légère (~7.5MB) et facile d’utilisation. Ghost est entièrement personnalisable. Il existe de nombreux thèmes disponibles sur Internet, aussi bien gratuits que payants.
dans cet article, nous expliquerons l’installation pas à pas de Ghost sur un environnement Debian. Nous installerons également le proxy Nginx et forever, un module node, qui permet de d’exécuter Ghost en arrière-plan.
Pré-requis
Il n’y a pas de minimum d’espace pour un serveur pour exécuter Ghost. Prenez en considération le nom de visiteurs que votre blog pourra accueillir et le contenu que vous souhaitez diffuser pour avoir une idée des ressources à allouer. Nous recommandons un minimum de 2 Go de RAM et 25 Go de stockage sur un VPS avec 2 core pour des performances optimales.
Avant de commencer, assurez-vous de respecter ces conditions :
- Debian/Ubuntu ou toute distribution compatible
- Un nom de domaine enregistré pointant sur l’adresse IP de votre serveur
- Un utilisateur non-root avec des privilèges sudo
Toutes the commandes de ce guide doivent être exécutées en utilisateur non-root. Si un accès root s’avère nécessaire pour une commande, il sera précédé par sudo. D’autres guides expliquent comment ajouter des utilisateurs et leur donner un accès sudo.
Etape 1 — Installer Node.js et Npm
Vous devez mettre à jour vos packets d’index locaux local package et installer les paquets zip et wget. Nous les utiliserons plus tard dans ce guide.
sudo apt-get update sudo apt-get install zip wget
Ghost nécessite Node.js v0.10.x (dernière version stable). Les versions instables de Node, comme la version v0.12.x, ne sont PAS supportées. Node.js v0.10.36 et npm v2.5.0 sont recommandés par Ghost.org.
Installer Node.js par la méthode PPA depuis ce guide.
Une fois que Node.js est installé, vérifiez la version installée en exécutant :
node -v
La commande devrait retourner par exemple :
v0.10.38
Vérifier si npm installé:
npm -v
Cette commande devrait retourner la version installée de npm si elle est installée :
1.4.28
Si elle retourne une erreur indiquant que npm n’est pas installée, installez-le en exécutant la commande suivante :
sudo apt-get install npm
Mettre à jour npm à la version 2.5.0 en exécutant la commande suivante :
sudo npm install npm@2.5.0 -g
Vérifier la version installée de npm:
npm -v
La commande devrait retourner :
2.5.0
Etape 2 — Installer Ghost
Nous allons maintenant installer Ghost. Ghost.org recommande d’installer Ghost dans var/www/ghost, nous respecterons donc ici les recommandations.
Premièrement, nous allons créer un répertoire /var/www/ puis télécharger la dernière version de Ghost depuis le dépôt Ghost sur GitHub :
sudo mkdir -p /var/www/ cd /var/www/ sudo wget https://ghost.org/zip/ghost-latest.zip
Maintenant que nous avons obtenu la dernière version de Ghost, il faut la dézipper. Nous allons également changer de répertoire pour /var/www/ghost/:
sudo unzip -d ghost ghost-latest.zip cd ghost/
Nous pouvons maintenant installer les dépendances de Ghost et les modules node modules (dépendances de production uniquement):
sudo npm install --production
Ghost est installé lorsque cette commande se termine. Nous devons ensuite le configurer avant de pouvoir le lancer.
Etape 3 — Configurer Ghost
Le fichier de configuration de Ghost devrait être localisé dans /var/www/ghost/config.js. Cependant, aucun fichier n’est installé avec Ghost. A la place, l’installation inclus config.example.js.
Copiez l’exemple de fichier de configuration à l’endroit indiqué. Assurez-vous de le copier plutôt que de le déplacer afin de conserver une version originale du fichier dans le cas où vous devriez revenir sur vos modifications.
sudo cp config.example.js config.js
Vos paramètres d’URL et d’email se trouvent dans la section production, sont les principales informations à changer. L’URL est nécessaire pour le fonctionnement. Autrement, les liens pointeront par défaut vers la page http://my-ghost-blog.com. Ghost peut fonctionner sans le réglage des paramètres de messagerie, mais il est recommandé d’en ajouter. Au moment où nous écrivons cet article, Ghost a uniquement besoin de la messagerie dans le cas de la récupération de mot de passe.
Ouvrez ce fichier pour l’éditer :
sudo vi config.js
Vous devez changer la valeur de url par celle de votre nom de domaine (vous pouvez également utiliser l’adresse IP de votre serveur). Cette valeur doit être uniquement au format d’une URL. Par exemple, http://navilog.io/ ou http://45.55.76.126/. Si cette valeur n’est pas correctement formaté, Ghost ne pourra démarrer.
Egalement, vous devez changer la valeur de host dans la section server pour votre adresse IP 0.0.0.0.
Ce qui suite vous montre les valeurs qui doivent être modifiées :
vi /var/www/ghost/config.js
var path = require('path'), config; config = { // ### Production // When running Ghost in the wild, use the production environment // Configure your URL and mail settings here production: { url: 'http://mon-site.com', mail: { // Your mail settings }, database: { client: 'sqlite3', connection: { filename: path.join(__dirname, '/content/data/ghost.db') }, debug: false }, server: { // Host to be passed to node's `net.Server#listen()` host: '127.0.0.1', // Port to be passed to node's `net.Server#listen()`, for iisnode s$ port: '2368' } }, (...)
Enregistrez le fichier et quittez l’éditeur vi en appuyant sur ESC puis wq et pour finir ENTER.
En restant dans le répertoire /var/www/ghost, démarrez Ghost avec la commande suivante :
sudo npm start --production
La sortie du terminale devrait ressembler à ce qui suit:
> ghost@0.6.4 start /var/www/ghost > node index Migrations: Database initialisation required for version 003 Migrations: Creating tables... Migrations: Creating table: posts [...]
Si tout s’est bien déroulé, vous devriez pouvoir accéder à votre blog en utilisant le port 2368: http://votre_nom_de_domaine:2368 (ou http://ip_de_votre_serveur:2368).
Appuyez sur CTRL+C dans votre terminal pour terminer votre instance Ghost.
Note: Ghost peut être personnalisé. Ghost.org explique chaque option de configuration en détail.
Etape 4 — Installer Nginx
La prochaine étape sera d’installer Nginx. Par défaut, il autorise les connexion sur le port 80 pour vous connecter sur le port utiliser par Ghost pour s’exécuter. Pour faire simple, vous aurez la possibilité d’accéder à votre blog Ghost sans avoir à ajouter le :2368.
Installez-le avec la commande suivante:
sudo apt-get install nginx
Ensuite, nous devrons configurer Nginx en changeant votre répertoire pour /etc/nginx et supprimer le fichier par défaut /etc/nginx/sites-enabled:
cd /etc/nginx/ sudo rm sites-enabled/default
Nous allons maintenant créer un nouveau fichier dans /etc/nginx/sites-available/ appelé ghost et l’ouvrir avec vi pour l’éditer:
sudo touch /etc/nginx/sites-available/ghost sudo nano /etc/nginx/sites-available/ghost
Copiez le code suivant dans le fichier en changeant « votre_domaine.tld » par votre nom de domaine, ou l’adresse IP de votre serveur si vous n’avez pas de nom de domaine :
server { listen 80; server_name votre_domaine.tld; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $http_host; proxy_pass http://127.0.0.1:2368; } }
Nous allons maintenant créer un lien symbolique de notre configuration dans sites-enabled:
sudo ln -s /etc/nginx/sites-available/ghost /etc/nginx/sites-enabled/ghost
Redémmarage de Nginx:
sudo service nginx restart
Ensuite, nous allons devoir créer un nouvel utilisateur. Cet utilisateur aura uniquement les privilèges sur le répertoire /var/www/ghost. C’est une mesure de sécurité dans le cas ou l’instance Ghost serait compromise, afin de maintenir le système en sécurité. Cette action peut être réalisée en exécutant la commande suivante :
sudo adduser --shell /bin/bash --gecos 'Ghost application' ghost
Nous allons accordé les privilèges à l’utilisateur ghost:
sudo chown -R ghost:ghost /var/www/ghost/
Vous pouvez désormais vous connecter en utilisateur ghost:
su - ghost
Nous devons maintenant démarrer Ghost:
cd /var/www/ghost npm start --production
Vous devriez pouvoir accéder à votre blog sur le port 80 tel que http://ip_de_votre_serveur/ ou http://votre_nom_de_domaine/.
Etape 5 — Maintenir le fonctionnement de Ghost
Méthode utilisant Forever
La prochaine étape sera de maintenir le fonctionnement de Ghost en arrière-plan. forever est un module node qui peut être utilisé pour démarrer Ghost en arrière-plan et le surveiller pour s’assurer de son fonctionnement. En cas de plantage de Ghost, forever démarrera automatiquement une autre instance de Ghost.
Installer forever avec la commande suivante depuis le répertoire de Ghost c’est à dire /var/www/ghost. Toutefois, avant de lancer la commande, déconnectez vous de la session utilisateur ghost et connectez-vous à un utilisateur non-root :
exit sudo npm install -g forever
Démarrer Ghost en tant qu’utilisateur ghost. Il doit également être lancé depuis le répertoire Ghost:
su - ghost cd /var/www/ghost forever start index.js
Le contenu doit être similaire à ce qui suit :
warn: --minUptime not set. Defaulting to: 1000ms warn: --spinSleepTime not set. Your script will exit if it does not stay up for at least 1000ms info: Forever processing file: index.js
Par défaut, l’environnement de développement est chargé. Cela peut être modifié en exécutant la commande suivante :
NODE_ENV=production forever start index.js
forever
peut être stoppé en lançant cette commande depuis le répertoire Ghost :
forever stop index.js
Erreurs possibles
Pour le message d’erreur suicant :
Error: SQLITE_READONLY: attempt to write a readonly database
Démarrer forever en utilisateur root (tapez exit
pour vous déconnecter de l’utilisateur actuel):
sudo forever start index.js
Si la dernière commande ne peut pas trouver ‘forever’, utilisez le chemin complet vers la commande:
sudo /usr/local/bin/forever start index.js
Si vous constatez l’erreur suivante :
error: Cannot start forever error: script /home/ghost/index.js does not exist.
Vous n’êtes pas dans le répertoire /var/www/ghost. Accédez à ce répertoire et exécutez la commande de nouveau.
Méthode par script Init
Le systèmes Linux utilisent des scripts init qui s’exécutent au démarrage du système. Ces scripts existent dans /etc/init.d. Pour permettre à Ghost d’être toujours exécuté y compris après un redémarrage il est possible d’utiliser un script init pour l’exécuter en tant que tâche. L’exemple suivant fonctionne sur Debian et Ubuntu ou tout autre distribution dérivée.
Il existe un script fonctionnel que vous pouvez utiliser pour configurer votre serveur. Le file existe dans le dépôt officiel GitHub de Ghost. Pour l’installer, suivez les étapes suivantes:
Créer le fichier /etc/init.d/ghost via la commande suivante:
$ sudo curl https://raw.githubusercontent.com/TryGhost/Ghost-Config/master/init.d/ghost \ -o /etc/init.d/ghost
Ouvrez le fichier avec :
vi /etc/init.d/ghost
Puis vérifiez ce qui suit :
- Changez la variable GHOST_ROOT par le chemin d’installation de votre instance Ghost
- Vérifiez si la variable DAEMON est identique à la sortie de node
Le script Init s’exécute avec son propre utilisateur et groupe Ghost sur le système, pour des raisons de sécurité. Nous pouvons les créer avec les commandes suivantes :
$ sudo useradd -r ghost -U
Vérifions également que l’utilisateur Ghost peut accéder au répertoire d’installation:
$ sudo chown -R ghost:ghost /path/to/ghost
Changez les droits d’exécution du script init en tapant :
$ sudo chmod 755 /etc/init.d/ghost
Vous pouvez désormais contrôler Ghost avec les commandes suivantes :
$ sudo service ghost start $ sudo service ghost stop $ sudo service ghost restart $ sudo service ghost status
Pour démarrer Ghost au démarrage du système, pour lancer le script init fraîchement créé, il doit être inscrit au démarrage. Saisissez les commandes suivantes pour procéder:
$ sudo update-rc.d ghost defaults $ sudo update-rc.d ghost enable
Assurez-vous que votre utilisateur peut effectuer des changements sur les fichiers comme par exemple sur config.js ou le répertoire Ghost, en l’assignant au groupe Ghost :
$ sudo adduser USERNAME ghost
Si vous redémarrez maintenant votre serveur, Ghost devrait être disponible dès le redémarrage.