Catégories
Open-source Planet-libre Web

Installer facilement NodeJS et NPM sur une Debian Stable

A l’heure actuelle, il n’existe pas de dépôt officiel pour installer NodeJS et NPM sur une distribution Debian Stable. Voici donc un nouveau script d’installation automatique qui va installer sur votre système Debian:

  • la dernière version de NodeJS (depuis le GitHub officiel)
  • la dernière version de NPM  (Node Package Manager)

Comme toujours, mon script est hébergé sur GitHub. C’est à partir de là que vous pouvez me remonter vos questions et remarques…

Procédure à suivre

Le plus simple est de saisir les commande suivantes dans un terminal:

cd /tmp
wget https://raw.github.com/nicolargo/nodeautoinstall/master/nodeautoinstall.py
sudo python ./nodeautoinstall.py -d

Le script va normalement se dérouler sans problème en installant le tout dans le répertoire /opt/node (qu’il est possible de modifier avec l’option -o du script).

L’option -d permet de générer un fichier de log de l’exécution du script (à consulter en cas de problème…) dans le fichier /tmp/nodeautoinstall.log.

Pour que votre/vos utilisateurs puisse utiliser node, il faut également qu’ils ajoutent les lignes suivantes au fichier .profile:

# --- NodeJS
export PATH=$PATH:/opt/node/bin
export NODE_PATH=/opt/node:/opt/node/lib/node_modules
# ---

Le résultat…

Vous devriez alors disposer des dernières versions des deux composants:

Il ne vous reste plus qu’à suivre mon billet d’introduction à NodeJS en passant le chapitre sur l’installation que vous venez de faire automatiquement dans ce billet:)

Catégories
Developpement Open-source Planet-libre Reseau Systeme Web

VnStat.js, un node pour VnStat

Mes derniers billets traitaient de VnStat (le logiciel pour surveiller les débits de vos interfaces Ethernet) et de Node.js (le framework permettant de créer facilement des applications réseaux coté serveur). C’est donc dans ma logique toute cartésienne, que j’ai développé un javascript permettant de disposer d’une interface Web pour consulter ces statistiques de débits sans avoir à installer un serveur Web et son plugin PHP (comme c’est le cas avec le VnStat PHP frontend).

Ce script, disponible sous licence GPL v3, s’appelle VnStat.js est disponible dans mon GitHub à l’adresse suivante:


https://github.com/nicolargo/vnstat.js

Installation

Pour fonctionner correctement, VnStat.js nécessite:

  • une installation de VnStat fonctionnelle. Je vous conseille la lecture de ce billet pour effectuer une installation « from-scratch » sur une machine tournant sous Debian / Ubuntu.
  • que le framework Node.js soit installé sur cette même machine. Le script a été validé avec la dernière version stable de Node.js (0.4.12).

On commence par récupérer la dernière version de VnStat.js depuis le dépôt Git:

[cce lag= »bash »]

cd ~

git clone git://github.com/nicolargo/vnstat.js.git

cd vnstat.js

[/cce]

Pour les personnes utilisant NPM (le package manager de Node.js), vous pouvez l’utiliser pour installer VnStat.js. Suivre les instructions de cette page.

Lancement de VnStat.js

Pour lancer le noeud VnStat.js, il suffit de saisir les commandes suivantes:

[cce lag= »bash »]

cd ~/vnstat.js

node ./vnstat.js

[/cce]

Le « node » va se mettre en écoute sur le port TCP 1337 de votre serveur (il faut donc ajouter une règle pour autoriser les requêtes entrantes vers ce port si vous avez un firewall).

A l’ouverture de l’URL http://adressedevotremachine:1337/ dans un navigateur compatible HTML5, la page principale suivante va s’afficher:

Elle affiche le résumé des statistiques de VnStat ainsi que le top 10 des journées. Le menu du haut permet de naviguer vers des statistiques plus ciblés.

Par heures (avec à la fois la vue graphique et textuelle):

Et ainsi de suite pour les jours, semaines (à noter qu’il n’y a pas de graphe spécifique par semaine généré par vnstati) et enfin par mois.

Configuration de VnStat.js

Le design de VnStat.js peut bien entendu être adapté à vos besoins en éditant le fichier css/style.css (CSS3). Si vous avez besoin de changer le port TCP d’écoute du node, il y a une variable pour cela dans le fichier lib/server.js.

C’est mon premier développement avec le framework Node.js, il y a sûrement des améliorations à faire mais la structure reste assez didacticiel pour servir de base pour d’autre développement du même type.

Lancement automatique de VnStat.js au démarrage de votre machine

 Comme vous avez pu le remarquer, le node VnStat.js est lancé à la main dans ce billet. Si vous souhaitez mettre en production ce script et le lancer automatiquement au démarrage de votre machine, je vous conseille la lecture du billet de Vincent sur son blog qui regorge d’information sur ce superbe framework qu’est Node.js.

Catégories
Developpement Open-source Planet-libre Web

Une introduction à node.js

Node.js est un framework implémentant, coté serveur, la version 8 du moteur Javascript de Google (pour une présentation rapide, je vous conseille de parcourir ces quelques slides).

L’objectif de ce billet est d’installer Node.js sur votre machine GNU/Linux et d’exécuter votre premier programme (hello.js).

Installation de Node.js depuis les sources

Il n’existe pas, à l’heure à laquelle je rédige ce billet, de « package » officiel de Node.js pour Debian/Ubuntu (voir le chapitre suivant pour une installation depuis un PPA). L’installation est cependant assez simple. Pour installer la dernière version (stable) depuis le dépôt officiel GIT, il suffit de saisir les commandes suivantes:

mkdir ~/src
cd ~/src
git clone https://github.com/joyent/node.git
cd ~/src/node
git checkout v0.8.0
sudo mkdir /opt/node
./configure --prefix=/opt/node
make
sudo make install
echo 'export PATH=$PATH:/opt/node/bin' >> ~/.profile
echo 'export NODE_PATH=/opt/node:/opt/node/lib/node_modules' >> ~/.profile
source ~/.profile

L’installation va se faire dans le répertoire /opt/node.

Pour vérifier que Node.js est bien installé sur votre machine:

# node -v
v0.8.0

Les modules avec NPM

Pour étendre les fonctions de bases de Node.js, il faut utiliser l’utilitaire NPM (Node Package Manager). Grâce à lui il est possible d’ajouter des packages à Node.js.

Pour installer Node.js depuis les sources (voir le chapitre suivant pour une installation depuis un PPA):

curl http://npmjs.org/install.sh | sudo sh -c 'export PATH=$PATH:/opt/node/bin ; export NODE_PATH=/opt/node:/opt/node/lib/node_modules ; sh'

Je vous laisse ensuite regarder la documentation puis la liste des packages disponibles.

Installation depuis un PPA

Si vous êtes sous Ubuntu, il existe un PPA maintenant les dernières versions de Nodejs et de NPM. Pour installer le PPA sur votre système:

sudo add-apt-repository ppa:chris-lea/node.js

Puis l’installation de Nodejs et NPM:

sudo apt-get update && sudo apt-get install nodejs npm

Un premier exemple, ou le fameux « Hello world ! »

On commence par éditer un fichier ‘hello.js‘ contenant le code suivant:

//
// A JavaScript based on Node.js
//
// Nicolas Hennion (aka) Nicolargo
//
// GPL v3.0
//

var http = require('http');
var url = require('url');
var spawn = require ('child_process').spawn;

//**********
// Variables
//**********

var listenport = 1337;

//**********
// Functions
//**********

// Chomp function (delete the \n)
String.prototype.chomp = function () {
return this.replace(/(\n|\r)+$/, '');
};

// HTTP request
function onRequest(req, res) {
console.log("New request: "+req.url);
res.writeHead(200, {'Content-Type': 'text/plain'});
res.write('Hello World');
res.end();
};

//*************
// Main program
//*************

// Create the HTTP server
http.createServer(onRequest).listen(listenport);

// Get the hostname (FQDN)
var listenaddress = spawn('hostname', ['-f']);
listenaddress.stdout.on('data', function (data) {
var fqdn = new String(data);
console.log('Server running listenning http://'+fqdn.chomp()+':'+listenport+'/');
});

Puis on lance le noeud (node) avec la commande:

# node ./hello.js
Server running listenning http://VotreMachine:1337/

Il ne reste plus (après avoir autorisé les requêtes vers le port TCP 1337 si vous avez un Firewall sur votre machine de test) qu’à pointer une navigateu Web vers l’URL donnée par la commande pour voir affiché le résultat:

Détail du code

On commence par initialiser les fonctions de Node.js dont on a besoin (voir la liste dans la documentation officielle). Pour notre exemple, nous avons besoin de générer un serveur HTTP (http) et de lancer une commande système (spawn) récupérant le nom FQDN de la machine.

[cc lang= »javascript »]

var http = require(‘http’);

var spawn = require (‘child_process’).spawn;

[/cc]

Après la définition d’une variable globale (contenant le numéro TCP du port d’écoute du serveur) ainsi que d’une fonction enlevant le caractère de retour à la ligne du chaine (chomp), on passe au vif du sujet en générant un serveur HTTP:

[cc lang= »javascript »]

// Create the HTTP server

http.createServer(function (req, res) {

res.writeHead(200, {‘Content-Type’: ‘text/plain’});

res.end(‘Hello World\n’);

}).listen(listenport);

[/cc]

Cette commande est « forké » (elle génère donc un daemon HTTP écoutant sur le port ‘listenport’ et renvoyant le message texte ‘Hello World’). Enfin on affiche dans la console l’URL du serveur:

[cc lang= »javascript »]

// Get the hostname (FQDN)

var listenaddress = spawn(‘hostname’, [‘-f’]);

listenaddress.stdout.on(‘data’, function (data) {

var fqdn = new String(data);

console.log(‘Server running listenning http://’+fqdn.chomp()+’:’+listenport+’/’);

});

[/cc]

Aller plus loin

Bien évidement, ce billet n’est qu’une simple introduction à ce framework (d’ou le titre :)). Le code donnée en exemple est sûrement « optimisable » mais à un objectif pédagogique.  Je reviendrai rapidement sur ce sujet en proposant des développement basée sur Node.js pour la supervision de nos belles machines. Stay tuned

Sources ayant inspirées ce billet: