Allez c’est partie j’essai de déployer un vrai site en KeystoneJS.
étape zéro
(Note: jusqu’à ce que j’indique le contraire toute cette partie se fait en root)
On réfléchi pas avant de commencer :
apt-get update apt-get upgrade
Ensuite je me suis basé sur le tuto du site du projet, ici :
http://keystonejs.com/getting-started/
Notez quand même que pour ceux qui n’y connaissent rien, Ça à l’air un peu plus complexe que pour Ghost.
Notez également que je teste ça sur une 7.5 et pas la dernière 8 de debian
Prérequis
On va commencer par installer ce qu’ils demandent
Node.js
En rebondissant du site de keystonejs vers celui de node.js, on fini par tomber sur le tutoriel Installing Node.js via package manager sur le GitHub. Qu’on suit donc bêtement pour la partie debian :
apt-get install curl curl -sL https://deb.nodesource.com/setup | bash -
Pour ceux qui se demande c’est quoi cURL] : C’est un wget amélioré en gros
Puis assez logiquement ensuite :
apt-get install -y nodejs
(pour le coup cette partie là, c’est la même que pour Ghost, du coup, pour moi, il n’y avait rien à faire)
Et s’ils ne sont pas déjà installé :
apt-get install -y build-essential
MongoDB
Idem on suit les précos du projet ici : Install MongoDB on Debian
1ère étape : importer la clé publique du projet pour que le gestionnaire de paquet fasse confiance à ce qu’on va importer :
apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10
2sd étape, maintenant qu’on fait confiance à ces sources, ajouter la liste des sources (logique)…
echo "deb http://repo.mongodb.org/apt/debian "$(lsb_release -sc)"/mongodb-org/3.0 main" | tee /etc/apt/sources.list.d/mongodb-org-3.0.list
Du coup, on met à jour la base pour prendre en comptes les nouvelles sources:
apt-get update
Et on installe enfin MongoDb :
apt-get install -y mongodb-org
Tada…
KeystoneJS
Préparation
On va utiliser le générateur recommandé par le tuto :
npm install -g generator-keystone
Ça mouline un peu, éventuellement un petit warning sur la version de npm mais rien d’alarmant.
Puis on va créer notre dossier pour le site :
cd /var/www/ mkdir keystoneJS cd keystoneJS
On va créer l’utilisateur qui va faire tourner le site :
adduser keystone
et lui donner les droits sur son dossier :
chown -R keystone:keystone /var/www/keystoneJS/
A partir de là, on va continuer en tant que utilisateur keystone
su - keystone cd /var/www/keystoneJS
Installation
Puis dans ce dossier on lance le générateur :
yo keystone
(Et, sauf si vous avez très envi, refuser d’envoyer des statistiques anonymes au projet)
Ensuite on est sur des rails, le programme vous demande les infos nécessaire :
Welcome to KeystoneJS. ? What is the name of your project? G33keries.org
Pour les templates je n’ai trouvé absolument aucune info donc j’ai laissé par défaut :
? Would you like to use Jade, Swig, Nunjucks or Handlebars for templates? [jade | swig | nunjucks | hbs] (jade) jade
Pour la syntaxe des feuilles de style, j’ai pris less par défaut aussi.
? Would you like to use LESS or SASS for stylesheets? [less | sass] less
Pour le blog, la galerie photo et le contact form : à vous de voir, moi c’est oui partout.
? Would you like to include a Blog? Yes ? Would you like to include an Image Gallery? Yes ? Would you like to include a Contact Form? Yes
Après les information d’administration :
? What would you like to call the User model? User # pour info ca c'est le nom de vs utilisateur genre utilisateur, korbenautes, internautes, blogguers ? Enter an email address for the first Admin user: admin@monsite.com ? Enter a password for the first Admin user: P@ssw0rd! ? Would you like to include gulp or grunt? [gulp | grunt] gulp ? Would you like to create a new directory for your project? Yes
Optionnel : Mandrill
Pour la partie mail, j’ai découvert ça en installant, on a la possibilité de passer par Mandrill. Ce qui évite de vous payez l’installation d’un serveur mail pour les plus préssés. Il suffit de s’inscrire pour avoir une clé d’API pour 12Kmails/mois, ca laisse de quoi spammer, mais pas trop.
? ------------------------------------------------ KeystoneJS integrates with Mandrill (from Mailchimp) for email sending. Mandrill accounts are free for up to 12k emails per month. Would you like to include Email configuration in your project? Yes ? ------------------------------------------------ Please enter your Mandrill API Key (optional). See http://keystonejs.com/guide/config/#mandrill for more info. You can skip this for now (we'll include a test key instead) Your Mandrill API Key: Ttxt1KFg5...
Optionnel : Cloudinary
Ici idem que pour Mandrill, mais pour les images, et pour le coup : la limitation en volume est beaucoup plus basse : 500MB avec une limitation de bande passante en plus. Mais bon j’ai voulu tester quand même.
? ------------------------------------------------ KeystoneJS integrates with Cloudinary for image upload, resizing and hosting. See http://keystonejs.com/docs/configuration/#services-cloudinary for more info. CloudinaryImage fields are used by the blog and gallery templates. You can skip this for now (we'll include demo account details) Please enter your Cloudinary URL: cloudinary://identifiant:<Secret!!!>@geekeries-org ? ------------------------------------------------
Fin de l’installation
Finally, would you like to include extra code comments in your project? If you're new to Keystone, these may be helpful. Yes
La ça mouline un peu, éventuellement quelques warning mais rien d’inquiétant normalement. Et une erreur que j’ai lachement ignoré sur le moment car le message à la fin a dit tout va bien : (Mais je l’ai payé après, vous inquiétez pas…)
npm ERR! EEXIST, open '/home/keystone/.npm/78358e68-tone-npm-acorn-1-1-0-package-tgz.lock' File exists: /home/keystone/.npm/78358e68-tone-npm-acorn-1-1-0-package-tgz.lock Move it away, and try again. npm ERR! System Linux 3.10.23-xxxx-std-ipv6-64 npm ERR! command "/usr/bin/node" "/usr/bin/npm" "install" npm ERR! cwd /var/www/keystoneJS/g33keriesorg npm ERR! node -v v0.10.38 npm ERR! npm -v 1.4.28 npm ERR! path /home/keystone/.npm/78358e68-tone-npm-acorn-1-1-0-package-tgz.lock npm ERR! code EEXIST npm ERR! errno 47 npm ERR! not ok code 0 ------------------------------------------------ Your KeystoneJS project is ready to go! For help getting started, visit http://keystonejs.com/guide To start your new website, run "cd g33keriesorg" then "node keystone".
J’avoue c’est assez simple en dehors de ce petit message inquiétant.
Lancement
Si vous êtes en local, il faudra vous connecter sur le port 3000 par défaut après le lancement. Si vous êtes en distant sur internet comme moi, il faudra surement ouvrir le port 3000 sur votre firewall ou faire un proxy de redirection avec apache pour pouvoir accéder au site
Redirection proxy apache
Commencer dans votre firewall par accepter les flux depuis local host sur le port 3000.
#port keystoneJS iptables -A INPUT -p tcp -s localhost --dport 3000 -j ACCEPT iptables -A INPUT -p tcp --dport 3000 -j DROP
Note : moi je mets les règles dans un fichier dans /etc/init.d pour qu’elles soient systématiquement appliquée au démarrage. A vous de voir…
Puis côté Apache :
a2enmod proxy proxy_http service Apache2 restart cd /etc/apache2/sites-available touch keystoneJS vim keystoneJS
Voilà a quoi le fichier devrait ressembler :
<VirtualHost *:80> ServerAdmin admin@geekeries.org ServerName geekeries.org ServerAlias geekeries.org DocumentRoot /var/www/keystoneJS/g33keriesorg/ ProxyRequests Off ProxyPass / http://127.0.0.1:3000/ ProxyPassReverse / http://127.0.0.1:3000/ ProxyPreserveHost On <Proxy *> Order deny,allow Allow from 127.0.0.1 </Proxy> <Directory /> AllowOverride FileInfo None Options FollowSymLinks -Indexes </Directory> LogLevel warn </VirtualHost>
Dans ce fichier de conf on a simplement dit de rediriger les requêtes pour geekeries.org:80 vers 127.0.0.1:3000, chemin qu’on a autorisé sur le firewall juste avant.
Pour finir on active le site :
a2ensite keystoneJS
Et pour ceux qui ont fait le bloc ci dessus en root, ici repasser en user keystone
su - keystone
Décollage du site
En mode en ligne :
cd /var/www/keystoneJS/g33keriesorg/ node keystone
Ici moi ça a planté au 1er essai :
module.js:340 throw err; ^ Error: Cannot find module '/home/keystone/keystone' at Function.Module._resolveFilename (module.js:338:15) at Function.Module._load (module.js:280:25) at Function.Module.runMain (module.js:497:10) at startup (node.js:119:16) at node.js:935:3
il a fallu relancer un
npm install
Pour que ça veuille bien se lancer, car visiblement il avait pas été jusqu’au bout la 1ère fois. Donc je reprend :
cd /var/www/keystoneJS/g33keriesorg/ node keystone ------------------------------------------------ Applying update 0.0.1-admins... ------------------------------------------------ G33keries.org: Successfully applied update 0.0.1-admins. Successfully created: * 1 User ------------------------------------------------ Successfully applied 1 update. ------------------------------------------------ ------------------------------------------------ KeystoneJS Started: G33keries.org is ready on port 3000 ------------------------------------------------
Ça à l’air plutôt cool…
ET si vous avez rien raté, ça devrait fonctionner sur http://geekeries.org/
et Mise en orbite du site
Vous avez remarquer que le site tourne dans la console, ce qui oblige à garder la session ouverte, pour parer à cela on va utiliser forever un petit module qui permet de faire tourner un script « ad’vitam », très compliqué :
npm install forever -g cd /var/www/keystoneJS/g33keriesorg forever start keystone.js
Je vous laisse deviner comment arrêter le site.
Conclusion
Finalement en comparant à Ghost que j’avais avant ce wordpress,si on fait un petit récap’ par rapport à KeystoneJS :
Ghost est beaucoup simple que keystone, à déployer comme à utiliser, je suis un grand, grand fan de Ghost au passage. Par contre Ghost est plus limité, pas de module galerie photo, la page informations de contact n’existe pas, les commentaires sur les articles non plus.
Bref, Ghost c’est simple, clair, et efficace, mais ça a peu de fonctionnalité
Keystone est plus complexe à installer plus complexe à utiliser, mais il est plus complet. Si vous êtes bricoleur, je pense que ça a énormément de potentiel, et le combo MongoDB/NodeJS parait prometteur même si ça reste à optimiser.
Bref, c’est plus ambitieux, mais moins abouti que ghost pour l’instant aussi.
Et puis l’éternel WordPress, c’est complet, efficace propre sur soit. Ca manque un peu d’âme quand même. Mais à la fin ça fait le boulot, mieux que les 2 autres pour le coup, et c’est ça qu’on veut je pense.
Byzouxxx @ tous.